Как вы проектируете модели данных для Bigtable / Datastore (GAE)? - PullRequest
18 голосов
/ 17 сентября 2008

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

Ответы [ 3 ]

19 голосов
/ 17 сентября 2008

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

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

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

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

С Datastore это не такая уж большая проблема: используемый вами запрос будет выглядеть примерно так: «Выбрать * ОТ КОММЕНТАРИИ ГДЕ post_id = N.» (Если вы хотите разместить комментарии на странице, у вас также будет предложение limit и возможный суффикс «AND comment_id> last_comment_id».) Как только вы добавите такой запрос, Datastore создаст для вас индекс, и ваши чтения будут волшебно быстро.

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

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

1 голос
/ 13 октября 2008

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

0 голосов
/ 17 сентября 2008

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

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

...