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

时间:2015-10-23 13:00:17

标签: azure elasticsearch amazon-simpledb azure-cosmosdb

而言
  1. 可扩展性,
  2. 表现,
  3. 维护,
  4. 易用性/学习曲线
  5. 费用,
  6. 为了显着,但不介意一般的答案,因为我很欣赏我可能会要求太多:)

    由于

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

1 个答案:

答案 0 :(得分: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域在概念上更接近于表。选择&#34;集合&#34; DocumentDB团队很不幸,因为它们更像是分区而不应该被认为是表格。困难的部分是习惯于将所有不同的数据类型存储在同一个集合中。一旦你克服了这一点,我发现DocumentDB的方法令人耳目一新,非常灵活。我可以有效地建模继承和类型混合。集合nay分区有一个目的 - 可伸缩性。域可用于可伸缩性和数据类型分离,这在实践中实际上更难。

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

  6. 其他想法:

    • 您写道,&#34;我需要存储的所有文档属性都被编入索引&#34;。 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的维护工作要高得多。