草庐IT

java - 选择数据库服务 - mongohq vs dynamodb

coder 2023-05-04 原文

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

我们在 Play 中使用 Java! 2.

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

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

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

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

现在我们预计数据库使用量不会太多,但如果我们的应用增长,我们需要快速扩展。

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

  • 定价
  • 缩放
  • 易于使用
  • 玩!支持吗?

最佳答案

(披露:我是 MongoHQ 的创始人,显然希望你选择我们)

从开发人员的角度来看,最大的区别在于查询功能。在 DynamoDB 上,您需要给定文档的确切 key ,或者您需要以可以将它们用于基于范围的查询的方式构建 key 。在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 之上构建出色的应用程序。

关于java - 选择数据库服务 - mongohq vs dynamodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11741977/

有关java - 选择数据库服务 - mongohq vs dynamodb的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  5. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  6. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  7. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  8. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  9. ruby-on-rails - 在 Rails 中调试生产服务器 - 2

    您如何在Rails中的实时服务器上进行有效调试,无论是在测试版/生产服务器上?我试过直接在服务器上修改文件,然后重启应用,但是修改好像没有生效,或者需要很长时间(缓存?)我也试过在本地做“脚本/服务器生产”,但是那很慢另一种选择是编码和部署,但效率很低。有人对他们如何有效地做到这一点有任何见解吗? 最佳答案 我会回答你的问题,即使我不同意这种热修补服务器代码的方式:)首先,你真的确定你已经重启了服务器吗?您可以通过跟踪日志文件来检查它。您更改的代码显示的View可能会被缓存。缓存页面位于tmp/cache文件夹下。您可以尝试手动删除

  10. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

随机推荐