2017-10-24 1 views
0

データベースからのオブジェクトとcsvからのオブジェクトの2つの配列があります。私は両方の配列オブジェクトをPhonesとemailの相対的な特性で比較し、それらの中で重複した配列を見つける必要がありました。奇妙なデータベースオブジェクト構造のため、私は両方の配列をJavascriptと比較する必要がありました。私は最高のアルゴリズムと最高の比較方法を知りたいと思って重複を見つけましたか?オブジェクトの2つの配列での検索のパフォーマンスを最適化する方法

簡単な計算方法について説明します。 私のデータベースには5000の連絡先があり、ユーザーはcsvから別の3000の連絡先をアップロードすることができます。データベースから重複した連絡先を見つける必要があるたびに、それが見つかった場合は上書きして休憩する必要があります。連絡先を行ごとに比較すると、ループする可能性があります。5000データベースの連絡先x 3000 csv contacts = 15000000の時刻は、をトラバースします。 これは私の現在のシナリオです。私はこの問題の効率的な解決策が必要です。

私は、NodeJS、RethinkDBのものを開発します。

データベースオブジェクトの構造は、このように正確に表現され、他の連絡先の電子メールや電話のエントリも重複する可能性があります。

[{ 
    id: 2349287349082734, 
    name: "ABC", 
    phones: [ 
     { 
      id: 2234234, 
      flag: true, 
      value: 982389679823 
     }, 
     { 
      id: 65234234, 
      flag: false, 
      value: 2979023423 
     } 
    ], 
    emails: [ 
     { 
      id: 22346234, 
      flag: true, 
      value: "[email protected]" 
     }, 
     { 
      id: 609834234, 
      flag: false, 
      value: "[email protected]" 
     } 
    ] 
}] 

したい場合は、フィドルコードを確認してください:https://jsfiddle.net/dipakchavda2912/eua1truj/

を私はインデックスをすでにやっています。この問題は一目瞭然に見えていますが、並行性については非常に重要でCPU集約的です。

+0

ですから、データベース配列とのcsvファイルの配列を比較し、重複を削除、私が正しく理解していますか? –

+0

重複をどのように定義しますか?データベースconteactとcsv連絡先の小さなデータセットを追加して問題を説明してください。 –

+0

重複レコードの実際のインデックスを削除していないので、後でレコードを更新します。 –

答えて

0

あなたはlodash方法differenceWithを使用することができ、質問を理解していれば

let csvContacts = [] //fill it with your values; 
let databaseContacts = .... //from your database 
let diffArray = [] //the non duplicated object; 
const l = require("lodash"); 
diffArray = l.differenceWith(csvContact, 
          databaseContacts, 
          (firstValue,secValue)=>firstValue.email == secValue.email 
+0

しかし、csvとデータベースに複数の電子メールや電話があり、どちらもオブジェクト形式が異なる場合はどうなりますか? –

+0

最適化について私の質問は、私はロジックを最適化し、実行時間を短縮することができます。 –

関連する問題