0

アプリ エンジンで高度に接続された階層データをモデル化しようとしています。

次に例を示します。

Person:
    Phone Numbers:
        Number: 555-555-5555, Ext: 123, Notes: Work
        Number: 444-444-4444, Ext: 456, Notes: Mobile

1 つのエンティティには、JSON BLOB として保存されたデータ構造が含まれていました。

これを行う 1 つの方法は、phone_numbersコレクションを JSON テキストのインデックス付けされていない blob として保存し、検索プロパティを追加して、電話番号で人を照会できるようにすることです。

p_entity = Person()

p_entity.phone_numbers = dbText(simplejson.dumps([{'Number':'555-555-5555', 'Ext':'123', 'Notes':'Work'},{'Number':'444-444-4444', Ext:'456', Notes:'Mobile'}]))
p_entity.phone_numbers_search_property = ['5555555555', '4444444444']

p_entity.put()

親子関係を持つ複数のエンティティ:

別の方法は、子エンティティと親エンティティを使用することです。

person_entity = Person()
person_entity.put()

phone_entity1  = PhoneNumber(parent=person_entity)
phone_entity.Number = '5555555555'
phone_entity.Ext    = '123'
phone_entity.Notes  = 'Work'

phone_entity2  = PhoneNumber(parent=person_entity)
phone_entity.Number = '4444444444'
phone_entity.Ext    = '456'
phone_entity.Notes  = 'Mobile'

ユースケース:

これは高度に関連したデータです。person オブジェクトには、複数の電話番号が含まれています。ただし、これらの電話番号との間で電話をかけることもできます。電話の記録もこれらの電話番号を参照する必要があります。

親子エンティティ関係の目的:

ドキュメントを読んだ後、親子エンティティ関係の目的はトランザクションを実行することであるという印象を受けました。

しかし、この場合も適切でしょうか? 親とそのすべての子をデータストアから引き出すことは、1 つのエンティティをその「子」とともに JSON テキスト BLOB として格納するのと同じくらい効率的ですか?

基本的な質問

Google App Engine でこの種のデータを処理するための通常の受け入れられた方法はありますか?

4

2 に答える 2

2

新しい NDB API を見てみましょう (特に StructuredProperty: http://code.google.com/appengine/docs/python/ndb/properties.html#structured ) 。

また、私の経験と私が読んだことから、既存のエンティティを更新する場合、変更されていないプロパティへの書き込みには料金がかかりません。つまり、Riley が言ったこととは対照的に、オブジェクトの書き込みに対してのみ料金が発生します。 + 変更されたインデックス付きプロパティに対して 2 回の書き込み + 変更したモデルとプロパティを含む複合インデックスごとに 1 回の書き込み。

私が読んだすべての記事と私の経験 (私もこれに対する解決策を考え出す必要があり、JSON メソッドに行き着きました) から、データストアへの移動を最小限に抑えるために、できるだけ多くを単一のエンティティに詰め込みたいと考えています。 $$ と時間の点で最もコストがかかるものです。

于 2012-03-12T17:30:14.680 に答える
1

子エンティティをデータストアから引き出すことに特別なボーナスはありません。2 つのエンティティがある場合get、それらが同じエンティティ グループにあるかどうかにかかわらず、コストは同じです。App Engine のエンティティ グループの唯一の目的はトランザクションです。

電話番号が変わると通話記録も変わる?私の最初の考えは、レコードには電話番号オブジェクトへの参照ではなく、電話番号データの別のコピーが必要だということでした。電話番号で通話履歴を照会することもできます。関連する連絡先への参照を保存する方が理にかなっています。そのため、連絡先の名前が変更された場合などに通話ログを更新できます。

于 2012-03-12T15:54:29.333 に答える