2012-03-07 2 views
2

つを使用しての大規模なXMLファイルを照会の詳細ジャンゴっぽい方法は次のコードを持っていますが速く/いくつかの本当に遅いのXPathジャンゴの私のviews.pyファイル内の関数の

from lxml import etree 
f = etree.parse("path/to/file/k2.xml") 
for item in charList: 
    first += f.xpath(u"//character[item='"+item+"']/path/to/entry[@type='on']/text()") 
    second += f.xpath(u"//character[item='"+item+"']/path/to/entry[@type='off']/text()") 

これは、14メガバイトのXMLをロードしますXPathを使用して2つの変数に2つの値を追加します。

これは本当に遅いです - 5〜6秒、高トラフィックサイトの容認できないとします。

Djangoはクエリごとにデータベース呼び出しを持たず、代わりにsettings.pyファイルに永続的な接続を持っていることを教えていますが、XMLではなくSQLを使用している場合はそうです。

は、おそらく常にメモリ内のxmlファイルを持っていることによって、これを高速化するいくつかの方法はありますか? 14メガバイトのXMLファイル全体でXPathを行う

+0

XMLファイルをより高速なMySQLデータベースに移行しました。しかし、この質問はまだ立っている:/ – LittleBobbyTables

答えて

1

は、クエリのルートとして//を使用している場合は特に、遅いことになるだろう。これにより、プロセッサーはノードごとにというノードを見つけ、Xpathの有効性をチェックします。

可能であれば、ファイルを小さな文書に分割します。XMLは文書ベースの形式であることを覚えておいてください。のすべてのファイルにはが必要ですか?あなたは、このような大きなファイルを使用する必要がある場合

、その後、試してみて、あなたができる最も完全なXPathを取得します。コンテンツがルートndoeのブランチの1つにのみ存在することがわかっている場合は、それを指定します。 Xpathのルートの小さな変更でさえ、速度に大きな影響を与える可能性があります。

関連する問題