1

我需要对数据集进行一些连续聚合。我正在使用应用引擎高复制数据存储。

假设我们有一个简单的对象,该对象的属性包含创建日期的字符串。还有其他与该对象关联的字段,但在此示例中并不重要。

假设我创建并存储了一些对象。以下是与每个对象关联的日期。每个对象按以下顺序存储。这些对象将在单独的事务中创建。

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)如果所有实体都属于同一个实体组,是否所有实体都同时被索引?

感谢您的回复。

4

1 回答 1

1
  1. 所有实体都有每个属性的默认索引。如果您使用ORDER BY someProperty,那么您将获得按该属性的值排序的实体。您在索引构建方面是正确的:查询使用索引并且索引是异步构建的,这意味着查询可能在添加后不会立即找到实体。

  2. ORDER BY默认为ASC,即升序。

  3. 为您的实体添加created时间戳,然后按它排序并重复光标。请参阅游标和数据更新

  4. 索引是在put()操作返回后建立的。它们也是并行构建的。这意味着当您查询时,可能会构建一些索引,而有些则不会。请参阅数据存储写入的生命周期。请注意,如果您想在实体上强制“应用”,您可以发出get()after put(),这将强制应用更改(= 写入索引)。

  5. 6. 同一事务中涉及的所有实体必须在同一实体组中(=具有共同的父级)。事务隔离文档声明事务可以不应用,这意味着查询之后put()不会找到新实体。同样,您可以通过读取或祖先查询强制应用实体。

于 2012-12-18T13:39:13.423 回答