【发布时间】:2011-07-16 03:30:44
【问题描述】:
我正在尝试解决一个问题,即我们正在分析表中的大量数据。我们需要提取这些数据的某些子集并进行分析。照原样,我相信最好是多线程化它并在最初引入尽可能多的数据并在每个区域上执行各种计算。假设要分析的每个数据子集都表示为 S1、S2、……所以每个数据子集都有一个线程。执行计算后,可能还会创建一些可视化,并且需要将结果存储回数据库,因为分析结果中可能存在数 GB 的数据。假设结果用 R1, R2, …
表示虽然这有点模糊,但我想知道我们是否应该为每个 R1、R2 等创建一个表,还是将所有结果存储在一个表中?很可能我们希望多个线程同时存储结果(调用 S1、S2 的线程),所以如果只有一个表,我需要确保多个线程可以同时访问它。如果它有帮助,当再次需要 R1、R2 等的数据时,所有这些都将被提取出来,并且如果每个 R1、R2 等都有一个表,则这些数据将按照易于维护的特定顺序进行。另外,我在想如果我们走那条路线,我们可以为每个表管理对特定结果表的请求的单个对象。本质上,我希望该对象像一个 bean,只在必要时从该数据库加载数据(太多以至于无法一次保存在内存中)。另一点是我们使用 InnoDB 作为我们的存储引擎,以防多个线程是否可以访问特定表有任何不同。
那么,有了这些信息,最好为结果创建一组表,还是为每个结果区域(可能是 100 个)创建一个表?
谢谢
【问题讨论】:
-
您放入 s1、s2 等的数据是否相同?我宁愿在一个可以通过 where 子句查询的表上工作,而不是必须即时确定需要查看哪个表。尝试至少在一个表中以第一范式获取它,这样生活会更轻松。
-
另一点是我们使用 InnoDB 作为我们的存储引擎,以防多个线程是否可以访问特定表有任何区别。 确实如此,InnoDB 具有行锁定,因此有效地允许并发访问。 (MyISAM 使用基于表的锁定)
标签: database multithreading innodb analysis