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

StackOverflow https://stackoverflow.com/questions/79850

Вопрос

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

Это было полезно?

Решение

Разработка схемы bigtable — это открытый процесс, который требует от вас подумать о следующем:

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

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

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

С Datastore это не такая уж большая проблема:Запрос, который вы используете, будет выглядеть как «Выберите * из комментария, где post_id = N.» (Если вы хотите разместить комментарии, у вас также будет ограниченный пункт и возможный суффикс "и comment_id> last_comment_id".) Как только вы добавите такой запрос, хранилище данных построит индекс для вас, и ваши чтения будут волшебно быстро.

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top