0

私はGoogleAppEngineを使用しているため、BigTableを使用しています。

私はperson次のようなエンティティを持っています:

{
    // This property would be encoded into JSON and saved un-indexed as db.Text()
    phone_numbers:
    {
        'hHklams8akjJkaJSL': // <-- Should I key this object?
        {
            number:'555-555-5555',
            type:'mobile', 
        },
        etc...
    },
    // This property is an array of strings.  
    // It is searchable so that a query could be run to find all 
    //   people with a particular phone number: 
    //   "SELECT * FROM person WHERE phone_number_search_property =      
    //     '5555555555'"
    phone_number_search_property:['5555555555','other phone numbers...'],

    first_name:'...',
    etc...
}

プロパティは、phone_numberJSON形式(db.Text)のインデックス付けされていないテキストのblobとして保存されます。この状況で特定の電話番号を参照したい場合は、jsonをデコードしてから、探している特定のキーの電話番号を取得します。

phone_number_search_property検索に使用されます。電話番号による検索が可能になります。"SELECT * FROM person WHERE phone_number_search_property = '5555555555'"

この状況でエンティティ内の電話番号を参照するための良い方法は何ですか?ここでは、UUIDを使用して各値にキーを設定しています。これは「通常の」受け入れられた方法ですか?そうでない場合は、何ですか?

ありがとう!

4

1 に答える 1

1
  1. データオブジェクトが実際には別のオブジェクトの一部であり、「親」オブジェクトなしでアクセスされない場合(電話番号と人の場合のように)、IMHOはそれをシリアル化して、「親」オブジェクト内に保存してもかまいません。だからあなたがしたことは大丈夫です。

  2. 電話番号で人を検索するので、(正規化された)電話番号で追加のプロパティを持つソリューションが機能しています。追加の物件を検索する必要がある場合は、機能しません(たとえば、検索を携帯電話番号のみに制限する)。

  3. シリアル化された電話番号をハッシュ文字列でキーイングするのはなぜですか(私はあなたがそれを経由して生成すると思いますUUID.fromString(String))?(正規化された)電話番号を使用するだけです-それは一意です。

于 2012-03-12T07:16:39.433 に答える