nosql数据库有哪些

上周朋友在讨论数据库选型的时候,提到了三种常见的NoSQL数据库:Redis、Memcache、MongoDB。
Redis支持字符串、链表等多种数据结构,并且可以持久化数据,非常适合需要快速读写和持久化的应用。
我问他单线程Redis模式是不是有点限制,他说是的,但是类似的情况下就不用担心数据一致性问题了。

然后朋友提到了Memcache,它一下子就有大量的对象,但是只能存储一个key值,不能持久化。
它似乎是专门为缓存而设计的。
我想知道如何处理 Memcache 数据同步。
他们说不支持这个,只能用作缓存。

最后,我们讨论了 MongoDB。
朋友说插入速度快,可以处理大表,支持二维空间索引。
看起来很强大。
我问他弱数据结构模式是什么意思,他说这样添加新字段不会影响旧数据,非常灵活。

朋友的结论是,每种数据库都有其优点,应该根据具体需求来选择。
我点头同意,但我仍然在想,如果有一个统一的数据解决方案就好了。
算了,你都知道的。

瞎聊SQL,NoSQL,NewSQL

nosql数据库的存储结构是啥

事实上,NoSQL数据库的存储结构并不是个性化的,根据类型的不同,设计也完全不同。
主要有以下几种:
1 .文档数据库(例如MongoDB)
结构是一种使用类似于 JSON 的键值对格式的文档,可以嵌套或数组。

存储用户位置信息时,直接将纬度、经度、地址和时间戳收集到一个文档中,无需打开它。

优点是灵活性,当数据模型发生变化时不需要做大的改变。
例如位置服务,MongoDB文档结构在访问位置信息方面效率很高,并且不需要像关系数据库那样复杂的表连接。

优化案例:如果文档尺寸太大,查询会很慢。
可以将不常用的字段分成单独的组,并使用引用链接数据,这样可以平衡数据一致性和查询效率。

2 图数据库(例如Neo4 j)
基本结构是节点和边。
节点代表实体,边代表关系。

例如,在社交网络中,用户是节点,朋友关系是边。
边还可以添加属性,例如关系类型和建立时间。

优点是在处理复杂关系查询时特别有效。
例如,在社交推荐中,图数据库可以快速遍历“用户朋友的朋友”的路径,实现个性化推荐。
为了验证这种关系,关系数据库需要多个表关联。
当数据量很大时,性能会明显下降。

最低学习要求是了解栅格图理论以及使用特殊查询语言(例如 Cypher)的能力。
优化查询需要根据图结构的属性调整遍历路径。

3 键值数据库(如Redis)
基本结构是键值对,键是唯一标识符,值可以是字符串、列表、数组等。

优点是读写速度快,适合缓存和会话管理。
例如,电商网站使用Redis存储购物车信息,使用key快速查找用户数据,list-in-value结构可以动态添加和删除商品。

限制是查询灵活性较弱。
可以匹配仅与键完全一致,不能直接按值项过滤。

4 列族数据库(例如Cassandra)
基本结构是一系列柱子。
每个列族包含多行。
每行都有一个行键和多个列。
还可以动态添加列。

例如,存储用户行为记录时,用户ID为行键,点击、购买等行为类型为列族,时间戳为列名。

优点是扩展性好,适合写入海量数据。
例如,对于物联网设备数据采集,Cassandra可以水平添加节点来处理设备的增加。
列存储设计还提高了压缩和查询效率。

查询模式通常按行族或列族范围扫描数据,复杂的分析必须结合MapReduce等框架。

5 选择 NoSQL 数据库时请考虑以下几点:
数据属性:如果关系复杂,选择图数据库(如社交网络分析);如果是半结构化或非结构化,请选择文档类型(例如记录、JSON);如果读写频繁,选择键值类型(如缓存);如果您要大规模写入,请选择列族(例如时间序列数据)。

查询需求:如果要灵活查询嵌套属性,请选择文档类型;如果想要高效地遍历关系,就选择图数据库;如果要按主键查询,请选择键值类型。

扩展需求:如果要水平扩展,选择列族和键值类型;如果垂直扩展也可以接受,请选择文档类型(在某些情况下)。

6 案例概要:
地理定位服务:MongoDB 文档结构简化了设计,但请注意文档大小会影响性能并在必要时拆分字段。

社交推荐系统:Neo4 j图结构直观地表达关系,但需要花时间学习图查询优化。

电商缓存层:Redis键值结构支持高并发,但键命名必须设计避免冲突。

NoSQL数据库有多种存储结构以适应不同的场景。
但选择时应考虑数据特征和模式查询和扩展需求。
不要只关注新想法而忽视实际的商业风险。