株式相場で xml フィードを解析し、結果をデータベースに保存するコンポーネントを作成しています。フィードをインクリメンタルに読み取ることができないことを除けば、問題はかなり単純です。つまり、最後の X 回の見積もりの変更のみが必要なのか、X 分よりも新しい変更のみが必要なのかを指定する方法はありません。本当の問題は、フィードが愚かで、プロバイダーが修正する必要があることですが、それはオプションの atm ではありません。
フィードは、プロバイダーの最新の株価情報 100000 件を含む巨大な xml ファイルです。フィードは 1 分ごとに 1 回ポーリングされ、その間に約 50 ~ 100 件の変更された見積もりがあります。残りは、何度も何度も読まれる重複した引用です。
フィードの各ポーリング中に、すべての引用符を (lxml を使用して) オブジェクトに解析します。次に、引用オブジェクトごとに、引用がデータベースに既に存在するかどうかを確認します。ある場合は破棄し、ない場合は保存します。新しいデータは約 0.1% のみで、残りは重複しているため、この手順は非常に無駄です。少し最適化するために、過去 X 時間に更新された相場をデータベースに 1 回照会してルックアップ テーブルを作成します。引用符は (last_update, stock_id) キーのデータベース内で一意であるため、この最適化によりクエリの数が約 50% 削減されます。
しかし、まだ 50k db のクエリがあり、各引用符が存在するかどうかを個別にチェックする必要があり、データベースに非常に負担がかかります。
そこで私が探しているのは、フィード パーサーを高速化する方法についてのアイデアです。最後に取得したxmlファイルと新しいxmlファイルを比較する方法はあるのでしょうか?