如何在GAE查询中实现filter()和get()?

时间:2012-05-16 07:37:09

标签: python python-2.7 google-app-engine google-cloud-datastore

我基本上想知道GAE如何实现其索引,我熟悉B +树等索引并且想知道是否例如filter()方法使用B +树来实现它?我可以在SDK的appengine代码中看到这个实现,因为它是开源的吗?是否使用散列实现了get()和get_by_id()函数使其成为O(1)`是过滤函数O(log(n)),因为人们可能认为它使用的是B +树,其中查找为O(log(n)) )?

感谢您的任何见解

1 个答案:

答案 0 :(得分:5)

很久以来,我的回答是:Under the Covers of the Google App Engine Datastore。您还会对Bigtable paperMegastore paper感兴趣。

简短的回答是,查询过滤是通过单属性和多属性(也称为复合)索引实现的。查询计划程序选择一个或多个以密集扫描和合并,即所有或几乎所有扫描的索引行对应于查询的有效结果。我的演讲中的细节。

get()实现为bigtable单行查找。它介于O(1)和O(log(n))之间,具有小的常数因子,因为log(n)部分通常完全在内存中发生。重要论文中的详细信息。