2011-11-06 15 views
5

Byłem ciekawy, czy ktoś może mi powiedzieć, czy używanie SQLite do przechowywania słownika (jak w brutalnej sile) do użycia w skrypcie Pythona było skuteczną metodą. Chociaż jestem stosunkowo nowy w Pythonie, mam spore doświadczenie z innymi językami programowania i obecnie pracuję nad narzędziem do pięterowania, które będzie używane w Backtrack. Do tej pory jestem pod wrażeniem szybkości i prostoty języka Python, a moje zapytania SQL wydają się działać idealnie, aby zwrócić potrzebne przedrostki do mojego narzędzia brute force. Myślę jednak, że zastanawiam się, jaki jest standard przechowywania dużych plików danych w Pythonie? Czy przeoczyłem lepszy (szybszy) sposób przechowywania moich prefiksów tylko z powodu mojego komfortu z SQL? Proszę pamiętać, że nie używam Pythona do wysyłania zapytań od 0 do n i używam ich, raczej używam Pythona, aby zawęzić możliwości i zapytać o te wpisy słownika, które pasują do kryteriów. Każda pomoc lub opinie będą mile widziane!Jak szybko jest SQLite za pośrednictwem Pythona

+0

Jak szybko byś chciał? Jak duży jest zbiór danych MB, GB, TB? Co masz na myśli przez "przedrostki" to jak w "drzewie prefiksów" (trie)? Jak dobrze operacje wykonywane na danych odpowiadają modelowi relacyjnemu? – jfs

Odpowiedz

3

Tak, sqlite jest rozsądnym wyborem do implementacji słownika. Aby uzyskać szybkość, użyj opcji: memory: i upewnij się, że tworzysz odpowiednie indeksy dla wyszukiwań i zapytań.

Dla dużych, trwałych baz danych działa również dobrze. W celu uzyskania szybkości należy zwrócić uwagę na duże transakcje zamiast na każdy klucz.

Proponowane i odpowiednich zastosowań dla SQLite jako magazyn danych jest objęte na swojej stronie internetowej: http://www.sqlite.org/features.html

1

Jeśli Raymond Hettinger zaleca również SQLite, to chyba najlepszym.

Ale rodzimym rozwiązaniem Pythona byłoby użycie pliku "pikle". Zbudowałbyś Python dict, który przechowuje dane, a następnie "podbija" dyktę; później możesz "rozpruć" dyktando. Jeśli masz tylko jeden klucz, którego musisz szukać, może to być dobra droga.

Dla Pythona 2.x najprawdopodobniej chciałbyś użyć modułu cPickle. W przypadku Pythona 3.x jest tylko pickle, ale uważam, że jest tak szybki jak cPickle.

http://docs.python.org/library/pickle.html

Z drugiej strony, jeśli zbiór danych jest naprawdę duża, tak duża, że ​​SQLite zaczyna się dusić na nim, a następnie zamiast podzielenie go na kilka mniejszych plików SQLite i zarządzania nimi, może to zrobić po prostu zrzuć wszystko do prawdziwej bazy danych, takiej jak PostgreSQL.

Powiązane problemy