1

次のシナリオでデッドロックを回避する最善の方法についてのヒントを探しています。注文した商品と利益率に関する詳細を保存する、Magento サイト用にカスタム テーブルをセットアップしました。sales_order_invoice_save_afterイベントをリッスンし、請求書の情報に基づいてテーブルに行を挿入します。また、すべての製品のactual_shipping_costsフィールドに基づいて推定利益を計算します。これは見積もりにすぎないため、注文番号と実際の発送費用を含む CSV を定期的にインポートしています。私のコードは、インポートされたデータを取得し、CSV 内の各注文のアイテムの利益を再計算し、データベース テーブルを更新します。最初に、いくつかの列をsales_flat_orderに追加しましたおよびsales_flat_order_itemsテーブルを作成し、独自のカスタム テーブルを作成するのではなく、そこにすべてを格納していました。構成可能な製品に関する予期しない問題に加えて、一部の顧客のチェックアウト後にいくつかの問題が見られるようになりました (公式には私のコードに起因するものではありませんでした)。そのため、カスタム テーブルの使用に切り替えました。これにより、必要な柔軟性が得られ、構成可能な製品に関する問題が修正されました。また、チェックアウト後に問題が発生することはないようです。

これは、約 3000 の注文番号と送料を含む CSV を初めてインポートしようとするまでは素晴らしかったです。私がインポートを行う方法は少しゲットーですが、これが私が見つけた最良の方法です。システム構成の下に拡張機能の設定がいくつかあります。そのうちの 1 つはファイル インポート フィールドです。そのフィールドを選択して CSV ファイルを選択し、構成ページで [保存] をクリックすると、ファイルが取得されて解析され、カスタム テーブルに必要な行を追加/更新する作業が行われます。これが問題の一部であると思われる場合、および代わりに何をすべきかについての推奨事項がある場合はお知らせください (つまり、Dataflow クラスを使用して、このための高度なプロファイルを作成する必要がありますか?)。これにはかなりの時間がかかります... sales_flat_order テーブルと sales_flat_order_items テーブルにデータを追加していたときよりもはるかに時間がかかりました。これは、余分な計算と子製品の親を見つけることが原因である可能性があります...なぜ遅いのか正確にはわかりませんが、そうです. このインポートの実行中に顧客が注文すると、SQL デッドロック エラーが発生する可能性があります (おそらく発生する可能性があります)。

私の質問 (まだこれらすべてに従っている場合) は、これを回避する最善の方法です。新しい注文の場合、それらはテーブルへの挿入のみであり、インポートは既存の行を更新しています。それらは決して衝突してはなりません。私が考えることができる唯一のことは、新しい行を挿入するためのコードで、レコードをロードして、テーブルにまだないことを確認しようとすることです...これがロックしている理由でしょうか? 私は決して SQL の専門家ではありませんが、さまざまな種類のロックと優先順位の設定に関する情報をオンラインで見つけました。これは Magento または Zend フレームワークを介して可能ですか?それは役に立ちますか?

長文の質問で申し訳ありません。フォローしていただけると幸いです。さらに情報が必要な場合は、最善を尽くします。非常に多くの異なるファイルにコードが含まれているため、コードを投稿するのは困難ですが、必要なものをお知らせください。できる限り提供します。

ありがとう!

4

0 に答える 0