您将如何处理此数据处理任务?

时间:2008-10-20 17:20:49

标签: database data-processing

我有一个包含2.5亿个网站网址的文件,每个网址都有IP地址,网页标题,国家/地区名称,服务器横幅(例如“Apache”),响应时间(以毫秒为单位),图片数量等。目前,这些记录都是25GB的平面文件。

我有兴趣从此文件生成各种统计信息,例如:

  • 每个国家/地区代表的IP地址数
  • 每个国家/地区的平均响应时间
  • 图像数量与响应时间

等等。

我的问题是,你将如何实现这种类型和规模的处理,以及你使用的平台和工具(在合理的时间内)?

我对所有建议都持开放态度,从Windows上的MS SQL到Solaris上的Ruby,所有建议:-) DRY的奖励积分(不要重复自己),我不想每次都写一个新程序需要不同的切割。

任何关于什么有效以及应该避免什么的评论都将非常感激。

10 个答案:

答案 0 :(得分:7)

步骤1:将数据导入可处理数据量的DBMS。指数适当。

第2步:使用SQL查询来确定感兴趣的值。

您仍然需要为要回答的每个单独问题编写新查询。但是,我认为这是不可避免的。它可以帮你复制剩下的工作。

编辑:

请注意,尽管您可以简单地上传到单个表中,但如果在将数据加载到单个表后对数据进行规范化,则可能会从查询中获得更好的性能。这不是完全无关紧要的,但可能会减少数据量。确保您有一个良好的程序(可能是一个存储过程)来规范化数据将有所帮助。

答案 1 :(得分:4)

将数据加载到SQL Server(或任何其他主流数据库)数据库的表中,然后编写查询以生成所需的统计信息。您不需要除数据库本身以外的任何工具以及用于与数据交互的任何UI(例如,用于SQL Server的SQL Server Management Studio,用于Oracle的TOAD或SqlDeveloper等)。

答案 2 :(得分:3)

如果您碰巧使用Windows,请查看Log Parser。它可以作为独立下载找到,也包含在IIS Reource Kit

Log Parser可以读取您的日志并将其上传到数据库。


数据库注意事项:

对于您的数据库服务器,您需要快速的东西(Microsoft SQL Server,IBM的DB2,PostgreSQL或Oracle)。 mySQL也可能有用,但我没有使用大型数据库的经验。

您将需要所有可以承受的记忆。如果您将定期使用数据库,我至少会说4 GB。它可以用更少的时间来完成,但你会注意到性能上的巨大差异。

此外,如果您能负担得起,请使用多核/多CPU服务器,并且,如果您将定期使用此数据库,请使用它。

另一个建议是分析您将要进行的查询之王并相应地规划索引。请记住:您创建的每个索引都需要额外的存储空间。

当然,在主动数据加载操作之前,请关闭索引甚至销毁de索引。这将使负载更快。在数据加载操作后重新索引或重新创建索引。

现在,如果此数据库将是一个持续的操作(即不仅仅是调查/分析某些内容然后将其丢弃),您可能需要设计一个包含目录和详细信息表的数据库模式。这称为数据库规范化,您需要的规范化的确切数量取决于使用模式(数据加载操作与查询操作)。如果该数据库将持续使用并具有性能要求,则必须具备经验丰富的DBA。


<强> P.S。

我会冒风险在这里加入一些明显的东西但是......

我想你可能对Log Analyzer感兴趣。这些是从Web服务器日志文件生成统计信息的计算机程序(有些还可以分析ftp,sftp和邮件服务器日志文件)。

Web日志分析器生成包含统计信息的报告。通常,报告生成为HTML文件并包含图形。深度分析和选项有很多种。有些是非常可定制的,有些则不是。你会发现商业产品和开源。

对于您将要管理的数据量,请仔细检查每个候选产品,并仔细查看速度和处理能力。

答案 3 :(得分:1)

在导入数据时要记住的一件事是尝试创建索引,以便您可以执行您想要执行的各种查询。考虑一下您将查询哪些字段以及这些查询可能是什么样子。这应该可以帮助您确定所需的索引。

答案 4 :(得分:0)

25GB的平面文件。我不认为自己编写任何组件来阅读这个文件是个好主意。

我建议您应该进行SQL导入并将所有数据都带到SQL Server。我同意在SQL Server中获取这些数据需要很长时间,但是一旦它存在,你就可以用这些数据做任何你想要的事情。

我希望一旦你将这些数据放入数据库中,之后你将获得信息的增量而不是25 GB的平面文件。

答案 5 :(得分:0)

您尚未说明平面文件中的数据是如何组织的。 RDBMS建议是明智的,但假设您的平面文件以某种分隔方式格式化,并且db导入是一个相对简单的任务。如果情况并非如此,那么您首先要完成一项艰巨的任务,即将数据干净地反射到一组字段中,您可以在其中进行分析。

我将假设你的数据不是一个漂亮的CSV或TXT文件,因为你没有说过任何方式,没有其他人已经回答了这部分问题。

如果数据具有常规结构,即使没有漂亮的干净字段分隔符,您也可以将ETL工具转换为作业,例如Informatica。既然你是一个技术人员,这是一个一次性的工作,你一定要考虑编写自己的一些代码进行一些正则表达式比较,以提取你想要的部分,并吐出一个文件,然后你可以加载到数据库。无论哪种方式,您都必须在解析和清理数据方面投入大量精力,因此不要将此视为一项简单的任务。

如果您确实编写了自己的代码,那么我建议您选择一种编译语言,并确保一次处理一行数据(或以一种将读取缓冲为可管理块的方式)。

无论哪种方式,您都要做一个非常重要的工作,确保应用于数据的任何流程的结果始终如一,您不希望IP地址在计算中以十进制数字形式显示。对于那种规模的数据,可能很难检测到这样的错误。

一旦解析了它,我认为RDBMS是存储和分析数据的正确选择。

答案 6 :(得分:0)

这是一次性的事情,还是每天都在处理事情?无论哪种方式检查vmarquez的答案我听说过logparser的好东西。另请查看http://awstats.sourceforge.net/这是一个完整的网络统计应用程序。

答案 7 :(得分:0)

SQL Server Analysis Services旨在完成这种类型的数据分析。学习曲线有点陡峭,但是一旦设置了模式,您就可以非常快速地进行任何类型的横切查询。

答案 8 :(得分:0)

如果您可以使用多台计算机,这对MapReduce来说是一个完美的工作。

答案 9 :(得分:0)

对我而言,听起来像perl的工作。只需记住你想要的统计数据。使用正则表达式来解析该行。解析该大小文件可能不到10分钟。我的计算机使用perl在大约45秒内读取2 gig文件(1300万行)。