2010-06-09 21 views
5

Jeśli mam parę elementów pływających, czy jest to bardziej wydajne (obliczeniowe lub przechowywania), aby przechowywać je jako GeoPtProperty niż byłoby pickle krotkę i przechowywać go jako BlobProperty ?Wydajny sposób przechowywania krotek w magazynie danych

Jeśli GeoPt robi coś bardziej sprytnego, aby zachować wiele wartości w pojedynczej właściwości, czy można go zastosować do arbitralnych danych? Czy mogę przechowywać krotkę ("Johnny", 5) w jednej własności obiektu w równie efektywny sposób?

Odpowiedz

3

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).

+0

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). –

+0

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. –

0

Sam GeoPt jest ograniczony do (-90 - 90, -180 - 180); nie można go używać do przechowywania jakichkolwiek danych, które nie będą pasować do tego modelu.

Jednak niestandardowa własność krotki nie powinna być zbyt trudna do stworzenia; zobacz, jak SetProperty i ArrayProperty są zaprojektowane w aetycoon.

Powiązane problemy