1

私がモデルを持っていると仮定して

class MyModelList(db.Model):
  listed_props = db.StringListProperty(indexed=True)

そして、私はそれを照会します

SELECT * from MyModelList where listed_props = 'a' and listed_props = 'b'

私がモデルを持っているかのように、それはほぼ同じくらいのパフォーマンス(レイテンシに関して)ですか?

class MyModelProps(db.Model):
  property_1 = db.StringProperty(indexed=True)
  property_2 = db.StringProperty(indexed=True)

私は次のようにクエリします:

SELECT * from MyModelProps where property_1 = 'a' and property_2 = 'b'

との複合インデックス

indexes:
- kind: MyModelProps
   properties:
   - name: property_1
   - name: property_2

MyModelList を使用した最初の例のクエリは、2 番目の例 (1 つのバイナリを想定している) と比較して、データストアが listed_props インデックスをそれ自体とマージする必要があるため (開始点を見つけてからインデックスをマージするために 2 つのバイナリ検索を想定しています)、答えるのが難しいようです。検索して開始点を見つけてから読んでください)。

MyModelList.listed_props のインデックスを複数の Bigtable タブレットで分割する必要がある場合、これは特に複雑になります。

この 2 つでほぼ同じパフォーマンス (レイテンシに関して) を期待できますか?

PS: 私が尋ねている理由は、多くの複合インデックスを取り除くことができるため、既存のエンティティを更新する方がはるかに安価であるため、MyModelList.listed_props を使用したいからです。

4

1 に答える 1

0

パフォーマンスに関しては、次のような複合インデックスなしでクエリを実行することは非常に悪い考えです

SELECT * from MyModelList where listed_props = 'a' and listed_props = 'b'

実行すると、はるかにパフォーマンスが向上します

SELECT * from MyModelProps where property_1 = 'a' and property_2 = 'b'

必要がない場合でも、複合インデックスを使用します。

私は両方のソリューションを実装し、270 万件のレコードを持つライブ システムで実行しました。複合インデックスを使用したものは、約 100 倍高速でした。

それをすべて説明する素晴らしい記事があります:

http://www.allbuttonspressed.com/blog/django/2010/01/An-App-Engine-limitation-you-didn-t-know-about

于 2012-08-29T06:33:08.227 に答える