Если у меня есть пара плаваний, больше это эффективный (в вычислительном отношении или мудрый устройством хранения данных) для хранения их как a GeoPtProperty
чем он был бы рассол кортеж и сохранил бы его как a BlobProperty
?
Если GeoPt
делает что-то более умное для хранения нескольких значений в единственном свойстве, оно может быть усилено для произвольных данных? Я могу сохранить кортеж ("Johnny", 5)
в единственном свойстве объекта столь же эффективным способом?
Вот некоторые эмпирические ответы:
GeoPtProperty
использует 31B дискового пространства.
Использование BlobProperty
зависит от того, что именно вы храните:
struct.pack('>2f', lat, lon)
=> 21B. Короче говоря, не похоже, что GeoPt
делает что-то особенно умное. Если вы собираетесь хранить много таких данных, то для упаковки поплавков можно использовать struct
. Упаковка и распаковка их с помощью struct
, вероятно, будет незаметно отличаться от затрат процессора, связанных с сериализацией/десериализацией GeoPt
.
Если вы планируете хранить много плавающих чисел на сущность и пространство действительно важно, то вы можете рассмотреть возможность использования CompressedBlobProperty
в aetycoon.
Disclaimer: Это минимально необходимое пространство. Фактическое пространство будет немного больше для каждого объекта недвижимости в зависимости от длины названия объекта. Сама модель также добавляет накладные расходы (для ее имени и ключа).
Сам GeoPt ограничен (-90 - 90, -180 - 180); его нельзя использовать для хранения данных, которые не подходят для этой модели.
Однако пользовательское свойство кортежа не должно быть слишком сложным для создания самостоятельно; Посмотрите, как SetProperty и ArrayProperty разработаны в aetycoon.