GAE ndb дизайн, производительность и использование повторяющихся свойств - программирование
Подтвердить что ты не робот

GAE ndb дизайн, производительность и использование повторяющихся свойств

Скажем, у меня есть картинная галерея, и у картины потенциально могут быть поклонники 100 000+. Какой дизайн ndb более эффективен?

class picture(ndb.model):
    fanIds = ndb.StringProperty(repeated=True)
    ... [other picture properties]

или

class picture(ndb.model):
    ... [other picture properties]

class fan(ndb.model):
    pictureId = StringProperty()
    fanId = StringProperty()

Есть ли ограничение на количество элементов, которые вы можете добавить в свойство повторения ndb, и есть ли какая-либо производительность при хранении большого количества элементов в повторяющемся свойстве? Если менее эффективно использовать повторяющиеся свойства, каково их предназначение?

4b9b3361

Ответ 1

Не используйте повторяющиеся свойства, если у вас более 100-1000 значений. (1000, вероятно, уже подталкивает его.) Они не были предназначены для такого использования.

Ответ 2

Как правило, v1 будет намного дешевле.

С точки зрения затрат на чтение и запись вы платите за выборку/запись объекта, поэтому вы хотите уменьшить количество объектов. версия 1 будет дешевле. Значительно дешевле, если вы приносите каждого вентилятора каждый раз при получении изображения.

Однако каждый объект ограничен 1 МБ. Если у вас есть поклонники 100k +, вы можете нанести это ограничение в зависимости от размера вашего fanId. Это не считая ваших других данных изображения, поэтому вы можете взорвать этот предел 1 МБ. Вам придется добавить более сложный код для обработки случаев переполнения.

Большие объекты занимают больше времени, чем маленькие объекты. Если вы собираетесь забрать всех поклонников одновременно, v1 будет лучше. Если вы хотите получить только 5 поклонников в любой момент, v2 может быть быстрее (только возможно). Если, с другой стороны, вы пытаетесь вытащить объекты на 100 000 вентиляторов... которые собираются навсегда.