在EC2上扩展MongoDB还是应该切换到DynamoDB?

时间:2012-02-19 22:57:46

标签: perl mongodb amazon-simpledb amazon-dynamodb

我目前在使用MongoDB的单个服务器上运行我的网站。在我的服务器上,我有两个组件(1)一个每小时运行一次的爬虫,并将数据附加到我的MongoDB实例(2)一个从爬虫索引中读取并写入用户个性化数据库的网站。我正在转向Amazon EC2进行自动扩展,因此Web服务器可以自动扩展,因此随着Web流量的增加,我可以增加服务器数量。我不需要为我的抓取工具自动缩放。这对我如何使用MongoDB提出了挑战。我想知道我最好的选择是优化

  • 我的代码的最小更改(代码在perl中)
  • 能够无缝添加/删除Web服务器,而无需担心数据库丢失数据
  • 低成本

在短期内,DB肯定能够适应所有机器的内存,因为它将低于2 GB。用户个性化DB无法重建,因此更重要的是,可以轻松地重建索引。当前的MongoDB爬网索引有大约10万个条目,这些条目在~15个不同的列上键入。这是为了速度而建立的,因为我正在开发一个在线约会网站(可以通过多种方式进行搜索)。

我可以想到几个选项

  1. 将SimpleDB用于用户个性化存储,将MongoDB用于索引。让索引在所有机器上复制,但是,我不太了解MongoDB复制。
  2. 将所有内容移至SimpleDB
  3. 将所有内容移至DynamoDB
  4. 我对SimpleDB和/或DynamoDB知之甚少。根据文章看起来DynamoDB似乎是一个很自然的选择,但我不确定是否有良好的perl支持,我是否可以拥有所有列,索引等。任何人都有经验或有任何建议吗?

4 个答案:

答案 0 :(得分:3)

您可以在EC2上的单个服务器上托管Mongo,Web服务器中的每个框都连接到该服务器。然后,您可以轻松启动另一个使用相同数据库框的Web实例。

当我们运行副本集时,我们目前有三台Mongo服务器,当我们到达需要使用Mongo水平扩展的点时,我们将启动一些新实例并对更大的集合进行分片。

答案 1 :(得分:3)

  

我目前在使用MongoDB的单个服务器上运行我的网站。

首先,这是一个大红旗。在生产中运行时,始终建议运行至少包含三个完整节点的副本集。

复制提供自动冗余和故障转移。

  

能够无缝添加/删除Web服务器,而无需担心数据库丢失数据

MongoDB支持名为sharding的概念。分片提供了一种通过自动分割数据来水平缩放的方法。分区是通过shard key完成的。

如果您打算使用分片,请仔细阅读 very 链接并识别其限制。对于MongoDB分片,您必须选择正确的密钥,以便在分片中均匀分布查询。

  

当前的MongoDB爬网索引有大约10万个条目,这些条目在~15个不同的列上键入。

这将是分片的问题。分片只能缩放使用分片键的查询。对分片键的查询可以直接路由到单个机器。对二级索引的查询将发送到所有计算机。

您有15个不同的索引,因此基本上所有这些查询都将转到所有分片。这根本不会“自动扩展”。

答案 2 :(得分:1)

请注意,目前EC2没有64位小实例,使复制成本可能很高。由于MongoDB内存映射文件,因此不建议使用32位操作系统。

答案 3 :(得分:1)

我在SimpleDB上遇到过非常糟糕的经历,认为它存在根本性的缺陷,所以我会避免使用它。

三是关于如何在Amazon EC2上设置MongoDB的好白皮书:http://d36cz9buwru1tt.cloudfront.net/AWS_NoSQL_MongoDB.pdf

我怀疑在EC2上设置MongoDB是最快的解决方案,而不是重写/迁移到DynamoDB。

祝你好运!