Oto kilka empirycznych odpowiedzi:
GeoPtProperty
wykorzystuje 31B miejsca.
Korzystanie BlobProperty
zmienia się w zależności od tego, co dokładnie można przechowywać:
struct.pack('>2f', lat, lon)
=> 21B.
- Używanie pikli (v2) do pakowania 2-krotnego pliku pływającego => 37B.
- Używanie piklowania (v0) do pakowania 2-krotnego pliku pływającego => około 30B-32B (v0 używa zmiennej ascii dla zmiennych typu float).
Krótko mówiąc, nie wygląda na to, że GeoPt
robi coś szczególnie sprytnego. Jeśli zamierzasz przechowywać wiele z nich, możesz użyć struct
, aby spakować swoje pływaki. Pakowanie i rozpakowywanie ich za pomocą struct
prawdopodobnie będzie niezauważalnie różnić się od kosztu procesora związanego z serializowaniem/deserializacją GeoPt
.
Jeśli planujemy przechowywania wiele pływaków na podmiot i przestrzeni jest naprawdę ważne, to może warto rozważyć wykorzystując CompressedBlobProperty
w aetycoon.
Zrzeczenie się odpowiedzialności: Jest to wymagane minimum miejsca. Rzeczywista powierzchnia będzie nieznacznie większa na każdą nieruchomość w oparciu o długość nazwy nieruchomości. Sam model dodaje również narzut (z nazwy i klucza).
Dla zabawy ... 'GeoPt' wydaje się być przechowywany jako wartość" punkt ". W szczególności same dane wydają się zajmować 18B - dwie 1-bajtowe liczby całkowite i dwie 8-bitowe liczby podwójne (patrz [tutaj] (http://code.google.com/p/googleappengine/source/browse/trunk/python/google /appengine/datastore/entity_pb.py#215)) w sumie 18 bajtów. Roztwór 'struct' pakuje każdy zmiennoprzecinkowy do 4 bajtów, co daje łącznie 8 bajtów. Oba mają zatem 13B "napowietrznych" od reszty informacji o nieruchomościach z moich testów powyżej (narzut ma być taki sam, ponieważ jedyną różnicą między moimi testami jest rodzaj nieruchomości). –
Twoja analiza nie uwzględnia czasu pracy procesora - wytrawianie i kruszenie jest zazwyczaj bardzo kosztowne obliczeniowo. Korzystanie ze struktury jest jednak dobrym pomysłem. Warto również zajrzeć do nowo dodanego ArrayProperty w AETycoon. –