2011-11-23 76 views
3

真是一个非常简单的问题。查询在实例中是否一致?跨实例的高复制数据存储一致性

我明白,以下查询,我可能会错过一些新的put实体。

messages = Message.all().filter('user =', current_user).fetch(20) 

但是,它是安全的假设,一旦实体从该查询返回的,它总是会被它返回(忽略了一个事实,它可能不会在第20)

如果是这样,它延伸到同一实体的其他查询(使用不同的指数)

messages = Message.all().filter('user =', current_user) 
         .filter('posted >', old_date) .fetch(20) 

回答

3

你做手术什么情况下,从对结果毫无影响 - 所有实例查询相同一组数据存储服务器。

一旦新的实体(或对实体的修改)出现在查询结果中,就可以假定它将为将来的所有查询执行操作。这并不意味着该实体将出现不同的查询,但应包括它。

+0

我有一种感觉,可能是这种情况,但最好能确定;) – Amerdrix

+0

@Nick你们用什么来编写HRD?量子物理学 !? ;-)。任何人如何写一个可持续发展的模型,在任何时刻他都不能相信他所看到的数据是最符合数据的?我想它适用于大规模的搜索索引,但对于日常的数据应用程序,这是非常有问题的。 –

+0

这不是量子火箭手术,这是与大规模分布式系统有关的警告之一。一个事件(比如数据存储更新)不可能同时发生,因此会有比其他地方更晚通知的地方。该更新将最终**到达网络中的所有节点,并且这是建立在一致性模型上的假设。 – Xion