【发布时间】:2012-12-18 10:47:59
【问题描述】:
我需要对数据集进行一些连续聚合。我正在使用应用引擎高复制数据存储。
假设我们有一个简单的对象,该对象的属性包含创建日期的字符串。还有其他字段与对象相关联,但在本例中并不重要。
假设我创建并存储了一些对象。以下是与每个对象关联的日期。每个对象按以下顺序存储。这些对象将在单独的事务中创建。
Obj1: 2012-11-11
Obj2: 2012-11-11
Obj3: 2012-11-12
Obj4: 2012-11-13
Obj5: 2012-11-14
这个想法是使用游标不断检查新的索引对象。将对新的索引实体进行聚合。
以下是我的问题:
1) 对象是否按顺序索引?就像 Obj4 是否可以在 Obj 1,2 和 3 之前被索引?如果我使用 ORDER BY 查询和游标继续搜索,这将是一个问题。如果索引出现延迟,将无法找到某些实体。
2) 如果没有指定 ORDER BY,查询中返回的实体是什么顺序?
3) 我将如何检查新的索引实体?如,抓取所有实体,存储光标,然后检查自上次查询以来是否有任何新实体被索引?
不那么重要,但值得深思
4) 是否所有字段都编入索引?例如,如果我有一个 date 属性,假设是一个 name 属性,对于给定的对象,这两个属性是否会同时被索引?
5) 如果在同一个事务中写入多个实体,那么事务中的所有实体是否同时被索引?
6) 如果所有实体都属于同一个实体组,是否所有实体都同时被索引?
感谢您的回复。
【问题讨论】:
-
如果您添加新项目等,光标将变得无关紧要(过时)。所以我认为你不能像你所说的那样使用它。
-
在某些情况下,是的。但是,我不会在游标之前修改数据,因此游标应该仍然有效。让我的查询正确很重要,因此新索引将始终位于光标之后。如果有兴趣,请阅读“游标和数据更新”。 developers.google.com/appengine/docs/java/datastore/…
-
啊,刚刚在文档中发现了这一点,在游标上也发现了这一点新的 App Engine 版本可能会更改内部实现细节,从而使依赖于它们的游标失效。如果应用程序尝试使用不再有效的游标,Datastore 会引发 BadRequestError 异常
标签: google-app-engine cursor aggregation datastore