Какая наиболее эффективная модель объединения «многие ко многим» в Google App Engine?

9

Дизайн BigTable отвергает многие философии стандартных реляционных моделей, явно предпочитая денормализацию большому множеству крошечных таблиц.

Одной из самых больших областей, в которых возникает эта проблема, является моделирование множества соединений.

Одним из способов моделирования этих объединений является нарушение первой нормальной формы и помещение всех интересных данных в db.ListProperty (). Несмотря на то, что это позволяет выполнять поиск по запросу, я еще не исследовал влияние производительности на поиск в списке по сравнению с извлечением другой таблицы.

Как присоединяется не представляется возможным, то это возможно таблицы связей через RelationshipProperties. Следовательно, при достаточных усилиях можно создать стандартную таблицу пересечений (таблицу с объединенным первичным ключом, который ссылается на обе родительские таблицы). Кто-нибудь исследовал хиты производительности различных реализаций?

-Редактировать-

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

Брайан Баллсун-Стэнтон
источник

Ответы:

3

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

РЕДАКТИРОВАТЬ:

Я нашел это сегодня, проверьте это.

eiefai
источник
0

По моему опыту в GAE, вы должны экономно использовать запросы к таблицам. Добавление таблицы «соединения» просто еще больше замедлит работу. Например, если у вас есть таблицы A и B, которые имеют общее отношение «многие ко многим», и вы создаете таблицу «соединения» J с полями RelationshipProperty для A и B, вам придется запрашивать J каждый раз, когда вы хотите найти связанные записи (сущности).

Было бы намного быстрее иметь список ключей в A или B (или оба в случае необходимости), потому что они будут включены, когда вы выбираете эту запись / сущность. Пока у вас не слишком много ключей в списке (то есть сущность не слишком велика), это путь.

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

Брент Уошберн
источник