Стоит ли денормализовать свойства, чтобы уменьшить количество индексов, необходимых для App Engine? - PullRequest
1 голос
/ 21 июля 2010

Один из моих запросов может принимать множество различных фильтров и сортировать заказы в зависимости от ввода пользователя. Это создает огромный файл index.yaml из 50+ индексов.

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

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

Звучит ли это как хорошая идея или есть другие недостатки в этом подходе?

Ответы [ 3 ]

3 голосов
/ 27 января 2011

Как всегда, это зависит от того, как вы хотите запрашивать ваши объекты. Для большинства видов запросов, которые вы можете выполнить с таким списком свойств, App Engine уже будет включать автоматически созданный индекс, который вам не нужно указывать в app.yaml. Аналогично, большинство запросов, которые вы хотите выполнить, требуют составного индекса, вы не могли бы сделать это со свойством списка или потребовали бы «взрывного» индекса для этого свойства списка.

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

2 голосов
/ 21 июля 2010

Денормализация ваших данных для сокращения числа индексов звучит как хороший компромисс.Уменьшение количества нужных вам индексов приведет к уменьшению количества индексов для обновления (хотя ваш один индекс будет иметь больше обновлений);Неясно, как это повлияет на производительность на GAE.Размер, конечно, будет больше, если вы оставите исходные поля на месте (поскольку вы копируете данные в свойство списка строк), но это может быть не слишком значительным, если ваша сущность уже была достаточно большой.

Этонемного сложнее, так как индекс в списке будет содержать одну запись для каждого элемента в списке на каждую сущность (а не только одну запись на сущность).Это, безусловно, повлияет на пространство и производительность запросов.Кроме того, будьте осторожны при создании индекса, который содержит несколько свойств списка, или вы можете столкнуться с проблемой взрыва индексов (несколько свойств списка => одна запись индекса для каждой комбинации значений из каждого списка).

Попробуйте поэкспериментироватьи посмотрите, как это работает на практике для вас (используйте AppStats !).

0 голосов
/ 26 января 2011

"Это, несомненно, увеличит размер моего хранилища, но на самом деле это не проблема, поскольку у меня не будет такого большого количества данных. "

Если это так, то у вас естьнет причин денормализовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...