下面我们从各个用例的角度来考虑哪些系统适合这些用例。你怎么看?首先,让我们看一下各种数据模型。这些模型的分类法来自EmilEifrem和NoSQL数据库。文档数据库来源:受LotusNotes启发。数据模型:包含key-value的文档集合示例:CouchDB、MongoDB优点:自然数据模型、编程友好、快速开发、web友好、CRUD。图数据库起源:欧拉和图论。数据模型:节点和关系,也可以处理键值对。示例:AllegroGraph、InfoGrid、Neo4j优点:解决复杂的图形问题。关系型数据库起源:E.F.Codd在ARelationalModelofDataforLargeSharedDataBanks中提出的数据模型:各种关系型实例:VoltDB,Clustrix,MySQL优点:高性能,可扩展的OLTP,支持SQL,物化视图,支持Transactional,编程友好的。对象数据库起源:图数据库研究数据模型:对象实例:Objectivity,Gemstone优点:对象模型复杂,键值访问速度快,键函数访问,图数据库的优点。Key-Value数据库起源:亚马逊的论文Dynamo和DistributedHashTables。数据模型:键值对例子:Membase、Riak优点:处理海量数据,快速处理大量的读写请求。编程友好。BigTable类型数据库的由来:Google的论文BigTable。数据模型:columncluster,每一行理论上都是不同的例子:HBase,Hypertable,Cassandra优点:处理大量数据,处理极高的写入负载,高可用性,支持跨数据中心,MapReduce。数据结构服务起源:数据模型:字典操作、列表、集合和字符串值示例:Redis优点:不同于以往的任何数据库网格数据库起源:数据网格和元组空间研究。数据模型:基于空间的架构示例:GigaSpaces、Coherence优点:事务处理的高性能和高可扩展性您的应用程序应该使用什么?关键是要认识到不同的应用程序需要不同的数据模型和产品。选择正确的数据模型和产品。要了解您的应用程序需要什么样的数据模型,您可以查看您实际使用NoSQL到底是为了什么?在本文中,我总结了一些具有不同特点的非常规使用场景。适应您的需求和应用场景。反过来,您可以找到最适合您的架构的产品。NoSQL还是SQL都无关紧要。综合考虑数据模型、产品特性和应用场景。不同的产品有不同的功能,单凭数据模型是无法决定选择谁的。哪种产品具有您最需要的功能就是最好的。如果你的应用有以下需求:复杂的东西,如果你不能承受数据丢失的风险或者你想要一个简单的事务编程模型,你可以选择关系数据库和网格数据库。示例:库存系统需要完整的ACID属性。如果我购买了一件商品却被告知已售罄,我会非常恼火。我不要补偿,我只想要我买的东西。可扩展性,NoSQL或SQL均可,目标产品需支持水平扩展、分区、在线硬件加减、负载均衡、自动分片、数据均衡、容错等特性。为了追求高可用,可以使用Bigtable等支持最终一致性的数据库。需要应对长时间的快速读写,可以看看文档数据库,key-value数据库或者内存数据库,也可以考虑SSD。要实现社交网络,最好的选择应该是图数据库。其次,像Riak这样支持关系的数据库也是可以的。支持简单SQL连接操作的内存关系数据库可以处理少量数据。Redis的设置和列表操作就是这样做的。如果你的应用有以下需求:如果你需要不同的访问方式和数据类型,那么你可以看看文档数据库,他们在这方面非常灵活。对于大数据量的离线分析,应该首先考虑Hadoop,其次是其他支持MapReduce的产品。当然,支持MapReduce并不等于擅长MapReduce处理。如果需要跨越多个数据中心,可以选择基于Bigtable模型的产品,或者它的分布式产品,可以解决延迟问题和分区容错问题。CRUD类型的应用程序可以考虑文档数据库,这样复杂的数据结构可以在不加入的情况下访问。搜索可以考虑Riak。如果你需要列表、集合、队列、发布订阅等数据结构,可以考虑Redis,它的分布式锁等特性也很有用。编程友好,如果要使用JSON、HTTP、REST、Javascript等程序员喜欢的数据类型,最好的选择是文档数据库和key-value数据库。如果你的应用有以下需求:实时事务处理的物化视图,可以考虑VoltDB,它非常适合快速处理大量事务。对于企业级的支持和服务级别的协议,你可以在市场上寻找以此为卖点的产品,比如Membase。记录大量的连续数据,对一致性要求不是太高,可以看看Bigtable类型的数据库,因为它工作在分布式文件系统上,可以处理大规模的写请求。它需要尽可能易于使用,请考虑使用PaaS解决方案,您几乎不需要自己做任何事情。如果你的产品要卖给企业客户,请考虑关系型数据库,因为他们习惯于关系型数据库。动态建立对象之间的关系,对象的属性可以动态增减,可以考虑图数据库,因为它不需要schema,可以在代码中按需建模。要支持大型视频文件,请查看S3等存储服务。NoSQL不适合存储BLOBS,虽然MongoDB也提供文件服务。如果您的应用有以下需求:快速批量上传大量数据,您必须找到支持该场景的产品。但大多数产品不支持批量操作。更改容易,应选择支持动态模式的文档数据库和Key-value数据库。它支持可选域,并且可以在不修改架构的情况下增加或减少域。为了支持完整性约束,选择支持SQLDDL的数据库,可以用存储过程或应用程序代码来实现。深度连接的图数据库,支持实体键之间的快速定位。原文链接:http://www.raincent.com/content-85-3842-1.html
