【发布时间】:2012-03-20 23:22:00
【问题描述】:
我想根据时间戳字段对数据进行采样。我正在阅读巨大的数据文件,每个文件每天都有近百万条记录。我每个月都有几个这样的文件。
现在我想读取这些数据,但仅将 5% 或 10% 存储到 mysql 数据库中。我不知道每个数据文件中的记录数量。
有什么方法可以只对文件的总读取数据进行 5% 的采样?这类问题有什么标准的统计方法吗?
根据以下 cmets 进行编辑:
在这个采样想法之前,我已经在两个字段上创建了一个基于键的分区和索引:id 和 date。 id 字段更像是一个 clientId。即使使用分区,在 1500 万行上按 2 个字段分组也会花费很长时间,在 30 到 60 分钟的范围内。我还按字段在其中一个分组上创建了附加索引。
我的解释是这样的:
SIMPLE 访问 ref 3ColumnerIndex,2ColumnIndex 2ColumnIndex 302 const 7493642 using where;使用文件排序
在为 innodb 提供 4 GB 的缓冲区大小后获得了这种性能!
【问题讨论】:
-
在文件中,每条记录是单独一行还是以某种方式包含?
-
是的,每条记录都是一行。我在我的 java 代码中读取该文件并进行清理、解析等。这不是问题,我可以读取所有文件,甚至可以将其全部写入数据库,但是将所有数据写入一个月让我关闭到 15-20 百万条记录。
-
那么,读完文件,你知道你读了多少条记录吗?
-
这不是统计问题吗? :) 您可能需要评估您的数据以了解应该如何收集样本,您的样本可能与总数据不符
-
不,我一次读一行。读完一行后,我需要根据我的样本大小做出决定将其写入数据库
标签: java mysql statistics sampling