对于大多数开发者来说,关系数据库是最佳选择,因为它们已经存在超过40年,而且在历史上一直表现良好。然而,如果关系数据库不适用于您的特定用例,那么超越关系数据库是至关重要的。非关系数据库可能是正确的选择,如果:
- 您的应用程序需要超低延迟。
- 您的数据是非结构化的,或者您没有任何关系数据。
- 您只需要序列化和反序列化数据(JSON、XML、YAML 等)。
- 您需要存储大量数据。
图片
键值存储
- Amazon DynamoDB: DynamoDB是由亚马逊网络服务(AWS)提供的全面托管的NoSQL数据库服务。它支持键值和文档数据模型。DynamoDB以其低延迟性能和无缝可扩展性而闻名。它还提供诸如内存中缓存(DAX)、按需备份、恢复到某一时刻和自动扩展等功能。
- DynamoDB的低延迟和高吞吐量的能力使其成为游戏应用的良好选择,速度至关重要。例如,Fortnite使用DynamoDB存储游戏配置文件,跟踪游戏内购买并维护排行榜。
- 由于其可扩展性和全面托管的特性,DynamoDB在微服务架构中也得到了广泛应用。Airbnb使用DynamoDB存储酒店预订数据,并在高峰时期管理高需求。
- DynamoDB是一个全面托管的服务,这意味着AWS处理所有操作方面的工作,如硬件供应、设置、配置、复制、软件补丁、扩展和备份。如果您希望避免管理数据库的开销,DynamoDB可能是一个不错的选择。其他NoSQL数据库,如MongoDB、Cassandra或CouchDB,如果需要丰富的查询功能、可调一致性或多主复制,则可能更适合。
图存储
(1) Neo4j: Neo4j是由Neo4j,Inc.开发的图数据库管理系统。它旨在轻松高效地处理数据关系。Neo4j使用图模型来表示数据,使其非常适用于处理具有复杂关系和动态模式的数据。它支持ACID事务,并提供一种称为Cypher的强大而表达丰富的图查询语言。
(2) Neo4j(图数据库):
- 社交网络: 像Neo4j这样的图数据库非常适用于社交网络应用。例如,如果您正在构建一个建议朋友的功能,图数据库可以轻松遍历不同用户之间的关系。例如,LinkedIn使用图数据库来实现他们的“你可能认识的人”功能。
- 推荐引擎: 像Walmart这样的公司使用图数据库来建立他们的推荐系统。他们可以快速分析客户行为和不同产品之间的关系,以提供准确的推荐。
列存储
(1) Cassandra: Apache Cassandra是一款高度可扩展且分布式的NoSQL数据库,专为跨多个通用服务器处理大量数据而设计。它提供高可用性,没有单点故障。Cassandra使用广列存储模型,允许以列的方式存储数据,非常适合写入密集的工作负载。
在广列存储中,写入通常附加到数据文件的末尾,避免了昂贵的磁盘寻址,并使写操作非常快。这对于写入密集型工作负载,其中数据不断流入数据库,特别有益。
(2) HBase: Apache HBase是构建在Hadoop之上的列定向NoSQL数据库。它旨在为大数据提供随机、实时的读/写访问。HBase非常适用于需要快速和随机访问大型数据集的工作负载,并且与Hadoop的MapReduce数据处理范例很好地集成。
(3) Cassandra/HBase(列存储)
- 时间序列数据: Cassandra经常用于存储时间序列数据,例如来自物联网设备或股票价格数据的指标。其列向结构允许有效地写入和读取顺序数据。Netflix使用Cassandra实时监控其流媒体服务。
- 大数据处理: HBase作为Hadoop生态系统的一部分,是处理大量数据的应用的理想选择。像Facebook这样的公司使用HBase存储用户消息和帖子。
文档存储
(1) CouchDB: Apache CouchDB是一款面向文档的NoSQL数据库,使用JSON表示文档,使用JavaScript进行MapReduce查询,使用HTTP进行API。CouchDB以其多主复制系统而闻名,这使得它成为离线和移动应用的不错选择。它还支持个别文档更新的ACID属性。
(2) CouchDB(文档存储):
- 离线优先应用: CouchDB的复制模型使其成为需要在离线状态下工作,然后在网络连接可用时同步的应用程序的良好选择。例如,对于在偏远地区工作的技术人员的现场服务应用程序可能使用CouchDB在本地存储数据,然后在联网时与中央数据库同步。
- CouchDB具有内置的复制机制,可以在两个数据库实例之间同步数据。这意味着您可以在用户设备上拥有数据库的本地实例,并在服务器上拥有远程实例。当设备脱机时,应用程序可以继续从和写入到本地数据库。当设备重新联机时,本地和远程数据库可以同步。
- CouchDB还具有内置的冲突解决机制。当数据库的不同实例上以不同方式修改同一文档时,CouchDB可以检测到冲突,并允许应用程序以对特定用例有意义的方式解决冲突。
值得注意的是,有办法使用AWS构建支持离线的应用程序。例如,您可以使用支持移动和Web应用程序的AWS AppSync,该服务支持离线数据访问和同步。AppSync在设备重新联机时自动同步数据。但这需要与使用CouchDB等文档存储相比,采用不同的架构和技术。
(3) 内容管理系统: CouchDB的灵活、无模式的模型非常适合内容管理系统,其中每个内容块可以具有不同的属性。
- 内容管理系统(CMS)通常涉及多种类型的内容,每种类型都有自己的属性集。例如,博客文章可能具有标题、作者和正文等属性,而产品列表可能具有价格、制造商和SKU等属性。
- 在传统的关系数据库中,通常需要预先定义一个模式,指定每种内容类型可以具有哪些属性。这可能不灵活,并且难以随CMS需求的演变而更改。