18

SimpleDB 与 MongoDB 类似吗?

4

3 回答 3

25

最大的相似之处在于它们都避免了关系模型。除此之外,无论您以何种方式看待它们,它们都主要是不同的。以下是对它们进行比较的十几种方法的细分。

简单数据库

  1. 由 Amazon 托管、维护和扩展的 Amazon 服务。超出免费使用层级后,您每个月都需要为您使用的内容付费。
  2. 所有数据都在多个数据中心的后台实时复制
  3. 所有副本都能够为实时请求提供服务
  4. 网络或服务器故障后,任何不同步的节点都会自动重新同步
  5. 后台复制导致最终的一致性,但更高的(理论上)可用性
  6. 所有数据都存储为字符串名称/字符串值对,每个都与一个 ItemName 相关联
  7. 每个项目限制为半兆字节(每个名称或值只能是 1024 字节长,每个项目包含 256 个名称/值对)每个域可以容纳 10GB
  8. 这些限制使其适用于可以分解成小块的数据集。
  9. SimpleDB 针对并行执行的许多小请求进行了优化
  10. 每个数据域都有吞吐量限制
  11. 水平可扩展性是通过将数据分布在更多域中来实现的
  12. 所有属性值都被自动索引,复合索引不存在(但可以模拟)
  13. 使用(精简的)类似 SQL Select 的查询语言执行查询

MongoDB

  1. 您在自己的服务器上安装和维护的开源产品。
  2. 数据可以在主从模式下复制
  3. 只有master可以服务实时写入请求,slave可以服务查询(非推荐的limited-master-master模式除外)
  4. 在网络或服务器故障或副本落后太多时,总是需要操作员干预。
  5. 单主是强一致的。
  6. 所有数据都存储为序列化的 JSON 文档,允许大量数据类型
  7. 每个文档限制为 4MB,更大的文档可以使用特殊的文档分块系统存储
  8. 最适合中小型数据和小型二进制对象
  9. 吞吐量限制由 MongoDB 和您的硬件决定
  10. 通过更大的服务器实现垂直可扩展性,通过当前正在开发的分片模块在您自己的服务器集群中实现未来水平可扩展性的潜力。
  11. 文档 ID 会自动编入索引。可以根据需要创建和删除索引。索引可以用于单个键或复合。
  12. 使用 JSON 样式查询语言执行查询。
于 2009-12-11T12:54:42.733 回答
4

SimpleDB被描述为

数据模型很简单:

  • 组织成域的大量项目集合。
  • 项目是包含键值对属性的小哈希表。
  • 可以使用各种字典查询来搜索属性。

MongoDB稍微简单一些

该数据库管理以称为 BSON 的二进制格式存储的类 JSON 文档的集合。

于 2009-12-10T22:52:04.280 回答
2

我对 mongodb 有相当的了解,并且刚刚开始使用 SimpleDB。所以首先它们都不是key-value storage。Mongodb 和 SimpleDB 是一个基于文档的 nosql 数据库,它们是无模式的。这意味着在将数据输入其中之前,您不需要为“表”创建模式(基本上这意味着您可以在那里存储您想要的所有内容)。

基本上,相似性到此结束。我将对 SimpleDB 使用 S,对 Mongo 使用 M。

  • M 是用 C++ 编写的,S 是用 Erlang 编写的(不是最快的语言)
  • M 是开源的,随处安装,S 是专有的,只能在亚马逊 AWS 上运行。您还应该为 S支付一大堆员工的费用
  • S 有一大堆奇怪的限制。M限制更合理。最奇怪的限制是:
    • 域(表)的最大大小为 10 GB
    • 属性值长度(字段大小)为 1024 字节
    • 选择响应中的最大项目数 - 2500
    • Select 的最大响应大小(S 可以返回给您的最大数据量) - 1Mb
  • S只支持几种语言(java、php、python、ruby、.net),M支持更多
  • 两者都支持 REST
  • S 的查询语法与 SQL 非常相似(但功能较弱)。使用 M,您需要学习一种类似于 json 的新语法(也可以直接学习基础知识)
  • 使用 M,您必须了解如何构建数据库。因为许多人认为无模式意味着您可以在数据库中放入任何垃圾并轻松提取这些垃圾,所以他们可能会惊讶于 Junk in, Junk out 格言有效。我假设在 S 中也是如此,但不能肯定地声称它。
  • 两者都不允许不区分大小写的搜索。在 M 中,您可以使用正则表达式以某种方式(丑陋/无索引)克服此限制,而无需引入额外的小写字段/应用程序逻辑。
  • 在 S 中排序只能在一个字段上进行
  • 因为 S 中的 5s 时间限制计数会表现得很奇怪。如果 5 秒过去了,查询还没有完成,你会得到一个部分数字和一个允许你继续查询的令牌。应用程序逻辑负责收集所有这些数据并进行汇总。
  • 一切都是 UTF-8 字符串,这使得在 S 中使用非字符串值(如数字、日期)变得很痛苦。M 类型支持更丰富
  • 两者都没有事务和连接
  • M 支持压缩,这对于 nosql 存储非常有用,其中相同的字段名被重新存储。
  • S 只支持单个索引,M有单个、复合、多键、地理空间等
  • 都支持复制和分片

您应该考虑的最重要的事情之一是 SimpleDB 具有非常基本的查询语言。甚至不支持基本的东西,如,group by以及数据操作,所以功能并不比 Redis/Memcached 丰富。另一方面,Mongo 支持丰富的查询语言。sum averagedistinct

于 2015-09-23T07:38:53.437 回答