2013-07-09 2 views
1

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

Я уже знаю, что Datastore (с подстилающей Bigtable технологии) работает иначе, чем системы RDBM, но мой вопрос: что мешает один из еще выложив свои модели в реляционную образом (со всеми его преимуществами от а теоретической и планировочной точки зрения) в хранилище данных?

Пример для пояснения. Не могу я все еще планирую объекты следующих видов:

  • лицо (имя: ул Компания: Компания)
  • Company (Имя: ул)
  • Project (Примечание: текст)
  • PersonProjects (Person: Person, Project: Project)

свойства, которые относятся к другим лицам (например, Person.Company, PersonProjects.Project) будет хранить идентификаторы этих субъектов. Каковы основные недостатки (если они есть), с точки зрения производительности? Обратите внимание, что я мог бы нормализовать модель дальше, например. вводя новые виды для PersonName, CompanyName и т. д., но я решил здесь сохранить однозначные свойства в том же виде, на которые они ссылаются.

Я помню, как некоторое время назад я видел видео из серии ввода-вывода (сделанного тем же Google), в котором применялись методы нормализации, чтобы предотвратить сужение определенных объектов определенного типа, т. Е. Слишком много свойств (проблема на самом деле связана с взрывными индексами). Одно свойство запланированного вида было «отстранено» от него как новый вид, только для того, чтобы впоследствии его дополнять с помощью кода.

Ну, разве я не могу сделать это для всех видов? Я не вижу никаких серьезных проблем, кроме увеличения клиентской (или серверной) работы (необходимой для получения объекта для настройки). Итак, действительно ли необходим переход на «сущностную» модель? Разве мы не можем имитировать отношения через виды и сущности?

Надеюсь, я был достаточно ясен.

+0

Вы можете, но вы, как правило, должны составлять по соображениям производительности. Я использую промежуточные объекты, когда вам нужно много разных отношений. –

+0

Спасибо за ответ. Но каковы именно те характеристики производительности, на которые вы намекаете? Это в основном то, что мне нужно знать. – atava

+0

Вы узнаете это, когда все начнется.Помните, что вы не можете присоединяться. Таким образом, все, что вы хотите получить через запрос, зависящий от значений на другом конце отношения, становится дорогостоящим, если вам нужно значение на 2 уровнях, тогда оно будет стоить дорого. Профилируйте свою заявку, и вы получите лучшее представление о том, что вам нужно будет оптимизировать. В моменты ваш вопрос слишком открытый, и правильный ответ зависит от того, что вы делаете. –

ответ

1

Ничто не мешает вам нормализовать вашу модель в Datastore. Проблема заключается в том, что Datastore имеет очень ограниченный язык запросов: фильтр неравенства только по одному свойству, без многопрофильного запроса, без JOIN и т. Д. Это заставляет вас организовать данные в зависимости от вашего шаблона доступа: ориентированное на доступ моделирование. Это часто заставляет вас хранить данные в нелогичных местах, просто чтобы быстро добраться до него (= минимальный набор операций с БД).

Кроме того, транзакции довольно ограничены, что позволяет организовать данные определенным образом (группы объектов). Или, если вы используете транзакции XG, вы будете ограничены до 25 штук на транзакцию.

Также обратите внимание, что в SQL RDBM отсутствует стандартная ссылочная целостность с использованием DB.

+0

. Обратная связь, полученная мной до сих пор, убеждает меня в том, что, хотя возможно, вся реляционная модель непригодна для хранилища данных, как сейчас. Да, все из-за отсутствия встроенных возможностей запросов, таких как JOIN и т. Д. (Опять же из-за того, как объекты хранятся и извлекаются в Bigtable), при этом необходимо полагаться на несколько запросов только для «создания» одного нормализованного объекта поля. (Ссылочная целостность не была бы большой проблемой, так как я бы справился с этой кодовой стороной, и в любом случае Engine уже представляет себя так же «свободным».) Спасибо за ваш ответ! – atava

Смежные вопросы