2

基本的に、GAEがどのようにインデックスを実装したかを知りたいのですが、B +ツリーなどのインデックスに精通しており、たとえばfilter()メソッドが実装にB+ツリーを使用するかどうか疑問に思います。オープンソースであるため、SDKのappengineコードでこの実装を確認できますか?get()関数とget_by_id()関数はハッシュを使用して実装されていますかO(1) `ルックアップがO(log(n)であるB +ツリーを使用していると思われる可能性があるため、フィルター関数O(log(n))ですか)?

洞察をありがとう

4

1 に答える 1

5

長い答えは、数年前の私の話です。GoogleAppEngineデータストアの裏で。BigtableペーパーMegastoreペーパーにも興味があります。

簡単に言うと、クエリフィルタリングは、単一プロパティと複数プロパティ(別名複合)の両方のインデックスを介して実装されます。クエリプランナーは、1つ以上を選択してスキャンし、密にマージします。つまり、スキャンされたすべてまたはほとんどすべてのインデックス行が、クエリの有効な結果に対応します。私の話の詳細。

get()は、bigtableの単一行ルックアップとして実装されます。log(n)の部分は通常完全にメモリ内で発生するため、O(1)とO(log(n))の間のどこかにあり、一定の係数は小さくなります。詳細はbigtableペーパーに記載されています。

于 2012-05-16T19:44:15.527 に答える