我正在尋找一種方法來協調來自3個不同來源的元素。我簡化了元素只有一個鍵(字符串)和版本(長)。協調3個列表的最佳算法
該列表同時獲得(2個來自單獨的數據庫查詢,1個來自另一個系統上的內存緩存)。
對於我的最終結果,我只關心所有3個來源中不完全相同的元素。所以我關心的結果是一個鍵列表,每個系統都有相應的版本。
Element1 | system1:v100 | system2:v100 | system3:v101 |
Element2 | system1:missing | system2:v200 | system3:v200 |
並且可以丟棄具有相同版本的元素。
實現這一目標的2種方式我認爲是
等待所有數據源完成檢索,並且不是通過每個列表循環聚集的主列表與鍵+所有3個版本的工會(丟棄所有相同的項目)。
第一個列表完成檢索後,將其放入併發集合(如字典(在.net 4.0中提供))中,並在剩餘列表(在併發集合中)一旦可用。
我的想法是,第二種方法會快一點,但可能不會太多。直到所有3種來源都存在,我才能真正做到很多,所以從第二種方法中獲得的並不多,引入了爭用。
也許還有其他方法可以解決這個問題嗎?另外,由於版本是使用long來存儲的,並且會有數百個(可能是數百萬)元素,因此可能會關注內存分配(可能不是一個大問題,因爲這些對象很短)
是否所有的列表都有相同的大小,位置'我'持有第i個元素的版本? –
no ..更多的時候,他們會有不同的大小。取決於哪個版本是不同的(或缺失),這可能是好的,或警告的理由。 –
和項目的順序也會有所不同..我可以添加排序當然,但不能依賴該指標將是所有項目相同。 –