快速的数据/时间覆盖率检查算法

时间:2018-07-19 16:33:56

标签: database algorithm code-coverage

我正在处理一个包含约5000万行的数据库,每个行都包含一个时间戳和一个值。时间戳记的时间范围大约为3年,但有时介于两者之间缺少时间范围,从缺少数据的10分钟到几周不等。我想找到这些差距,看看数据在记录期间的覆盖情况如何,现在正在寻找一种合适的算法来实现这一目标。

我一直在尝试从最早的记录开始,然后转到下一个更早的记录,依此类推,直到达到最新记录为止。如果两个相邻记录之间的间隔大于某个阈值时间,则将其计为间隔。但是,这需要算法检查每条记录,这会花费很多时间。

这就是为什么我想问一下是否有更有效的方法(可能是启发式的方法)?数据在MySQL中,以防万一。

谢谢!

1 个答案:

答案 0 :(得分:0)

查看5000万行需要多长时间?几分钟?如果您花时间尝试优化此过程,那会以为您将很少运行,那是在浪费时间。您拥有一个简单且可靠的算法。您为什么要浪费时间尝试改善它?

但是假设您要改进它,因为出于某些奇怪的原因,您已经多次运行此程序。您知道瓶颈在哪里吗?除非您的比较功能完全白痴,否则瓶颈最有可能是在数据库访问中。除非您运行查询以按排序顺序获取数据并将其输出到文本文件,否则您将无能为力。然后,您可以翻阅文本文件。如果您要进行多次,那么与每次查询数据库以获得排序结果相比,从排序后的文本文件中读取数据要快得多。

但是您无法可靠地避免需要查看每个过渡以确定是否存在差距。当然,您可以使用二进制搜索算法来查找确实存在缺口的范围,但是该算法不能始终标识没有缺口的范围。您可能能够提出一种算法,该算法平均可以降低搜索间隙的复杂性,但是该算法将很复杂。如此复杂,以至于您可能无法证明其正确性。

使用简单且可证明正确的算法来解决问题。如果您需要加快处理速度,请将数据转换为更快读取的中间格式。