NoSQL数据库的四大分类介绍

NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

NoSQL数据库的四大分类:
键值(Key-Value)存储数据库:
这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据。Key/value模型对于IT系统来说的优势在于简单、易部署。但是如果DBA只对部分值进行查询或更新的时候,Key/value就显得效率低下了。[3]  举例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.
列存储数据库:
这部分数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列。这些列是由列家族来安排的。如:Cassandra, HBase, Riak.
文档型数据库:
文档型数据库的灵感是来自于Lotus Notes办公软件的,而且它同第一种键值存储相类似。该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可 以看作是键值数据库的升级版,允许之间嵌套键值。而且文档型数据库比键值数据库的查询效率更高。如:CouchDB, MongoDb. 国内也有文档型数据库SequoiaDB,已经开源。
图形(Graph)数据库:
图形结构的数据库同其他行列以及刚性结构的SQL数据库不同,它是使用灵活的图形模型,并且能够扩展到多个服务器上。NoSQL数据库没有标准的查询语言(SQL),因此进行数据库查询需要制定数据模型。许多NoSQL数据库都有REST式的数据接口或者查询API。[2]  如:Neo4J, InfoGrid, Infinite Graph.
因此,我们总结NoSQL数据库在以下的这几种情况下比较适用:1、数据模型比较简单;2、需要灵活性更强的IT系统;3、对数据库性能要求较高;4、不需要高度的数据一致性;5、对于给定key,比较容易映射复杂值的环境。

NoSQL数据库的四大分类表格分析

分类

Examples举例

典型应用场景

数据模型

优点

缺点

键值(key-value 

Key 指向 Value 的键值对,通常用hash table来实现 

列存储数据库

Cassandra, HBase, Riak

分布式的文件系统

以列簇式存储,将同一列数据存在一起

查找速度快,可扩展性强,更容易进行分布式扩展

功能相对局限

文档型数据库

CouchDB, MongoDb

Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容)

Key-Value对应的键值对,Value为结构化数据

数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构

查询性能不高,而且缺乏统一的查询语法。

图形(Graph)数据库 

Neo4J, InfoGrid, Infinite Graph

社交网络,推荐系统等。专注于构建关系图谱

图结构

利用图结构相关算法。比如最短路径寻址,N度关系查找等

很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。 

<span color:#136ec2;"="" style="word-wrap: break-word; font-size: 1pt;">
### NoSQL数据库四大类型及其特点 #### 1. 键值存储型数据库 键值存储型数据库是最简单的NoSQL数据库形式之一,其核心概念是以键作为索引,通过键快速查找对应的值。这种类型的数据库非常适合缓存场景以及需要高速读写的简单数据结构。由于其实现机制较为轻量级,通常能够提供极高的性能和扩展能力[^2]。 - **优点**: - 极高的读写速度,适合频繁访问的小规模数据。 - 数据模型非常灵活,支持动态增加新字段而不需要修改表结构。 - **缺点**: - 查询功能有限,仅能基于键进行检索,难以执行复杂的多条件查询。 - **典型代表**: Redis, DynamoDB. ```python import redis r = redis.Redis(host='localhost', port=6379, db=0) r.set('key', 'value') # 设置键值对 print(r.get('key')) # 获取对应值 ``` --- #### 2. 文档存储型数据库 文档存储型数据库以半结构化的方式存储数据,通常是JSON或BSON格式的文档集合。每条记录是一个独立的文档,允许嵌套复杂的数据结构。这类数据库特别适用于内容管理系统、博客平台等场景,因为它们可以轻松适应不断变化的数据模式[^1]。 - **优点**: - 支持丰富的数据结构,易于表达层次化的信息。 - 方便实现水平扩展,适配大规模分布式环境。 - **缺点**: - 对于强事务性的需求可能表现不佳。 - 复杂的跨文档查询效率较低。 - **典型代表**: MongoDB, Couchbase. ```javascript const { MongoClient } = require('mongodb'); async function main() { const uri = "your_mongodb_connection_string"; const client = new MongoClient(uri); await client.connect(); const database = client.db('test'); const collection = database.collection('documents'); const doc = { name: "John", age: 30 }; await collection.insertOne(doc); // 插入一条文档 } main().catch(console.error); ``` --- #### 3. 列族存储型数据库 列族存储型数据库将数据按列家族的形式组织起来,每一行由多个列组成,这些列可以根据实际需求自由增减。它主要用于处理超大规模的数据集,并且能够在硬件资源受限的情况下保持高效运行[^4]。 - **优点**: - 非常擅长管理稀疏矩阵(Sparse Matrix),节省大量磁盘空间。 - 提供强大的压缩能力和高效的随机读取/顺序扫描性能。 - **缺点**: - API相对复杂,学习成本较高。 - 不太适合实时分析或者低延迟交互的应用程序。 - **典型代表**: Apache Cassandra, HBase. ```java // 使用Cassandra Java Driver连接并操作数据库 Cluster cluster = Cluster.builder() .addContactPoint("127.0.0.1").build(); Session session = cluster.connect(); session.execute( "INSERT INTO my_keyspace.my_table (id, value) VALUES (?, ?)", UUID.randomUUID(), "example_value" ); cluster.close(); ``` --- #### 4. 图形存储型数据库 图形存储型数据库专门用来表示实体之间的关系网络,比如社交图谱、推荐引擎等领域。它的优势在于能够高效地遍历节点间的关系链路,从而挖掘深层次的信息关联性[^3]。 - **优点**: - 特别适合解决涉及高度互联对象的问题。 - 可视化效果直观清晰,便于理解和维护。 - **缺点**: - 存储开销较大,尤其是当边的数量激增时。 - 性能优化难度高于其他几种NoSQL类型。 - **典型代表**: Neo4j, Amazon Neptune. ```cypher CREATE (a:Person {name:'Alice'}) CREATE (b:Person {name:'Bob'}) CREATE (a)-[:KNOWS]->(b) MATCH (p1:Person)-[r:KNOWS]->(p2:Person) RETURN p1.name, r, p2.name; ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值