Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 要读取的5GB文件_Algorithm - Fatal编程技术网

Algorithm 要读取的5GB文件

Algorithm 要读取的5GB文件,algorithm,Algorithm,我有一个设计问题。我有一个3-4 GB的数据文件,按时间戳排序。我正在试图找出处理此文件的最佳方法 我想把整个文件读入内存,然后把数据传输到不同的机器上,然后在这些机器上运行我的分析 在运行分析之前将其上传到数据库是否明智 我计划在不同的机器上运行分析,所以通过数据库进行分析会更容易,但如果我增加在数据库上运行分析的机器数量,可能会变得太慢 有什么想法吗 @更新: 我想逐一处理这些记录。基本上,我试着在时间戳数据上运行一个模型,但我有各种各样的模型,所以我想分发它,这样整个过程每天都会在夜间运行

我有一个设计问题。我有一个3-4 GB的数据文件,按时间戳排序。我正在试图找出处理此文件的最佳方法

我想把整个文件读入内存,然后把数据传输到不同的机器上,然后在这些机器上运行我的分析

在运行分析之前将其上传到数据库是否明智

我计划在不同的机器上运行分析,所以通过数据库进行分析会更容易,但如果我增加在数据库上运行分析的机器数量,可能会变得太慢

有什么想法吗

@更新:


我想逐一处理这些记录。基本上,我试着在时间戳数据上运行一个模型,但我有各种各样的模型,所以我想分发它,这样整个过程每天都会在夜间运行。我想确保我可以轻松地增加型号数量,而不会降低系统性能。这就是为什么我计划将数据分发到所有运行该模型的机器上(每台机器将运行一个模型)。

在运行分析之前将其上传到数据库中是否明智

我计划在不同的机器上运行分析,所以通过数据库进行分析会更容易,但如果我增加在数据库上运行分析的机器数量,可能会变得太慢

别担心,会好的。只需引入一个标记,即可识别每台计算机处理的行

我不确定我是否完全理解您的所有需求,但是如果您需要持久化数据(不止一次地引用它),那么db就是最好的选择。如果您只需要处理这些输出文件的一部分并信任结果,则可以在不存储任何内容的情况下动态执行


只存储您需要的数据,而不是文件中的所有内容。

您甚至可以访问硬盘中的文件,一次读取一小块。Java有一种称为“随机访问文件”的东西,用于相同的语言,但在其他语言中也有相同的概念


您是否希望加载到数据库中并进行分析应该完全由需求决定。如果您可以读取该文件并继续处理它,则无需将其存储在数据库中。但是对于分析来说,如果您需要来自所有不同于数据库的文件区域的数据,这将是一个好主意。

您不需要将整个文件存储到内存中,只需要用于分析的数据。您可以读取每一行,并仅存储行中所需的部分,以及行在文件中开始的索引,因此,如果您需要此行中的更多数据,您可以稍后找到它。

根据需要的分析,这听起来像是将MapReduce与Hadoop结合使用的教科书案例。它将支持您将来添加更多机器的要求。看看Hadoop wiki:


从概述开始,让独立设置在一台机器上运行,并尝试对文件进行简单分析(例如,从“grep”或其他内容开始)。有一些组装需要,但一旦你有东西配置,我认为它可能是你的正确路径

我最近遇到了一个类似的问题,正如@lalit提到的,我对硬盘中的文件使用了RandomAccess文件读取器

在我的例子中,我只需要读取文件,所以我启动了一组线程,每个线程从文件的不同点开始,这让我完成了任务,这真的提高了我的吞吐量,因为每个线程在执行某些处理时都会花费大量的时间,而其他线程可能会读取文件

像我提到的那样的程序应该很容易编写,只要试一下,看看性能是否符合您的需要。

@update:


我想逐一处理这些记录。基本上,我试着在时间戳数据上运行一个模型,但我有各种各样的模型,所以我想分发它,这样整个过程每天都会在夜间运行。我想确保我可以轻松地增加型号数量,而不会降低系统性能。这就是为什么我计划将数据分发到所有运行该模型的机器上(每台机器将运行一个模型)。

听起来OP关注的是性能。到目前为止,数据库路由将是最慢的实现。听起来我们在谈论要插入的行数不胜数。抱歉,我没有添加我想每天运行的内容。上传到数据库是否明智?@user465353告诉我们更多关于您需要如何分析数据的信息,如果您需要将数据集视为一个整体,或者您是否可以逐个处理行/记录,这会产生很大的影响。我想逐个处理记录。基本上,我试着在时间戳数据上运行一个模型,但我有各种各样的模型,所以我想分发它,这样整个过程每天都会在夜间运行。我想确保我可以轻松地增加型号数量,而不会降低系统性能。这就是为什么我计划将数据分发到所有运行该模型的机器(每台机器将运行一个模型)?我想补充一点,这将是一项日常任务。@user465353,您需要执行的分析的性质是什么?您需要对整个记录集进行比较吗?或者,分析纯粹是逐行进行的?它是按行运行的。它基本上是一个我想在时间戳数据上测试的模型。型号的数量可能会增加,这就是为什么我想在每台机器上运行两个型号。@消音器考虑任何#hft?