根据营业时间有效地确定一家公司是否营业

2024-05-15 09:21:17 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个时间(例如周二下午4:24),我希望能够从一组业务中选择当前开放的所有业务。在

  • 我有一周中每一天每笔生意的营业和关门时间
  • 假设一家公司每小时只能营业00、15、30、45分钟
  • 我假设每周的日程都一样。在
  • 我最感兴趣的是能够快速查找一组在特定时间开放的业务,而不是数据的空间要求。在
  • 请注意,有些我一天晚上11点开门,第二天凌晨1点关门。在
  • 假期不重要-我会分开处理的

什么是最有效的方法来存储这些开放/关闭时间,这样我就可以用一个时间/星期元组快速地找出哪些企业在营业?在

我使用mysql和solam。我希望能够在SOLR中进行查询。但坦率地说,我愿意接受任何建议和选择。在


Tags: 数据方法时间mysql空间公司业务感兴趣
2条回答

另一个受访者提到的位图字段效率非常高,但如果您希望能够处理半小时或四分之一小时的时间,则会变得一团糟,因为每次遇到必须匹配的新分辨率时,都必须在算术上增加位数和字段的设计。在

相反,我会尝试将值作为日期时间存储在列表中:

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,因此与存储文档匹配。在

乍一看,这可能看起来效率低下,但对于索引速度和空间来说,这是一个相对较小的常量惩罚。尽可能快地搜索。在

相关问题 更多 >