【发布时间】:2014-12-10 06:10:30
【问题描述】:
我目前正面临一个令人头疼的问题,我正在处理一个大型数据集(当我说大型时,我指的是数十亿行数据)并且我在速度和可扩展性之间陷入了困境。
我可以在数据库中存储数十亿行数据,但是我的应用程序需要不断检查数据集中是否存在新的数据行,如果没有,则插入,否则,检索它。
如果我要使用数据库解决方案,我估计每次调用数据库以检索一行数据为 10 毫秒(乐观估计),我需要为我在应用程序中处理的每个文件检索大约 80 万条记录,这意味着每个要处理的文件 (10ms x 800k = 2.22 hours)。该时间跨度对于分析和处理 1 个文件来说太长了,考虑到当数据库增长到数十亿行时,从数据库中检索一行数据所需的时间将会增加。
我也想过在本地内存中存储 List 或 HashSet 以进行比较和检索,但它不会成功,因为我将无法在其中存储数十亿条记录(对象)记忆。
请就我的情况提出建议。
编辑:哦对了,我忘了说我已经实现了半缓存,一旦检索到一条记录,它就会缓存在内存中,所以如果需要再次检索相同的记录,它将是取而代之的是从内存中检索,但我面临同样的问题,我将到达内存不再容纳更多缓存数据的时间点。
【问题讨论】:
-
有什么方法可以合理地确定检索可能需要哪些行,例如最近的,即实现部分缓存功能?
-
哦对了,我忘了说我已经实现了半缓存,一旦检索到一条记录,它就会缓存在内存中,所以如果需要再次检索相同的记录,它将改为从内存中检索,但我面临同样的问题,我将到达内存不再适合任何缓存数据的时间点。
-
使用 HASH 比较您创建的每个文件,将文件与哈希码相关联,因此您需要比较 HASH 而不是 FILE?
-
数据集与文件的关系如何?不清楚。
-
@KCdod 说我遵循您的建议,并改用哈希,这又回到了我的问题,我应该将它存储在数据库中还是内存中?我想你误解了我的问题。