gpt4 book ai didi

google-app-engine - 如何对重叠的时间范围进行最佳查询 Google App Engine 数据存储

转载 作者:行者123 更新时间:2023-12-04 05:49:51 24 4
gpt4 key购买 nike

我有一些 预订开始和结束 (为了使示例更清楚,删除了对资源的引用):

class Reservation(db.Model):
fromHour = db.DateTimeProperty()
toHour = db.DateTimeProperty()
fromToRange = db.ComputedProperty(lambda x: [x.fromHour, x.toHour])

并想 添加另一个预订 检查是否不是 重叠 上一个 - 如何在 Google App Engine 中表达此类查询。

第一 我用 试试这个查询列表属性 但是 双不等式过滤器 不工作。它应该做两个匹配 from1 < to2 和 from1 >= from2 和一个结果 - 如果有更多数据可能会很昂贵。
fromHour = datetime.datetime(2012, 04, 18, 0, 0, 0)
toHour = datetime.datetime(2012, 04, 18, 2, 0, 0)

reservation = Reservation(fromHour = fromHour, toHour = toHour, colors = ['white', 'black'])
reservation.put()

self.response.out.write('<p>Both %s</p>' % fromHour)
self.response.out.write('<ol>')
for reservation in Reservation.all()\
.filter('fromToRange >', fromHour)\
.filter('fromToRange <=', fromHour):
self.response.out.write('<li>%s</li>' % (reservation.fromToRange))
self.response.out.write('</ol>')

我找到了 另一个解决方案 我可以使用包含天数的其他属性(这将是每个预订范围内的天数列表),而不是需要检查天数以缩小数据扫描范围,如果不与新预订重叠,则检查每条记录。

请帮助并提供一些如何进行最佳查询以检测重叠预订的答案 - 也许有针对 Google App Engine 中时间范围查询的快速第三解决方案,或者不受支持。

最佳答案

是的,对查询的多重不等式过滤器限制使某些事情很难/不太理想。例如地理搜索。

我会采用您提出的解决方案:量化属性值并将所有量化值保存在列表属性中,例如将持续时间包含的所有天数保存到列表属性中。棘手的部分是选择正确的量化级别:天、小时等。

就个人而言,我会从通用时间刻度开始:Unix 时间(纪元),然后将其四舍五入到秒,然后对其进行十进制量化。例如,从中切出三个零(1000 秒量化器,跨度 ~ 16 分钟)并将所有量化值从开始时间到结束时间保存在列表中。

如果量化器太细,则使用更大的量化器:10000 秒。

然后,您可以使用相等过滤器简单地查询列表属性,并额外过滤内存中的结果以考虑确切的持续时间开始和结束时间。

关于google-app-engine - 如何对重叠的时间范围进行最佳查询 Google App Engine 数据存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10207555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com