В большой таблице нормально ли значения ключей в дочерних (под) коллекциях? - PullRequest
0 голосов
/ 12 марта 2012

Я использую Google App Engine и, следовательно, Big Table.

У меня есть 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_number сохраняется как капля неиндексированного текста в формате JSON (db.Text). Если в этой ситуации я хочу указать конкретный номер телефона, я декодирую json, а затем получаю номер телефона с нужным ключом.

phone_number_search_property используется для поиска. Включает поиск по номеру телефона: "SELECT * FROM person WHERE phone_number_search_property = '5555555555'"

Каков хороший способ ссылки на номер телефона внутри организации в этой ситуации? Здесь у меня есть каждое значение, введенное с помощью UUID. Это «нормальный» и принятый способ ведения дел? Если нет, то что?

Спасибо!

1 Ответ

1 голос
/ 12 марта 2012
  1. Если объект данных на самом деле является просто частью другого объекта и никогда не доступен без «родительского» объекта (как в случае с номером телефона и персоной), то ИМХО можно сериализовать его и сохранить в «» родительский объект. Итак, то, что вы сделали, в порядке.

  2. Вы ищите людей по номеру телефона, поэтому решение иметь дополнительную собственность с (нормализованными) номерами телефонов работает. Если вам нужно выполнить поиск по дополнительному свойству, оно не будет работать (например, ограничение поиска только мобильными номерами).

  3. Почему вы вводите сериализованные номера телефонов с помощью хешированной строки (я полагаю, вы генерируете ее с помощью UUID.fromString(String))? Просто используйте (нормализованный) номер телефона - он уникален.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...