7

目前我正在收集我们应该使用什么数据库服务的信息。我对 Web 开发还很陌生,但我们认为我们想要一个 noSQL 数据库。

我们在 Play 中使用 Java!2.

我们只需要一个用于用户注册的数据库。

现在我已经熟悉了 GAE ndb,它是一个键值存储,例如 dynamoDB。MongoDB 是一个文档数据库。我不确定每种解决方案有什么优势。

我也知道 dynamoDB 在 SSD 上运行,而 mongoDB 在内存中。

mongoDB 的一个优势是 Java Play!已经“支持” mongodb。

现在我们不希望有太多的数据库使用,但如果我们的应用程序增长,我们需要非常快速地扩展。

我有什么选择?他们有什么优点/缺点?考虑:

  • 价钱
  • 缩放
  • 使用方便
  • 玩!支持?
4

2 回答 2

12

(披露:我是 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 之上构建一个出色的应用程序。

于 2012-07-31T15:05:26.427 回答
1

正如您所说,mongoDB 在其他选项中领先一步,因为您可以使用 morphia 插件来简化 DB 交互(您也有 JPA 支持)。Play 框架还提供了 CRUD 模块(管理控制台)和安全模块(用于您的整个登录系统),所以我强烈建议您看看它们。

于 2012-07-31T14:50:12.717 回答