Я пришел из мира реляционных баз данных, затем нашел эту вещь в хранилище данных потребовалось несколько дней, чтобы освоиться. ну вот некоторые из моих выводов.
Вы, должно быть, уже знаете, что хранилище данных построено в масштабе, и именно это отличает его от RDMBS. Чтобы лучше масштабировать большой набор данных, App Engine внес некоторые изменения (некоторые из них означают множество изменений).
СУБД VS DataStore
Структура
В базе данных мы обычно структурируем наши данные в Таблицы, Строки, которые находятся в Datastore, становятся Виды и Сущности .
Отношения
В RDBMS большинство людей следуют отношениям «один-к-одному», «многие-к-одному», «многие-ко-многим», в Datastore, поскольку в них есть «нет соединений», но все же мы можем добиться нашей нормализации, используя « ReferenceProperty"например Пример отношения один-к-одному .
Индексы
Обычно в RDMBS мы создаем такие индексы, как первичный ключ, внешний ключ, уникальный ключ и индексный ключ, чтобы ускорить поиск и повысить производительность нашей базы данных. В хранилище данных вы должны сделать по крайней мере один индекс для каждого вида (он автоматически сгенерирует , нравится вам это или нет), потому что хранилище данных ищет вашу сущность на основе этих индексов и считает, что это лучшая часть, В СУБД вы можете осуществлять поиск, используя неиндексные поля, хотя это займет некоторое время, но это произойдет. В Datastore вы не можете искать, используя неиндексированное свойство.
Count
В RDMBS намного проще сосчитать (*), но в хранилище данных, пожалуйста, даже не думайте, что это нормально (да, есть функция подсчета), так как он имеет 1000 Limit и будет стоить столько же маленькая операция как сущность, которая не хороша, но у нас всегда есть хороший выбор, мы можем использовать Счетчики осколков .
Уникальные ограничения
В RDMBS нам нравится эта функция, верно? но у Datastore свой путь. Вы не можете определить свойство как уникальное :(.
Запрос
GAE Datatore значительно улучшает возможности LIKE (О, нет! В хранилище данных нет ключевого слова LIKE) SQL, который является GQL .
Вставка данных / Обновление / Удаление / Выбор
Здесь нас всех интересует, так как в RDMBS нам требуется один запрос для вставки, обновления, удаления и выбора точно так же, как в СУБД, хранилище данных поместило, удалило, получило (не слишком волнуется), потому что хранилище данных помещало или получало в терминах Запись, чтение, мелкие операции (чтение затраты на вызовы хранилища данных ) и вот где начинается моделирование данных. Вы должны минимизировать эти операции и поддерживать работоспособность своего приложения. Для уменьшения операции чтения вы можете использовать Memcache .