2

データのストリームを取得し(xml-streamを使用)、それを統合してデータベースに書き込む(mongooseを使用)ノードプログラムを作成しようとしています。次のレコードを処理するまでにデータがデータベースにヒットしていない可能性があるため、統合の方法を理解するのに問題があります。私は次のようなことをしようとしています:

on order data being read from stream
  look to see if customer exists on mongodb collection 
    if customer exists 
      add the order to the document
    else
      create the customer record with just this order
    save the customer

私の問題は、顧客の 2 つの「近くの」注文により、重複した顧客レコードが書き込まれることです。最初のレコードは、2 番目のレコードが存在するかどうかを確認する前に書き込まれていないためです。

理論的には、xml-stream を一時停止することで問題を回避できると思いますが、これを実行できないバグがあります。

4

2 に答える 2

1

これが最良の選択肢であるかどうかはわかりませんが、非同期 キューを使用することは私がやったことでした。

同時に、一時停止を許可するxml-stream (ストリームの処理に使用していたもの) のプル リクエストが追加されました。

于 2013-03-15T10:11:09.790 に答える
0

ストリームから取得したデータの顧客オブジェクトに固有のフィールドはありますか? データベース レベルでの重複を防ぐために、mongoose スキーマに一意の制限を追加できます。

新しい顧客を作成するときは、フォールバック ロジックを追加して、顧客を作成しようとしたが、同じ顧客が別の保存によって同時に作成された場合に対処します。これが発生したら、保存を再試行しますが、最初に他の顧客を取得し、取得した顧客ドキュメントに注文を追加します

于 2013-03-12T21:12:30.993 に答える