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

Nik*_*ntz 2 python google-app-engine python-2.7 google-cloud-datastore

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

感谢您的任何见解

rya*_*yan 5

答案很长,是几年前我的演讲:在Google App Engine数据存储区的封面下.你也会对Bigtable论文Megastore论文感兴趣.

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

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