Python 不平等过滤日期和数字
我试图查询我的Google应用程序引擎数据存储[Python],它有一个项目名称、生产日期和发货项目数量。数据存储中约有100万条记录,而且还在不断增加 情景: 获取所有在某个日期[用户输入]后装运超过x个项目[用户输入]并制造的项目[用户输入]名称。 基本上是一种库存检查 有效地证明了2个关于性质的不等式。 但由于在GAE,我无法做到这一点 搜索此问题。但是,到现在为止运气都不好。你遇到过这个问题吗?如果是,您是否能够解决此问题?请让我知道 同样在Google I/O 2010中,Alfred Fuller提到他们将很快取消这一限制。已经过去8个多月了,但这一限制现在仍然存在。不幸的是 如果有人能够绕过这一限制,请给出答案,我将不胜感激Python 不平等过滤日期和数字,python,google-app-engine,date,inventory,Python,Google App Engine,Date,Inventory,我试图查询我的Google应用程序引擎数据存储[Python],它有一个项目名称、生产日期和发货项目数量。数据存储中约有100万条记录,而且还在不断增加 情景: 获取所有在某个日期[用户输入]后装运超过x个项目[用户输入]并制造的项目[用户输入]名称。 基本上是一种库存检查 有效地证明了2个关于性质的不等式。 但由于在GAE,我无法做到这一点 搜索此问题。但是,到现在为止运气都不好。你遇到过这个问题吗?如果是,您是否能够解决此问题?请让我知道 同样在Google I/O 2010中,Alfred
非常感谢。不幸的是,您无法绕过此限制,但我可以帮助您以稍微不同的方式对数据建模 首先,Bigtable适合于快速读取大型数据库——当有一百万人同时点击你的应用程序时,你会这样做。这里你要做的是一份关于历史数据的报告。虽然我建议将报告转移到RDBMS,但有一种方法可以在Bigtable上实现 首先,在项目模型上重写put()方法,以便在保存日期之前拆分日期。你要做的是
def put(self):
self.manufacture_day = self.manufacture_date.day
self.manufacture_month = self.manufacture_date.month
self.manufacture_year = self.manufacture_date.year
super(self.__class__, self).put()
您可以对任何粒度级别执行此操作,即使是小时、分钟、秒等等
您只需加载和保存项目实体,即可将其追溯应用于数据库。这方面的工作非常方便
然后将查询更改为仅在项目计数上使用不相等,并选择希望使用普通相等的天数/月/年。您可以通过触发多个查询或使用IN子句来执行范围。(不管怎么说,它也做同样的事情)
这似乎是人为的,很难做到,但请记住,如果你这样做,你的报告几乎会在瞬间运行,即使数百万人试图同时运行它们。你可能不需要这种秤,但是。。。这就是你得到的:D基于Sudhir的答案,我可能会根据你关心的粒度将每个记录分配给一个制造日期“bucket”。如果您的生产日期范围超过几年,请使用每月桶。如果你的活动范围仅在去年,每周一次 现在,当您想要查找给定范围内销售和生产日期>n的记录时,请在该范围内每个bucket执行一次查询,并对您不感兴趣的项目进行后期筛选 例如(完全未经测试): 然后,您应该能够像这样使用:
widgets.filter("sold >", 7).filter_date_after(datetime.datetime(2010,11,21))
留给读者作为练习:
- 使其与添加到末尾的其他过滤器配合使用
- 多个存储桶大小允许您始终查询ln(日期范围内的天数)存储桶
widgets.filter("sold >", 7).filter_date_after(datetime.datetime(2010,11,21))