Mai*_*ein 7 java database mongodb playframework-2.0 amazon-dynamodb
目前我正在收集我们应该使用的数据库服务的信息.我仍然是Web开发的新手,但我们认为我们想拥有一个noSQL数据库.
我们正在使用Java与Play!2.
我们只需要一个用户注册数据库.
现在我已经熟悉了GAE ndb,它是一个关键值存储,例如dynamoDB.MongoDB是一个文档db.我不确定每个解决方案有什么优势.
我也知道dynamoDB在SSD上运行,而mongoDB也在内存中.
mongoDB的一个优点就是Java Play!已经"支持"mongodb.
现在我们不期望太多的数据库使用,但如果我们的应用程序增长,我们需要快速扩展.
我有什么替代品?他们有什么利弊?考虑到:
MrK*_*urt 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内存,运行冗余设置会使你的价格翻倍,等等.如果你有一个巨大的数据,这是一个更容易理解的方程式,如果你有一个巨大的震撼一天的交通量.
到目前为止,Mongo(和MongoHQ)的最大优势是:您可以随时离开您的提供商.如果你对你的Mongo提供商感到厌烦,那么迁移只会有点痛苦.如果你对亚马逊感到厌烦,你将不得不重写你的应用程序以使用完全不同的引擎.这对你应该获得的支持有很大的影响,托管Mongo足够有竞争力,你可以从你选择的任何Mongo特定公司获得非常好的支持(或者我们会死).
我解决上面的缩放一点点,但最简单的答案是这样的:如果你定义数据模型好,要么选择将扩展出来只是尽可能你能想象你需要去.不过,你最初可能不会对Mongo这样做,因为你可能会很快发展.这意味着一旦您无法再垂直扩展(通过向单个服务器添加RAM,磁盘速度等),您将不得不小心选择如何进行分片.Mongo和Dynamo扩展之间的最大区别在于您选择制作"我如何扩展数据?" 决定,而不是整体扩展能力.
所以我选择了Mongo(呃!).不过,我认为你可以在DynamoDB上构建一个出色的应用程序.