我有一个设计问题。我有一个3-4 GB的数据文件,按时间戳排序。我正在尝试找出处理这个文件的最好方法。
我正在考虑将整个文件读取到内存中,然后将这些数据传输到不同的机器上,然后在这些机器上运行我的分析。
在运行我的分析之前将其上传到数据库中是否明智?
我计划在不同的机器上运行我的分析,所以通过数据库进行分析会更容易,但如果我增加在数据库上运行分析的机器数量,可能会变得太慢。
有什么想法吗?
@update:
我想一个接一个地处理这些记录。基本上是尝试在时间戳数据上运行一个模型,但我有各种模型,所以我想分发它,这样整个过程就可以每天晚上运行。我想确保我可以轻松地增加模型的数量,而不会降低系统性能。这就是为什么我计划将数据分发到运行该模型的所有机器(每台机器将运行一个模型)。
发布于 2010-10-06 00:26:42
您甚至可以访问硬盘本身中的文件,并一次读取一小块。Java有一种叫做随机存取文件的东西,用于同样的东西,但同样的概念在其他语言中也是可用的。
您是否想要加载到数据库中并进行分析,应该完全由需求决定。如果您可以读取该文件并继续处理它,则不需要将其存储在数据库中。但是对于分析来说,如果您需要来自文件而不是数据库的所有不同区域的数据,那么这将是一个好主意。
发布于 2010-10-06 00:21:08
在运行我的分析之前将其上传到数据库中是否明智?
是
我计划在不同的机器上运行我的分析,所以通过数据库进行分析会更容易,但如果我增加在数据库上运行分析的机器数量,可能会变得太慢。
别担心,一切都会好起来的。只需引入一个标记,就可以识别每台计算机处理的行。
我不确定我是否完全理解您的所有需求,但如果您需要持久化数据(多次引用它),那么db就是最佳选择。如果您只需要处理这些输出文件的一部分并信任结果,那么您可以在不存储任何内容的情况下即时完成。
只存储您需要的数据,而不是文件中的所有内容。
发布于 2010-10-06 00:32:34
您不需要将整个文件放入内存,只需要分析所需的数据即可。您可以读取每一行并仅存储该行的所需部分以及文件中该行开始处的索引,以便以后需要此行中的更多数据时可以找到它。
https://stackoverflow.com/questions/3865621
复制相似问题