如何分配数据和计算以最大化地方?

时间:2015-03-06 05:47:23

标签: hadoop parallel-processing distributed bigdata nosql

请耐心等待,这是我第一次尝试大数据时的基本架构问题。项目,但我相信你的答案将对那些刚开始从事这一领域的人产生一般兴趣。

我已经用谷歌搜索并阅读了Kafka,Storm,Memcached,MongoDB等的高级描述,但是现在我已经准备好开始设计我的应用程序,我仍然需要一些进一步了解数据应该如何分发和共享。

我的应用程序的性能至关重要,因此一个目标是以某种方式最大化执行分布式计算的机器的RAM中的数据的位置。我需要为这部分设计提供建议。

如果我的应用程序对于先验分片数据和分发计算(例如地理区域或公司分部)有一些明确的标准,那么解决方案将是显而易见的。但不幸的是,我的应用程序的数据访问模式是动态的,取决于之前计算的结果。

我的应用是一个具有不同阶段的分析程序。在第一阶段,访问所有数据一次,并为每个数据对象计算度量。在第二阶段,可以访问数据对象的子集,访问的概率与在前一阶段中计算的每个数据对象的度量成比例。在最后阶段,对于许多计算,将多次访问相对较小的数据对象子集。

在所有阶段,都需要将计算分布在多个服务器上。计算是非常平行的,每个分布式计算只需要访问一些数据对象。还需要在应用程序运行之前指定服务器数量(例如,在一台服务器上运行,或在50台服务器上运行)。

在我看来,我需要一些机制将适当的数据对象分发到适当的计算服务器,而不是盲目地从某些数据库服务(无论是集中式还是分布式)获取数据。此外,在我看来,某种智能缓存系统可能是合适的,因为数据访问模式取决于先前的计算而无法预先预测。但据我所知,Memcached不是一个系统,因为分片是先验确定的。

我已经多次读过操作系统缓存比我们可能尝试的任何编辑更好的表现。我认为理想的解决方案是每个计算服务器的RAM缓存以某种方式捕获数据对象'动态访问模式,但我不清楚如何使用NoSQL或Memcached服务。

感谢您对我的支持。我意识到这是一个基本问题,但到目前为止答案都没有。我无法通过NoSQL / Memcached软件包的先验分片来解析我的应用程序的动态访问模式。任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我建议你看一下http://tarantool.org。 Shard最大化最常见数据访问模式的位置,使用Lua进行本地计算,net.box在计算需要在另一个节点上继续时发出远程RPC。所有数据都存储在RAM中,如果您仔细编写计算代码,它可以利用Just In Time编译器。