2

現在、SQLite (w/ SQLAlchemy ) を使用して、約 5000 の dict オブジェクトを格納しています。各 dict オブジェクトは、キーを持つ PyPI のエントリに対応します (名前、バージョン、概要 .. '説明' はプロジェクト ドキュメントと同じ大きさになる場合があります)。

これらのエントリを (JSON から) ディスク (SQLite 形式) に書き戻すには数秒かかり、遅く感じます。

書き込みは 1 日に 1 回程度の頻度で行われますが、キー (通常は名前または説明) に基づく特定のエントリの読み取り/検索は非常に頻繁に行われます。

apt-get と同じように。

SQLite よりもニーズに適した Python で使用するストレージ ライブラリはありますか?

4

4 に答える 4

2

名前と説明にインデックスを付けましたか? 5000 のインデックス付きエントリの検索は、本質的に瞬時に行われる必要があります (もちろん、ORM を使用すると、通常どおり [SQLAlchemy などの比較的優れたものでさえ、しかし「生の sqlite」を試してみると、絶対に飛ぶはずです)、作業がはるかに困難になります)。

更新されたエントリだけを (再び実際の SQL で) 書き込むことも、基本的に瞬時に行う必要があります。理想的には、単一の update ステートメントでそれを実行する必要がありますが、1,000 であっても実際には問題にならないはずです。ループの開始時に自動コミットをオフにすることを確認してください。 (そして、必要に応じて後で元に戻します)。

于 2009-07-21T02:29:57.857 に答える
1

アプリケーションにとってはやり過ぎかもしれませんが、スキーマフリー/ドキュメント指向のデータベースをチェックアウトする必要があります。個人的にはカウチデータベースのファンです。基本的に、レコードをテーブルの行として格納するのではなく、couchdb のようなものでキーと値のペアを格納し、(couchdb の場合) JavaScript でビューを記述して、必要なデータを選別します。これらのデータベースは通常、リレーショナル データベースよりもスケーリングが容易であり、リレーショナル データベースに適合する形にデータを打ち込む必要がないため、この場合ははるかに高速になる場合があります。一方、別のサービスが実行されていることを意味します。

于 2009-07-21T03:06:08.093 に答える
0

Nucularを使用して、非常によく似た問題を自分自身で解決しています。これはあなたのニーズに合うかもしれません。これはファイル システム ベースのストレージであり、非常に高速に見えます。( Python ソース ツリー全体にインデックスを付けるサンプル アプリが付属しています) 同時実行セーフであり、外部ライブラリを必要とせず、純粋な python です。高速に検索し、強力な全文検索、インデックス作成などを備えています。トレンディな Couchdb と mongodb の方法に倣った、特殊なインプロセスのネイティブ python-dict ストアのようなものですが、はるかに軽量です。

ただし、制限があります。ネストされた辞書を格納またはクエリできないため、すべての JSON タイプを格納できるわけではありません。さらに、そのテキスト検索は強力ですが、その数値クエリは弱く、索引付けされていません。それにもかかわらず、それはまさにあなたが求めているものかもしれません。

于 2010-12-17T08:41:18.860 に答える
0

記載されているオブジェクトのおおよその数 (約 5,000) を考えると、SQLite はおそらく速度の背後にある問題ではありません。それは中間手段です。たとえば、JSON や SQLAlChemy の最適でない使用などです。

これを試してみてください (数百万のオブジェクトでもかなり高速です): y_serial.py module :: Warehouse Python objects with SQLite

「シリアライゼーション + 永続化 :: 数行のコードで、Python オブジェクトを圧縮して SQLite に注釈を付けます。その後、SQL を使用せずに、キーワードによって時系列でそれらを取得します。データベースがスキーマのないデータを格納するための最も有用な「標準」モジュール。」

http://yserial.sourceforge.net

キーの yserial 検索は、Python ではなく SQLite 側の正規表現 (「regex」) コードを使用して行われるため、速度が大幅に向上します。

それがどのように機能するか教えてください。

于 2010-03-03T16:27:50.463 に答える