2012-06-05 18 views
9

Mam duży słownik Pythona wektorów (150k wektorów, każdy o wielkości 10k) liczb zmiennoprzecinkowych, których nie można załadować do pamięci, więc muszę użyć jednego z dwie metody przechowywania tego na dysku i pobierania określonych wektorów, gdy jest to właściwe. Wektory będą tworzone i przechowywane raz, ale mogą być odczytywane wiele (tysiące) razy - tak naprawdę ważne jest, aby mieć sprawny odczyt. Po kilku testach z modułem shelve, wierzę, że sqlite będzie lepszym rozwiązaniem dla tego rodzaju zadania, ale zanim zacznę pisać kod, chciałbym usłyszeć więcej opinii na ten temat ... Na przykład, czy są jakieś inne opcje z wyjątkiem tych dwóch, których nie znam?Wybór między shelve a sqlite dla naprawdę dużego słownika (Python)

Teraz, zakładając, że zgadzamy się, że najlepszą opcją jest sqlite, kolejne pytanie dotyczy dokładnej postaci tabeli. Zastanawiam się nad użyciem drobnoziarnistej struktury z wierszami w postaci vector_key, element_no, value, aby pomóc w wydajnej paginacji, zamiast przechowywać wszystkie 10k elementów wektora w tym samym rekordzie. Naprawdę doceniam wszelkie sugestie na ten temat.

Odpowiedz

9

Chcesz sqlite3, a następnie, jeśli używasz ORM jak sqlalchemy, możesz łatwo rozwijać się i korzystać z innych baz danych.

Półka jest bardziej "zabawką" niż faktycznie użyteczną w kodzie produkcyjnym.

Inna kwestia, o której mówisz, nazywa się normalizacją, a ja osobiście nigdy nie byłem w tym dobry, this powinien ci to wyjaśnić.

tylko jako dodatkowe noty this pokazuje awarie wydajności w półce vs sqlite3

+0

Witam, widziałem przed linkiem, który sugerujesz, problem polega na tym, że testuje tylko pisanie - nie czytanie, co jest dla mnie najwyższym problemem. Jeśli chodzi o normalizację, obie formy, które sugeruję powyżej, są już w normalnej formie, po prostu zastanawiam się, który z nich będzie najskuteczniejszy do odczytywania - myślę, że mogę wykonać pewne testy na ten temat. W każdym razie dziękuję za odpowiedź :) – dkar

3

Jak masz do czynienia z wektorami numerycznych, można znaleźć PyTables ciekawą alternatywną.

+0

Witam, wydaje mi się, że jest to interesująca alternatywa, lepiej przyjrzę się temu. Dziękuję za sugestię :) – dkar