(披露:我是 MongoHQ 的创始人,显然更希望你选择我们)
从开发人员的角度来看,最大的不同是查询能力。在 DynamoDB 上,您需要给定文档的确切密钥,或者您需要以可以将它们用于基于范围的查询的方式构建密钥。在 Mongo 中,可以查询文档的结构,添加二级索引,做聚合等。
仅使用 k/v 执行此操作的优势在于,它迫使您以 DynamoDB 可以扩展的方式构建应用程序。Mongo 对您的文档进行灵活查询的优势在于,您可以进行更快的开发,即使您不考虑 Play 框架包含的内容。使用 Mongo 之类的东西进行新开发总是会更快,因为您不必从一开始就做出扩展决策。
在实施方面,Mongo 和 DynamoDB 基本上都可以无限增长。Dynamo 抽象出大部分关于存储、RAM 和处理器能力的决策。Mongo 要求您(或像我们这样的人)决定拥有多少 RAM、使用哪种磁盘、如何管理瓶颈等。操作障碍不同,但最终结果非常相似。我们在非常快的 SSD 上运行多个 Mongo DB,它运行得非常好。
不幸的是,定价非常难以比较。DynamoDB 定价基于象征性的每 GB 费用,但您需要为数据访问付费。您需要确保了解随着数据库变得更加活跃,您的成本将如何增长。我不确定我能否有效地预测 DynamoDB 的定价,但我知道我们的客户对 Dynamo 最终为他们想做的事情付出的代价感到惊讶(至少可以说)。
运行 Mongo 在成本方面更具可预测性。每 10GB 数据您可能需要 1GB 的 RAM,运行冗余设置会使您的价格翻倍,等等。这是一个更容易理解的方程式,如果您有一个巨大的一天的流量。
到目前为止,Mongo(和 MongoHQ)的最大优势在于:您可以随时离开您的提供商。如果你对你的 Mongo 提供商感到厌烦,迁移出去只会有点痛苦。如果您对亚马逊感到厌烦,您将不得不重写您的应用程序以使用完全不同的引擎。这对您应该期望获得的支持有很大的影响,托管 Mongo 具有足够的竞争力,您可以从您选择的任何 Mongo 特定公司获得非常好的支持(否则我们会死)。
我在上面谈到了缩放,但最简单的答案是:如果你定义好你的数据模型,任何一个选项都将扩展到你可以想象的范围内。不过,一开始你可能不会用 Mongo 做这件事,因为你可能会很快发展。这意味着一旦您无法再垂直扩展(通过向单个服务器添加 RAM、磁盘速度等),您将不得不小心选择分片的方式。Mongo 和 Dynamo 扩展之间最大的区别是当你选择让你的“我如何扩展我的数据?” 决策,而不是整体扩展能力。
所以我会选择 Mongo(呃!)。不过,我认为您可以在 DynamoDB 之上构建一个出色的应用程序。