AWS SimpleDb与Azure DocumentDb有何不同?两者如何与ElasticSearch不同

Yan*_*nis 1 azure amazon-simpledb elasticsearch azure-cosmosdb

就......而言

  1. 可扩展性,
  2. 性能,
  3. 保养,
  4. 易用性/学习曲线
  5. 成本,

按照重要的顺序,但不介意一般的答案,因为我很欣赏我可能要求太多:)

谢谢

编辑:我正在寻找一个将作为单一权威数据存储的数据库,我需要存储的文件的所有属性,以便出于各种商业原因进行索引.因此我知道其他解决方案不会做我想要的.

Lar*_*one 5

TL;博士; 如果您正在使用JavaScript并构建浏览器应用程序,那么node.js和DocumentDB就是天堂般的匹配.如果您使用的是.NET和/或其他Azure服务,那么Doc​​umentDB会受到青睐.如果您正在使用其他AWS服务,那么SimpleDB可能会更好.

我知道像这样的问题并不适合Stack Overflow,但我经常看到像这样的答案的价值,而我在SO上最受欢迎的答案基本上是由证据支持的知情意见.我没有使用过SimpleDB,但在决定使用DocumentDB之前我已经查过了它.我很快就拒绝了它......尽管在决定使用DocumentDB之前我确实认真对待AWS Lambda.所以:

  1. 可扩展性.DocumentDB具有非常直接和显式的缩放模型 - 如果您需要每秒更多空间或更多操作,则添加更多集合.SimpleDB的缩放模型类似,除了不那么简单,因为您添加了重载的域,以提供类型分离(思考表)和可伸缩性.您可以根据需要扩展.

  2. 表现.由于我从未在其上构建任何内容,因此我无法对SimpleDB的性能发表任何看法.但是,我对DocumentDB的性能印象非常深刻.对于简单的基于id的读取,延迟小于10ms,并且我获得了令人印象深刻的延迟和查询吞吐量.我们当前应用程序的DocumentDB实现在功能等效的MongoDB/node.js实现的1/4时间内返回复杂的n维聚合(使用documentdb-lumenize在DocumentDB上的存储过程中完成).您必须在您的实际应用程序上进行自己的性能测试,以获得明确的答案.

  3. 维修.两者都比传统数据存储更容易实现.没有那么多旋钮来维持它们中的任何一个.SimpleDB默认地理分布您的数据.您必须在DocumentDB中手动执行等效操作.可能,但更难.DocumentDB具有良好的导入/导出工具,其备份解决方案即将进行大幅升级.

  4. 易用性/学习曲线.如果您是JavaScript程序员,那么Doc​​umentDB有很多值得推荐的程序员.DocumentDB本身使用JSON.SimpleDB使用XML.DocumentDB具有以JavaScript编写的支持ACID的存储过程.你需要将SimpleDB与其他东西结合起来(Lambda可能,但XML/JavaScript不匹配会使这不太理想)来获得等价物.两者都允许使用SQL,但DocumentDB也允许使用JavaScript本机查询.

    为了在DocumentDB上取得成功,你必须克服一个巨大的心态障碍.尽管它们都通过添加更多域/集合来扩展,但SimpleDB域在概念上更接近于表.DocumentDB团队选择"集合"这个词是不幸的,因为它们更像是分区,不应该被认为是表格.困难的部分是习惯于将所有不同的数据类型存储在同一个集合中.一旦你克服了这一点,我发现DocumentDB的方法令人耳目一新,非常灵活.我可以有效地建模继承和类型混合.集合nay分区有一个目的 - 可伸缩性.域用于可伸缩性和数据类型分离,这在实践中实际上更难.

  5. 成本.这里不多说.两者都允许您逐步扩大成本.对于非常小的实现,DocumentDB可能更昂贵,因为最小的使用单位是单个集合,最低为25美元/月.您必须进行自己的建模/假设分析,以确定哪种方法对您来说更便宜.请注意,Azure一般都是积极的,甚至在某些情况下推动AWS降价.我的直觉是,对于大多数应用来说,它们的成本大致相等.

其他想法:

  • 你写道,"我需要存储的文件的所有属性都被编入索引".DocumentDB的一个非常好的功能是您可以指定索引的大小默认情况下,每个字段都被索引为每个字节的3字节哈希索引,这是非常节省空间的.我不知道SimpleDB是否具有等效功能.

  • 这有点像比较苹果和橙子.我认为DocumentDB在其数据模型中与MongoDB或CouchDB类似,在其使用执行模型中考虑VoltDB(尽管VoltBD sprocs是用Java编写的).SimpleDB感觉更像是一个简单的XML对象存储.如果你已经有了一个大的XML思维模式,那么它可能会更容易,但我认为今天有更多的人使用JSON而不是XML.

  • 在JavaScript中编写支持ACID的存储过程是一项只有DocumentDB具有的杀手级功能.有人说存储过程的日子结束了; 您应该将所有这些逻辑放在应用程序服务器层中.如果您实现了一个简单的CRUD API,那么几乎每个应用程序都需要某种类型的事务,其中一次更改多行.如果没有数据存储中的事务支持,这很难正确地完成.即使您使用NoSQL数据库实现了等效的事务,实现的开销也会消除您通过选择NoSQL而不是SQL获得的任何开发/性能/可伸缩性优势.

  • DocumentDB的用户定义函数和触发器(也用JavaScript编写)可能很有用,虽然我认为此时触发器实现已经瘫痪,但我还没有找到UDF的用途.

  • DocumentDB具有内置附件支持.您需要手动与S3集成以获得AWS上的等效项.

  • DocumentDB具有地理索引和运算符.

  • SimpleDB的每个文档限制1K是一个严重的限制.这告诉我它主要用于日志记录或作为S3的索引而不是完整的文档存储.DocumentDB的限制是512K.

如果与SimpleDB的比较就像是苹果到橙子,那么与ElasticSearch的比较就像苹果到消防引擎.我对ElasticSearch的印象是它全是关于全文搜索和分析.我认为作为主要交易商店的空间/执行/ api效率并不高.它建立在Lucene之上,其设计不具备可靠性/耐用性,是您的主要商店.此外,即使托管,它也更像是IaaS产品,而DocumentDB和SimpleDB是真正的PaaS产品.ElasticSearch的维护工作要高得多.