2024-05-15 09:21:17 发布
网友
给定一个时间(例如周二下午4:24),我希望能够从一组业务中选择当前开放的所有业务。在
什么是最有效的方法来存储这些开放/关闭时间,这样我就可以用一个时间/星期元组快速地找出哪些企业在营业?在
我使用mysql和solam。我希望能够在SOLR中进行查询。但坦率地说,我愿意接受任何建议和选择。在
另一个受访者提到的位图字段效率非常高,但如果您希望能够处理半小时或四分之一小时的时间,则会变得一团糟,因为每次遇到必须匹配的新分辨率时,都必须在算术上增加位数和字段的设计。在
相反,我会尝试将值作为日期时间存储在列表中:
openclosings = [ open1, close1, open2, close2, ... ]
然后,我将在Python内置的“bisect_right()”函数中使用Python的“bisect_right()”函数,在快速O(logn)时间内找到查询时间“适合”的位置。然后,查看返回的索引。如果它是一个偶数(0,2,4…),那么时间介于其中一个“关闭”时间和下一个“打开”时间之间,所以商店就关闭了。相反,如果等分指数是一个奇数(1,3,5…),那么时间就在开张和关门之间,商店就开门了。在
没有位图那么快,但是你不必担心分辨率,我想不出另一个O(logn)解决方案这么优雅。在
你说你在使用SOLR,不关心存储,希望查找速度快。然后,不是存储打开/关闭元组,而是在您需要的粒度级别(15分钟)为每个打开的时间块索引一个条目。对于编码本身,可以使用累积的小时:分钟。在
例如,星期一下午4点到5点营业的商店会为[40:00,40:15,40:30,40:45]添加索引值。周一下午4:24的查询将规范化为40:15,因此与存储文档匹配。在
乍一看,这可能看起来效率低下,但对于索引速度和空间来说,这是一个相对较小的常量惩罚。尽可能快地搜索。在
另一个受访者提到的位图字段效率非常高,但如果您希望能够处理半小时或四分之一小时的时间,则会变得一团糟,因为每次遇到必须匹配的新分辨率时,都必须在算术上增加位数和字段的设计。在
相反,我会尝试将值作为日期时间存储在列表中:
然后,我将在Python内置的“bisect_right()”函数中使用Python的“bisect_right()”函数,在快速O(logn)时间内找到查询时间“适合”的位置。然后,查看返回的索引。如果它是一个偶数(0,2,4…),那么时间介于其中一个“关闭”时间和下一个“打开”时间之间,所以商店就关闭了。相反,如果等分指数是一个奇数(1,3,5…),那么时间就在开张和关门之间,商店就开门了。在
没有位图那么快,但是你不必担心分辨率,我想不出另一个O(logn)解决方案这么优雅。在
你说你在使用SOLR,不关心存储,希望查找速度快。然后,不是存储打开/关闭元组,而是在您需要的粒度级别(15分钟)为每个打开的时间块索引一个条目。对于编码本身,可以使用累积的小时:分钟。在
例如,星期一下午4点到5点营业的商店会为[40:00,40:15,40:30,40:45]添加索引值。周一下午4:24的查询将规范化为40:15,因此与存储文档匹配。在
乍一看,这可能看起来效率低下,但对于索引速度和空间来说,这是一个相对较小的常量惩罚。尽可能快地搜索。在
相关问题 更多 >
编程相关推荐