我使用python,ndb和数据存储区。我的模型(" Event")有一个属性:
created = ndb.DateTimeProperty(auto_now_add = True)。
事件会不时被保存,有时会在一秒钟内保存。
我希望"轮询新事件",而不是两次获得相同的事件,如果没有任何新事件,则获得空结果。但是,再次轮询可能会给我带来新的事件。
我看过Cursors,但是我不知道在第一次查询到达结束后是否可以某种方式使用它们来轮询新事件? " next_cursor"当我到达数据的(当前)末尾时为无。
保持最后收到"创建" DateTime-property并用于获取下一批次的工作,但是这只是使用秒的分辨率,因此排序可能会搞砸..
我必须在Event中创建自己的事务性递增计数器吗?
答案 0 :(得分:7)
是的,使用游标是一个有效的选项。即使这个link来自Java文档,它也适用于python。第二段是你要找的东西:
游标的一个有趣应用是监视实体的看不见的变化。如果应用程序在每次实体更改时使用当前日期和时间设置时间戳属性,则应用程序可以使用按时间戳属性(按升序排序)的查询,并使用数据存储区光标检查实体何时移动到结果列表的末尾。如果更新了实体的时间戳,则使用游标的查询将返回更新的实体。如果自上次执行查询后没有更新实体,则不返回任何结果,并且光标不会移动。
答案 1 :(得分:0)
编辑: Prospective search has been shut down on December 1, 2015
不是轮询替代方法,而是使用预期搜索
https://cloud.google.com/appengine/docs/python/prospectivesearch/
来自文档
"预期搜索是一种允许您的申请的查询服务 使搜索查询与实时数据流匹配。每一个 提交的文件,预期搜索返回每个的ID 与文档匹配的已注册查询。"