我正在研究存储和查询大量物品的历史事件发生记录的解决方案。
这是简化的情况:我每天获得200,000个街灯(标记为sl1至sl200000)的日志,显示该灯是否在当天正常运行。不重要的是灯的使用时间有多长,只要它在给定的日历日里开启即可。
还为每个灯存储了其他信息,Python类的开头看起来像这样:
我的py-foo不太好,我想避免使用过多的磁盘/内存空间。因此,一个包含(年份,月份,日期)元组字典的解决方案可能是一种选择,但我希望得到更有效的解决方案的指针。
记录可以存储为位流,每个位代表从1月1日开始的一年中的一天。因此,如果一个灯在2010年的前三天运行,那么记录可以如下表示:
跨年搜索需要合并,闰年是一个特殊情况,另外我需要编码/解码一些东西来完成这个自制的解决方案。看起来不太对。我遇到了有趣的帖子:speed-up-bitstring-bit-operations、how-do-i-find-missing-dates-in-a-list 和 finding-data-gaps-with-bit-masking。我还调查了python-bitstring并进行了一些搜索,但似乎没有真正适合的。
这是简化的情况:我每天获得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 和 finding-data-gaps-with-bit-masking。我还调查了python-bitstring并进行了一些搜索,但似乎没有真正适合的。
此外,我希望搜索“间隙”成为可能,例如“三天或更长时间停机”,而且将标记的日期转换为实际日历日期非常重要。
我会欣赏任何想法或指向可能解决方案的指针。进一步详细说明,后端DB使用的是ZODB和纯Python对象,可以被pickle。