Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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
Ruby on rails RubyonRails/Merb作为数十亿记录应用程序的前端_Ruby On Rails_Couchdb_Hadoop_Merb_Hbase - Fatal编程技术网

Ruby on rails RubyonRails/Merb作为数十亿记录应用程序的前端

Ruby on rails RubyonRails/Merb作为数十亿记录应用程序的前端,ruby-on-rails,couchdb,hadoop,merb,hbase,Ruby On Rails,Couchdb,Hadoop,Merb,Hbase,我正在为一个用RubyonRails或Merb编写的应用程序寻找一个后端解决方案,以处理具有数十亿条记录的数据。我有一种感觉,我应该使用分布式模型,而现在我看到的是 与 在我看来,HBase解决方案存在问题——ruby支持不是很强,Couchdb还没有达到1.0版本 你有什么建议你会使用如此大的数据量 数据需要相当快的导入,有时一次导入30-40Mb,但导入将分块进行。因此,大约95%的时间数据将是只读的。人们使用了许多不同的解决方案。根据我的经验,这实际上更多地取决于与该数据相关的使用模式,

我正在为一个用RubyonRails或Merb编写的应用程序寻找一个后端解决方案,以处理具有数十亿条记录的数据。我有一种感觉,我应该使用分布式模型,而现在我看到的是

在我看来,HBase解决方案存在问题——ruby支持不是很强,Couchdb还没有达到1.0版本

你有什么建议你会使用如此大的数据量


数据需要相当快的导入,有时一次导入30-40Mb,但导入将分块进行。因此,大约95%的时间数据将是只读的。

人们使用了许多不同的解决方案。根据我的经验,这实际上更多地取决于与该数据相关的使用模式,而不是每个表的行数

例如,“每秒发生多少次插入/更新。”这样的问题将影响您决定选择哪种后端数据库解决方案


以谷歌为例:实际上并不存在满足其需求的存储/搜索解决方案,因此他们基于Map/Reduce模型创建了自己的解决方案。

后端将取决于数据以及如何访问数据


但是对于ORM,我最有可能使用DataMapper并编写自定义DataObjects适配器来访问您选择的任何后端。

根据您的实际数据使用情况,MySQL或Postgres应该能够在正确的硬件上处理数十亿条记录。如果您的请求量特别大,那么这两个数据库都可以跨多个服务器进行复制(并且读复制非常容易设置(与多个主/写复制相比)

将RDBMS与Rails或Merb结合使用的最大优点是,您可以访问访问这些类型数据库的所有优秀工具支持


我的建议是在几个这样的系统中实际分析您的数据,并从中获取数据。

关于HBase和其他类似项目的警告(我对CouchDB一无所知——我认为它根本不是一个db,只是一个键值存储):

  • Hbase不是为速度而优化的,而是为可伸缩性而优化的。如果响应速度是一个问题,那么在您提交此路径之前,请运行一些概念验证
  • Hbase不支持联接。如果您使用的是ActiveRecord并且有多个关系,那么您可以看到这一点
  • 同样构建在Hadoop之上的Hive项目确实支持联接;Pig(但它不是真正的sql)也支持联接。第1点适用于两者。它们用于繁重的数据处理任务,而不是您可能使用Rails进行的处理类型

    如果您希望web应用程序具有可伸缩性,那么基本上唯一有效的策略就是对数据进行分区,并尽可能确保分区是隔离的(不需要相互交谈)。这对于Rails来说有点棘手,因为默认情况下它假设有一个中央数据库。自从我在一年半前研究这个问题以来,这方面可能已经有了改进。如果可以对数据进行分区,则可以进行相当大的水平扩展。一台MySQL计算机可以处理数百万行(PostgreSQL可能可以扩展到更多的行,但可能会慢一点)

    另一个有效的策略是建立一个主-从系统,所有的写操作都由主系统完成,读操作在从系统(可能还有主系统)之间共享。显然,这必须非常小心地完成!假设读/写比率很高,这可以很好地扩展


    如果您的公司财力雄厚,请查看Vertica、AsterData和Greenplum提供的服务。

    我不确定CouchDB不在1.0版本与此有什么关系。我建议您对其进行一些测试(只需生成10亿个随机文档)看看它能不能坚持。我想说会的,尽管没有具体的版本号

    CouchDB在对数据进行分区/分片等方面会给您带来很大帮助,似乎它可能适合您的项目——特别是如果您的数据格式将来可能会更改(添加或删除字段),因为CouchDB数据库没有模式

    CouchDB中也有很多针对阅读量大的应用程序的优化,根据我的经验,这是它真正的亮点所在