【发布时间】:2015-06-01 14:39:42
【问题描述】:
我们有大量数据无法放入内存。因此,我们将它们分布在磁盘上的许多文件中,然后通过向前移动指针来打开一个文件并顺序读取记录。一旦指针到达 EOF,我们就打开下一个文件。
我们现在在加载数据后进行过滤。如果我们可以像在数据库中一样运行查询来进行过滤,那就太好了。我们想从数据库而不是文件中读取所有数据,但是我们不能一次将所有数据放入内存中,我们该怎么做呢?我们可以使用块来获取数据,但这可能需要更多的网络时间。有没有更快的方法来解决这个问题?使用 Redis 或 MemSQL 等替代数据存储有帮助吗?
【问题讨论】:
-
数据库就是为此而设计的。那里有数 TB 的数据库,由内存仅在千兆字节范围内的服务器处理...加载数据,运行查询,让数据库担心内存的使用。
-
@MarcB 你应该把这个评论变成一个答案。
-
我们担心如果我们获取的数据比 RAM 的多,那么我们可能会出现内存不足。
-
您不必在将所有内容保存到数据库之前将其加载到内存中。您可以告诉数据库一点一点地从文件中读取数据。根据您可能需要准备的结构,但这绝对是可能的。
-
没关系。假设数据已加载到数据库中。我的问题是,当我们获取记录并且碰巧获取的数据比我的 RAM 多时,会发生什么?理想情况下,我们需要在从数据库中获取数据时使用这些数据,这样我们的内存使用量就不会增加。
标签: mysql database datastore flat-file