Perl 在EC2上扩展MongoDB,还是切换到DynamoDB?
我目前使用MongoDB在一台服务器上运行我的网站。在我的服务器上,我有两个组件(1)一个每小时运行并将数据附加到MongoDB实例的爬虫(2)一个从爬虫索引读取数据并写入用户个性化数据库的网站。我正在迁移到AmazonEC2进行自动伸缩,这样web服务器就可以自动伸缩,这样我就可以随着web流量的增加而增加服务器的数量。我不需要为我的爬虫自动缩放。这对我如何使用MongoDB提出了挑战。我想知道我最好的选择是什么来优化Perl 在EC2上扩展MongoDB,还是切换到DynamoDB?,perl,mongodb,amazon-simpledb,amazon-dynamodb,Perl,Mongodb,Amazon Simpledb,Amazon Dynamodb,我目前使用MongoDB在一台服务器上运行我的网站。在我的服务器上,我有两个组件(1)一个每小时运行并将数据附加到MongoDB实例的爬虫(2)一个从爬虫索引读取数据并写入用户个性化数据库的网站。我正在迁移到AmazonEC2进行自动伸缩,这样web服务器就可以自动伸缩,这样我就可以随着web流量的增加而增加服务器的数量。我不需要为我的爬虫自动缩放。这对我如何使用MongoDB提出了挑战。我想知道我最好的选择是什么来优化 对代码的最小更改(代码是perl格式的) 能够无缝地添加/删除web服务
- 对代码的最小更改(代码是perl格式的)
- 能够无缝地添加/删除web服务器,而无需担心数据库中的数据丢失
- 低成本
我对SimpleDB和/或DynamoDB了解不多。从文章来看,DynamoDB似乎是一个自然的选择,但我不确定是否有良好的perl支持,我是否可以拥有所有列、索引等。有人有经验或有什么建议吗?您可以在EC2上的单个服务器上托管Mongo,web服务器场中的每个框都连接到该服务器。然后,您可以轻松地启动另一个使用相同DB框的web实例 当我们运行一个副本集时,我们目前有三个Mongo服务器,当我们需要使用Mongo水平扩展时,我们将启动一些新实例并切分较大的集合 我目前使用MongoDB在一台服务器上运行我的网站 首先,这是一面很大的红旗。在生产环境中运行时,始终建议至少运行三个完整节点的副本集 复制提供了自动冗余和故障转移 能够无缝地添加/删除web服务器,而无需担心数据库中的数据丢失 MongoDB支持一个名为的概念。分片通过自动分割数据提供了一种水平缩放的方法。分区是通过一个 如果您计划使用分片,请仔细阅读该链接并认识到其局限性。对于MongoDB分片,您必须选择正确的键,以允许查询在分片中均匀分布 当前的MongoDB爬网索引有大约100k个条目,这些条目被键入到大约15个不同的列上 这将是切分的一个问题。分片只能缩放使用分片键的查询。对碎片密钥的查询可以直接路由到一台机器。对辅助索引的查询将转到所有计算机
您有15个不同的索引,因此基本上所有这些查询都将转到所有碎片。这根本不能很好地“自动伸缩”。请注意,目前EC2没有64位小实例,这使得复制成本可能很高。因为MongoDB内存映射文件,所以不建议使用32位操作系统。我对SimpleDB有过非常糟糕的体验,认为它存在根本性的缺陷,所以我会避免使用它 关于如何在Amazon EC2上设置MongoDB,Three是一份很好的白皮书: 我怀疑在EC2上设置MongoDB是最快的解决方案,而不是重写或迁移到DynamoDB
祝你好运 谢谢你,乔!这是很有见地的。因此,澄清一下,您的Mongo数据是分布在3台机器上,还是在3台机器上复制?将web服务器的扩展与Mongo扩展分离是一个非常好的主意。当您扩展mongo服务器时是否有停机时间?当您需要更大的容量时,您是否有关于扩展Mongo的好方法的指针/链接?我们使用3台单独的机器,带有一个副本集、一个主副本和两个副本。这主要用于自动故障转移,因此如果主副本死亡,其中一个副本将升级为主副本。每个副本数据中的数据都是相同的。在缩放数据时,可以使用所谓的分片。这是您将一个或多个集合中的数据分布到多个Mongo实例的地方。这允许您水平缩放。您的数据分布在多台物理机器上,代理根据碎片密钥告诉Mongo去哪里。我们为此设置了基础设施,以确保一切正常,但目前没有足够的数据来保证使用它,一旦我们这样做了,我们将启动这些实例。谢谢Joe!你有什么样的实例大小,以及这个3台机器安装每月的总成本是多少?我们实际上刚刚将机器升级到XL实例,我们预计在上线时会有相当大的负载,所以我怀疑你是否需要相同的负载。上周亚马逊终于宣布所有实例大小都采用64位,并推出了一个新的中等大小