mysql 中百万行的报告生成

del*_*ell 5 mysql

我们正在创建一个站点,我们从服务器读取 txt 文件(使用 PHP-mysql)并将其保存到 mysql 数据库(使用文件查询中的加载)。它是一个临时数据库,然后这个数据被移动到另一个数据库,并带有一些附加信息,如 ID、代码等。然后临时数据库被清空,并将与另一个 txt 文件一起转储。

带有附加信息的数据库正在以更快的速度增长。

文本文件不断出现,数据库每天增长 200 万条记录。大约平均有大约 15-20 个文件,并且在任何时间间隔。它没有任何特定时间文件不会出现。

我们正在按查询进行一些分组,并将(带有附加信息的数据库)中的数据从 700 万条记录缩小到大约 47k,并将其保存在另一个数据库中以生成报告。此数据(47K)用于 4 天(报告数据库)并用于报告目的。所以在月底,带有 ids 的主数据库,代码可能会增长到 7000 万条记录。

我们必须每天、每周和每月从表中同时生成报告。

由于数据库以更快的速度增长,如何处理 1 个月后的报告,例如,如果他们想要从 1 月到 4 月的报告,例如..

我们应该如何处理这种情况,因为读/写是在以巨大速度增长的同一个表上完成的。

DRa*_*app 1

不真正知道数据发生了什么,但对我来说,从 txt 文件读取到数据库没有多大意义...对其进行修改并添加其他链接代码,然后将其重新转储到 txt 文件只是为了让它远离数据库。我会把它留在数据库中。

添加记录的速度(也是磁盘容量)是多少?

正在生成什么类型​​的报告...统计?一般聚合?

如果只是一般聚合,我会在数据库中保留一个单独的表,其中包含任何汇总的数字类别、分类等。然后可以从中运行报告,而不是重新导入您转储的所有文本文件。拥有像每小时(甚至每天)这样的“摘要”表可以轻松简化报告流程。

如果没有看到一些数据样本和预期的报告输出,就很难巩固任何单一方法。

---- 按评论反馈

过去处理过呼叫数据记录 (CDR) 信息,其中也存在很多垃圾信息。我认为关键的总体记录相当有限。此外,知道电话公司每天只有几百万个电话,并且必须跟踪它们可能会使您的数据库磁盘容量超载,因此一些归档过程是有意义的,但一般汇总就不那么重要了。即使您跟踪每个始发号码以及呼叫目的地号码的次数...或者来自不同始发号码的常见目的地号码的数量也可以汇总并限制您的总体报告统计数据。

--- 例如:如果政府不跟踪人们的通话(不……他们这样做???),他们可能想知道有多少不同的人正在给 X 打电话,以及有多少人 X 也在打电话。问题在于通信的两个方向。一旦识别出模式并发出警报,他们可以将记录集中并保留在单独的跟踪表中,该跟踪表在创建输出文本文件后不会转储......不,我不为政府或任何此类机构工作谁可能会这样做。

-- 保留什么 我只能就您想要保留什么类型的信息提供建议...您关心 PBX 系统、源自的中继线、分机吗?我首先会保留您想要的关键元素,然后从每个记录保留基础中剥离可能无用的信息。

Origination Calling Number/Extension
Destination Number
International Country being called
Call Time Start
Call Duration
Run Code Online (Sandbox Code Playgroud)

我使用 PBX 系统和呼叫数据记录已经有 10 多年了,但我知道这些应该是数据的共同核心。根据 CDR 布局的不同,您可能必须标准化所呼叫的号码。如果一个系统存储为一个完整的电话号码,而另一个系统单独保存国际呼叫前缀,则您将找不到拨号匹配项

555-1234 与 +014 555-1234

我知道假电话号码不合法,但我相信您明白我的想法。