我目前面临着一个令人头疼的问题,我正在处理一个大型数据集(当我说大的时候,我的意思是数十亿行数据)而且我遇到了速度和可扩展性。
我可以在数据库中存储数十亿行数据,但我的应用程序需要不断检查数据集中是否存在新的数据行,如果没有,请插入,否则,检索它。
如果我要使用数据库解决方案,我估计每次调用数据库以检索一行数据为10ms(乐观估计),我需要检索我在我的应用程序中处理的每个文件的大约800k记录,这意味着要处理的每个文件(10ms x 800k = 2.22 hours)
。考虑到当数据库增长到数十亿和数十亿行时,从数据库中检索一行数据所需的时间将会增加,这个时间跨度太长,无法分析和处理1个文件。
我还想过在本地内存中存储一个List
或HashSet
来进行比较和检索,但由于我无法存储数十亿条记录,因此无法解决问题(记忆中的对象。
请就我的情况应该做些什么。
编辑:哦,是的,我忘了声明我已经实现了半缓存,一旦检索到一条记录,它就会缓存在内存中,所以如果需要再次检索相同的记录,它将是从内存中检索,但我面临同样的问题,我将达到内存不再适合任何更多缓存数据的时间点。
答案 0 :(得分:2)
理想情况下,如果您正在播放大量数据,那么您必须确保在处理数据时不会耗尽资源。但是,您只需要找到一种合理的方法来提高资源的利用率。
我肯定会使用数据库,因为这是以最佳方式查询和存储数据的最着名方法。你没有提到你的应用程序究竟是做什么的,所以我可以就你在这种情况下如何做而给出一般意见;