作为需求的一部分,我们需要处理近300万条记录,并将它们与一个存储桶相关联。这种关联是由一组规则(由5-15个属性组成,具有单个或范围的值和优先级)决定的,这些规则派生出记录的存储桶。对如此大的数字进行顺序处理显然超出了范围。有人可以指导我们有效地设计解决方案的方法吗?
发布于 2009-06-12 14:07:05
从数据量的角度来看,300万条记录并不是很多(显然取决于记录的大小),所以我建议尝试的最简单的事情是跨多个线程并行处理(使用java.util.concurrent.Executor框架)。只要您有多个可用的CPU核心,您就应该能够获得近乎线性的性能提升。
发布于 2009-06-12 14:12:30
这取决于数据源。如果它是一个单一的数据库,那么您将花费大部分时间来检索数据。如果它在本地文件中,那么您可以将数据划分为较小的文件,或者您可以填充具有相同大小的记录-这允许随机访问一批记录。
如果您使用的是多核计算机,则可以并行处理分区的数据。如果您确定了记录桶分配,则可以使用PreparedStatement的批处理功能将信息写回数据库。
如果您只有一台核心计算机,您仍然可以通过设计数据检索-数据处理-批量写回分离来利用I/O操作的暂停时间,从而实现一些性能改进。
发布于 2009-06-12 14:03:27
我不太确定你在找but here's a blog post about how the New York Times used Apache Hadoop Project to process a large volume of data做什么。
https://stackoverflow.com/questions/986784
复制相似问题