Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 在EC2上扩展MongoDB,还是切换到DynamoDB?_Perl_Mongodb_Amazon Simpledb_Amazon Dynamodb - Fatal编程技术网

Perl 在EC2上扩展MongoDB,还是切换到DynamoDB?

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服务

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

  • 对代码的最小更改(代码是perl格式的)
  • 能够无缝地添加/删除web服务器,而无需担心数据库中的数据丢失
  • 低成本
在短期内,DB肯定能够在所有machies上安装内存,因为它将低于2GB。用户个性化数据库无法重建,因此更重要的是拥有它,而索引可以很容易地重建。当前的MongoDB爬网索引有大约100k个条目,这些条目被键入到大约15个不同的列上。这是为了速度而建立的,因为我正在一个在线交友网站上工作(该网站可以通过多种方式进行搜索)

我可以想出几个选择

  • 用户个性化存储使用SimpleDB,索引使用MongoDB。让索引在所有机器上复制,但是,我对MongoDB复制了解不多
  • 将所有内容移动到SimpleDB
  • 把所有东西移到DynamoDB

  • 我对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位,并推出了一个新的中等大小