Вопрос

Я строю приложение со многими ко многим отношениям; Предмет объекта «изображения» может быть связан с любым количеством галерей («Галерея»). И, конечно же, галерея может хранить любое количество фотографий.

Таким образом, следуя предложению Google здесь, я буду использовать список на «картине», который держит иностранные ключи «Галереи». Это большой подход.

(Реляционный DB-подход в старом стиле состоит в том, чтобы иметь таблицу / сущность между «картиной» и «галереей».)

Вот мой вопрос: при хранении ключа я должен перейти на «StringListProperty» на «картине» или «ListProperty (DB.Key)» будет работать лучше?

Одна причина, по которой я вижу для StringList Было бы, чтобы я мог хранить также другие значения, чем клавиши, но с другой стороны, это все равно было бы грязным стилем. Но я также почти уверен, что Google предложил не использовать больше одного списка в сущности, потому что индекс (ES) взорвется. Так что это оставит меня в бэкдоре.

Для ListProperty с типом "Ключ«Одним из пунктов будет автоматическая проверка, если значение на самом деле является ключом.

Поскольку очень легко преобразовать строки в ключи и наоборот, я не вижу причин для одного из типов списков, чтобы предпочесть здесь.

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

Любопытно о вашем вкладе. Особенно, если кто -то проверил производительность на этом или будет таким добрым и сделает это.

Ура, // Ханнес

Это было полезно?

Решение

Использовать db.ListProperty(db.Key) Если вы собираетесь хранить списки ключей. Они будут храниться в двоичном представлении, которое более компактно, чем представление строки, которое вы использовали бы в списке строк.

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

Другие советы

Используйте db.listproperty (db.key), это облегчит извлечение данных, чем String. Если модель галереи имеет Pic_list, которая имеет тип db.listproperty (db.key), который содержит список ключей картинки Entity .. Предположим, что изображение - это название вашей сущности .. Затем Picture.get (// GalleryObject //. PIC_LIST) получит все изображение Entision ..

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top