快速 data/time 覆盖检查的算法
Algorithm for fast data/time coverage check
我正在处理一个包含约 5000 万行的数据库,每行都有一个时间戳和一个值。时间戳源于大约 3 年的范围,但有时会在两者之间缺少时间范围,从缺少 10 分钟的数据到几周不等。我想找到这些差距,看看数据覆盖记录期的情况如何,现在正在寻找合适的算法来做到这一点。
我一直在尝试的是从最早的记录开始,然后转到下一个更早的记录,依此类推,直到到达最近的记录。如果两个相邻记录之间的间隙高于某个阈值时间,则将其计为间隙。然而,这需要算法检查每条记录,这需要很多时间。
这就是为什么我想问一下是否有更有效的方法,可能是启发式方法来做到这一点?数据在 MySQL 中,以防相关。
谢谢!
查看 5000 万行需要多长时间?几分钟?如果您花时间尝试优化此过程,那么您会认为您很少 运行,那您就是在浪费时间。您有一个简单且可靠的算法。为什么要浪费时间改进它?
但是假设您想改进它,因为出于某种奇怪的原因您 运行多次使用这个东西。你知道你的瓶颈在哪里吗?除非你的比较功能完全白痴,否则瓶颈很可能出现在数据库访问中。您对此无能为力,除非您 运行 您的查询按排序顺序获取数据并输出到文本文件。然后你可以翻阅文本文件。如果你多次这样做,从排序的文本文件中读取比每次都查询数据库的排序结果要快得多。
但是您无法可靠地避免查看每个转换以确定是否存在间隙的需要。当然,您可以使用二进制搜索算法来查找肯定存在间隙的范围,但该算法不能始终识别没有间隙的范围。您 可能 能够想出一种算法,平均而言,它可以降低搜索间隙的复杂性,但该算法会很复杂。太复杂了,你可能无法证明它的正确性。
坚持使用简单、可证明正确的算法。如果您需要加快速度,请将数据转换为读取速度更快的中间形式。
我正在处理一个包含约 5000 万行的数据库,每行都有一个时间戳和一个值。时间戳源于大约 3 年的范围,但有时会在两者之间缺少时间范围,从缺少 10 分钟的数据到几周不等。我想找到这些差距,看看数据覆盖记录期的情况如何,现在正在寻找合适的算法来做到这一点。
我一直在尝试的是从最早的记录开始,然后转到下一个更早的记录,依此类推,直到到达最近的记录。如果两个相邻记录之间的间隙高于某个阈值时间,则将其计为间隙。然而,这需要算法检查每条记录,这需要很多时间。
这就是为什么我想问一下是否有更有效的方法,可能是启发式方法来做到这一点?数据在 MySQL 中,以防相关。
谢谢!
查看 5000 万行需要多长时间?几分钟?如果您花时间尝试优化此过程,那么您会认为您很少 运行,那您就是在浪费时间。您有一个简单且可靠的算法。为什么要浪费时间改进它?
但是假设您想改进它,因为出于某种奇怪的原因您 运行多次使用这个东西。你知道你的瓶颈在哪里吗?除非你的比较功能完全白痴,否则瓶颈很可能出现在数据库访问中。您对此无能为力,除非您 运行 您的查询按排序顺序获取数据并输出到文本文件。然后你可以翻阅文本文件。如果你多次这样做,从排序的文本文件中读取比每次都查询数据库的排序结果要快得多。
但是您无法可靠地避免查看每个转换以确定是否存在间隙的需要。当然,您可以使用二进制搜索算法来查找肯定存在间隙的范围,但该算法不能始终识别没有间隙的范围。您 可能 能够想出一种算法,平均而言,它可以降低搜索间隙的复杂性,但该算法会很复杂。太复杂了,你可能无法证明它的正确性。
坚持使用简单、可证明正确的算法。如果您需要加快速度,请将数据转换为读取速度更快的中间形式。