我正在研究存储和查询大量项目的事件发生历史记录的解决方案。
这是简化的场景:我每天收到 200 000 盏路灯(标记为 sl1 到 sl200000)的日志,它显示了该灯是否在当天运行。灯使用多长时间无关紧要,只要它是在给定的日历日。
还为每个灯存储了其他信息位,Python 类的开头如下所示:
class Streetlamp(object):
"""Class for streetlamp record"""
def __init__(self, **args):
self.location = args['location']
self.power = args['power']
self.inservice = ???
我的 py-foo 不太好,我想避免在磁盘/内存存储上过于贪婪的解决方案。因此,具有(年、月、日)元组的解决方案可能是一种解决方案,但我希望获得更有效解决方案的指针。
记录可以存储为比特流,每个比特代表从 1 月 1 日开始的一年中的一天。因此,如果灯在 2010 年的前三天运行,那么记录可以是:
sl1000_up = dict('2010': '11100000000000...', '2011':'11111100100...')
跨年份搜索需要合并,闰年是一个特例,另外我需要使用这个本土解决方案进行编码/解码。好像不太安静吧。speed-up-bitstring-bit-operations,how-do-i-find-missing-dates-in-a-list和find -data-gaps-with-bit-masking我遇到的有趣帖子。我还调查了python-bitstring并进行了一些谷歌搜索,但似乎没有什么真正适合。
此外,我希望搜索“间隙”成为可能,例如“停工三天或更长时间”,并且必须将标记的日期转换为真实的日历日期。
我将不胜感激可能的解决方案的想法或指示。要添加更多细节,可能会感兴趣的是使用的后端数据库是 ZODB,并且首选可以腌制的纯 Python 对象。