100表的表与单表,大表

时间:2011-03-15 21:14:32

标签: database multithreading innodb analysis

我正在尝试解决我们从表中分析大量数据的问题。我们需要提取这些数据的某些子集并进行分析。因此,我认为最好是多线程并最初引入尽可能多的数据并对每个区域执行各种计算。让我们假设要分析的每个数据子集都表示为S1,S2,......所以每个都会有一个线程。在执行计算之后,也可以创建一些可视化,并且结果将需要存储回数据库,因为分析结果中可能存在数千兆字节的数据。假设结果由R1,R2,......

表示

虽然这有点模糊,但我想知道是否应该为每个R1,R2等创建一个表,还是将所有结果存储在一个表中?很可能我们希望多个线程同时存储结果(调用S1,S2的线程),所以如果有一个表,我需要确保多个线程可以同时访问它。如果它有帮助,当再次需要R1,R2等的数据时,如果每个R1,R2等都有一个表,那么所有数据都将被拉出并按照一定的顺序进行维护。我想我们可以为每个表都有一个对象来管理对特定结果表的请求,如果我们走这条路线的话。从本质上讲,我希望该对象就像一个bean,只在必要时加载来自该数据库的数据(太多而无法立即保存在内存中)。另一点是我们使用InnoDB作为我们的存储引擎,以防多个线程是否可以访问特定的表格。

那么,有了这些信息,最好是为结果创建一组表,还是为每个结果区域创建一个表(可能是100s)?

由于

2 个答案:

答案 0 :(得分:1)

你可以,但是你必须管理100个表。获得整套的统计数据会更加困难。

如果可以轻松地将数据分区到不相交的不同子集,则数据库不应该锁定行,特别是如果您只是在应用程序中进行读取和处理。在这种情况下,您不需要将表分区为数百个表,并且应用程序中的每个线程都可以独立使用。

答案 1 :(得分:0)

这听起来像是一个很好的地图减少候选人。这假设你要在整个集合上执行相同的计算,只是想加快这个过程。

您是否考虑过使用像MongoDB这样的东西?你可以编写自己的地图减少其中的聚合。

地图缩小:http://en.wikipedia.org/wiki/MapReduce

mongo:http://www.mongodb.org/display/DOCS/MapReduce

Mongo确实支持更新,它是一个无锁的最终一致的商店。