Подтвердить что ты не робот

Как вы разрабатываете модели данных для Bigtable/Datastore (GAE)?

Так как хранилище данных Google App Engine основано на Bigtable, и мы знаем, что не реляционная база данных, как вы проектируете схема базы данных/модель данных для приложений, использующих этот тип системы баз данных?

4b9b3361

Ответ 1

Разработка схемы больших таблиц - это открытый процесс и в основном требует от вас думать:

  • Шаблоны доступа, которые вы будете использовать, и как часто каждый будет использоваться
  • Отношения между вашими типами
  • Какие индексы вам понадобятся
  • Образцы записи, которые вы будете использовать (чтобы эффективно распределять нагрузку)

Хранилище данных GAE автоматически денормализует ваши данные. То есть каждый индекс содержит (в основном) полную копию данных, и, таким образом, каждый индекс значительно увеличивает время, затрачиваемое на выполнение записи, и используемое пространство хранения.

Если бы это было не так, проектирование схемы хранилища данных было бы намного более полезным: вам нужно было бы тщательно подумать о первичном ключе для каждого типа и рассмотреть влияние вашего решения на локальность данных. Например, при рендеринге сообщения в блоге вам, вероятно, придется отображать комментарии, чтобы идти вместе с ним, поэтому каждый ключ комментария, вероятно, начинался с связанного с ним почтового ключа.

С Datastore это не так уж и сложно: запрос, который вы используете, будет выглядеть примерно так: "Select * FROM Comment WHERE post_id = N." (Если вы хотите опубликовать комментарии, у вас также будет предложение limit и возможный суффикс "AND comment_id > last_comment_id".) После того, как вы добавите такой запрос, Datastore построит для вас индекс, и ваши чтения будут магически быстро.

Что-то, о чем следует помнить, состоит в том, что каждый дополнительный индекс создает дополнительные затраты: лучше всего использовать как можно меньше шаблонов доступа, так как это уменьшит количество индексов, которые будет построено GAE, и, следовательно, требуется общее хранилище по вашим данным.

Читая этот ответ, я нахожу его немного расплывчатым. Может быть, практический дизайнерский вопрос поможет разобраться в этом?: -)

Ответ 2

Вы можете использовать www.web2py.com. Вы создаете модель и приложение один раз, и оно работает на GAE, но также и с SQLite, MySQL, Posgres, Oracle, MSSQL, FireBird.

Ответ 3

Поскольку GAE основывается на управлении данными в Django, есть много информации о том, как обращаться с подобными вопросами в документации Django (например, см. здесь, прокрутите вниз до "Ваша первая модель" ).

Короче говоря, вы создаете модель db как обычную объектную модель и позволяете GAE сортировать все объектно-реляционные сопоставления.