Эффективный способ хранения кортежей в хранилище данных - PullRequest
5 голосов
/ 10 июня 2010

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

Если GeoPt делает что-то более умное, чтобы сохранить несколько значений в одном свойстве, можно ли использовать его для произвольных данных? Могу ли я хранить кортеж ("Johnny", 5) в одном свойстве объекта таким же эффективным способом?

Ответы [ 2 ]

3 голосов
/ 10 июня 2010

Вот несколько эмпирических ответов:

GeoPtProperty использует 31B дискового пространства.

Использование BlobProperty зависит от того, что именно вы храните:

  • struct.pack('>2f', lat, lon) => 21B.
  • Использование pickle (v2) для упаковки 2-х кортежей, содержащих поплавки => 37B.
  • Использование pickle (v0) для упаковки 2-х кортежей, содержащих числа с плавающей запятой => примерно 30B-32B (v0 использует переменную кодировку ascii для поплавков).

Короче говоря, не похоже, что GeoPt делает что-то особенно умное. Если вы собираетесь хранить много таких вещей, то вы можете использовать struct для упаковки ваших поплавков. Упаковка и распаковка с struct, вероятно, будет незаметно отличаться от стоимости процессора, связанной с сериализацией / десериализацией GeoPt.

Если вы планируете хранить лотов чисел с плавающей запятой на одну сущность, и пространство действительно важно, тогда вы можете рассмотреть возможность использования CompressedBlobProperty в aetycoon .

Отказ от ответственности : это минимально необходимое пространство. Фактическое пространство будет немного больше для каждого свойства в зависимости от длины имени объекта. Сама модель также добавляет накладные расходы (для ее названия и ключа).

0 голосов
/ 10 июня 2010

Сам GeoPt ограничен (-90 - 90, -180 - 180);его нельзя использовать для хранения данных, которые не подходят для этой модели.

Однако собственное свойство кортежа не должно быть слишком сложным для создания самостоятельно;Посмотрите, как SetProperty и ArrayProperty разработаны в aetycoon .

...