8

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

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

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

我能想到几个选项

  1. 使用 SimpleDB 作为用户个性化存储,使用 MongoDB 作为索引。让索引在所有机器上复制,但是,我对 MongoDB 复制不太了解。
  2. 将所有内容移至 SimpleDB
  3. 将所有内容移至 DynamoDB

我不太了解 SimpleDB 和/或 DynamoDB。根据文章,DynamoDB 似乎是一个自然的选择,但我不确定是否有良好的 perl 支持,我是否可以拥有所有列、索引等。有人​​有经验或有什么建议吗?

4

4 回答 4

3

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

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

于 2012-02-19T23:30:35.890 回答
3

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

首先,这是一个很大的危险信号。在生产环境中运行时,始终建议运行具有至少三个完整节点的副本集。

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

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

MongoDB 支持一个叫做sharding的概念。分片提供了一种通过自动分区数据来水平扩展的方法。分区是通过shard key完成的。

如果您打算使用分片,请仔细阅读该链接了解其限制。对于 MongoDB 分片,您必须选择正确的键,以允许查询在分片中均匀分布。

当前的 MongoDB 爬网索引有大约 100k 个条目,这些条目以大约 15 个不同的列为键。

这将是分片的问题。分片只能扩展使用分片键的查询。对分片键的查询可以直接路由到单台机器。对二级索引的查询会发送到所有机器。

你有 15 个不同的索引,所以基本上所有这些查询都会转到所有分片。这根本不会“自动缩放”。

于 2012-02-20T19:06:39.703 回答
1

我对 SimpleDB 的体验非常糟糕,并且认为它存在根本缺陷,所以我会避免使用它。

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

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

祝你好运!

于 2012-02-29T03:54:52.700 回答
1

请注意,目前 EC2 没有 64 位小实例,这使得复制可能很昂贵。因为 MongoDB 内存映射文件,所以不建议使用 32 位操作系统。

于 2012-02-21T16:41:42.717 回答