2011-11-06 8 views
5

Pythonスクリプトでの使用のためにSQLiteを使用して(ブルートフォースのように)SQLiteを使用するのが効率的な方法であった場合、私は比較的新しいPythonを使っていますが、他のプログラミング言語でかなりの経験があり、現在、Backtrackで使用するペンテストツールに取り組んでいます。これまでのところ、私はPythonの速度とシンプルさに非常に感銘を受けました。私のSQLクエリは、ブルートフォースツールに必要なプレフィックスを返すのに理想的です。しかし、私はPythonで大きなデータファイルを格納するための標準は何かと思いますか?私の接頭辞を格納するためのより良い(より速い)方法を見落としているのは、単にSQLの快適さのためですか?私はPythonを使って0からnまでのIDを照会せず、それらを使うのではなく、Pythonを使って可能性を絞って、その条件に合致する辞書エントリを照会しています。どんな助けや意見も大歓迎です!Pythonを介したSQLiteの速さ

+0

どのくらい速くなりたいですか? MB、GB、TBのデータセットのサイズはどれくらいですか? 「プレフィックス」とは、「プレフィックスツリー」(トライ)と同じですか?データに対して実行する操作は、リレーショナル・モデルにどれだけ対応していますか? – jfs

答えて

3

はい、sqliteは辞書を実装するための合理的な選択肢です。スピードを上げるには、:memory:オプションを使用し、ルックアップとクエリに適切なインデックスを作成してください。

大規模な永続データベースの場合は、正常に動作します。速度を上げるために、キーごとではなく大規模なトランザクションを実行するように注意してください。データストアは、彼らのウェブサイトで覆われているようsqliteのための

提案し、適切な使用:http://www.sqlite.org/features.html

1

レイモンドヘッティンガーもSQLiteのを推奨していた場合、それはおそらくあなたの最善の策です。

しかし、ネイティブのPythonソリューションでは、「ピクル」ファイルを使用することになります。データを保持しているPython dictをビルドし、次にdictを "pickle"します。後で、あなたは「辞めない」ことができます。あなたが検索する必要があるキーが1つしかない場合、これはおそらく良い方法かもしれません。

Python 2.xでは、cPickleモジュールを使用することをお勧めします。 Python 3.xでは、pickleしかありませんが、私はそれがcPickleと同じくらい速いと信じています。一方

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

データセットは、SQLiteのはそれで窒息し始め、その後、代わりに複数の小さなSQLiteのファイルにそれを分割し、それらを管理している、それはなるかもしれないほど大きい本当に大きい場合PostgreSQLのような実際のデータベースにすべてをダンプするだけでいいのです。

関連する問題