最显著的相似之处是它们都避免使用关系模型。除此之外,在任何方面上它们都有很大不同。以下是一些比较它们的方式: SimpleDB 一个由亚马逊托管、维护和扩展的服务。超出免费使用层后,将按月计费。 所有数据在多个数据中心之间实时复制 所有副本都能够提供实时请求 在网络或服务器故障后,不同步的节点将自动重新同步 后台复制导致最终一致性但更高(理论)可用性 所有数据都存储为字符串名称/字符串值对,每个与ItemName相关联 每个项目仅限于半兆字节(每个名称或值只能长达1024字节,每个项目可以容纳256个名称/值对),每个域最多可以容纳10GB 这些限制使其适合可以分解成小块的数据集。 SimpleDB针对并行执行的许多小请求进行了优化 每个数据域都有吞吐量限制 通过将数据分布在更多域中来实现水平扩展 所有属性值都会自动索引,但不存在复合索引(但可以模拟) 使用类似于SQL Select的查询语言执行查询 MongoDB 一种开源产品,您需要在自己的服务器上安装和维护。 数据可以以主从模式进行复制 只有主服务器可以提供实时写请求,虽然非推荐的有限主-主模式下从服务器也可以提供查询服务 在网络或服务器故障或副本太落后时,总是需要操作员干预。 单个主服务器具有强一致性。 所有数据都作为序列化JSON文档存储,允许大量数据类型 每个文档仅限于4MB,较大的文档可以使用特殊的文档切片系统存储最适合小型和中型数据以及小型二进制对象 吞吐量受 MongoDB 和硬件限制 通过更大的服务器进行垂直扩展,未来可通过正在开发的分片模块在自己的服务器群集上实现水平扩展。 文档 ID 自动索引。需要时可以创建和删除索引,索引可以为单个键或组合键。 使用 JSON 风格的查询语言执行查询。
SimpleDB 被描述为: 数据模型很简单: 大量的项目集合组织成域。 项目是小的哈希表,包含键值对属性。 可以使用各种词汇查询搜索属性。 MongoDB 稍微简单一些: 数据库管理JSON类似文档的集合,这些文档以二进制格式存储,称为BSON。
我对mongodb有相当的了解,刚开始使用SimpleDB。首先,它们都不是键值存储。Mongodb和SimpleDB是基于文档的nosql数据库,没有固定的架构。这意味着在输入数据之前不需要为“表”创建架构(基本上意味着您可以在其中存储任何内容)。基本上,这里的相似之处就到此为止了。我将使用S表示SimpleDB,M表示Mongo。 M 用C++编写,S 用Erlang编写(不是最快的语言) M 是开源的,安装广泛,S 是专有的,只能在亚马逊AWS上运行。你还需要为 S 支付一大堆费用 S 有很多奇怪的限制。M 的限制更合理。最奇怪的限制包括: 域(表)的最大大小为10GB 属性值长度(字段大小)为1024字节 Select响应中的最大项数为2500 Select的响应大小的最大值(S可以返回的最大数据量)为1Mb S 只支持几种语言(Java、PHP、Python、Ruby、.NET),而M支持更多语言。 两者都支持REST S 具有非常类似于SQL的查询语法(但功能要弱得多)。使用M,您需要学习一种看起来像JSON的新语法(基础知识也很简单) 使用M,您必须学习如何构建数据库。因为许多人认为无模式意味着可以将任何垃圾扔进数据库并轻松提取,他们可能会惊讶于垃圾进、垃圾出的最大化效应。我认为在S中也是如此,但不能确定。 两者都不允许大小写不敏感搜索。在M中,您可以使用正则表达式以某种方式(丑陋/无索引)克服这个限制,而不引入额外的小写字段/应用逻辑。 在S中,只能按一个字段排序 由于5秒时间限制,S中的计数可能会表现奇怪。如果5秒钟过去了,查询还没有完成,您将得到一个部分数字和一个令牌,该令牌允许您继续查询。应用程序逻辑负责收集所有这些数据并汇总。 一切都是UTF-8字符串,这使得在S中使用非字符串值(如数字、日期)非常麻烦。M类型支持更加丰富。 两者都不支持事务和连接 M支持压缩,这对于NoSQL存储非常有帮助,因为同一个字段名存储在各处。 S仅支持单个索引,M 支持单个、复合、多键、地理空间等多种索引。 两者都支持复制和分片 你应该考虑的最重要的一件事是,SimpleDB有一个非常基本的查询语言。甚至像group by、sum、average、distinct以及数据操作这样的基本功能都不支持,因此其功能并不比Redis/Memcached更丰富。另一方面,Mongo支持丰富的查询语言。