0
我正在構建一個倒排索引算法。我將以散列表的形式將索引存儲在文件或數據庫中。更新索引涉及 1.從文件或數據庫將其加載到內存中 2.將其轉換爲對象 3.對對象進行更改 4.將對象轉換爲字符串 5.將其保存在文件中或數據庫在倒排索引算法中避免競態條件的技巧
現在,有多個數據源將數據提供給索引。如果有兩個或兩個以上的數據源同時輸入數據,則很有可能會遇到競爭情況。
什麼是最好的已知技術來避免這種情況?
我正在構建一個倒排索引算法。我將以散列表的形式將索引存儲在文件或數據庫中。更新索引涉及 1.從文件或數據庫將其加載到內存中 2.將其轉換爲對象 3.對對象進行更改 4.將對象轉換爲字符串 5.將其保存在文件中或數據庫在倒排索引算法中避免競態條件的技巧
現在,有多個數據源將數據提供給索引。如果有兩個或兩個以上的數據源同時輸入數據,則很有可能會遇到競爭情況。
什麼是最好的已知技術來避免這種情況?
通常情況下,您不會將整個索引加載到內存中,然後將整個索引寫回磁盤。
一種選擇是將索引主要放在磁盤上,然後直接修改磁盤上的文件。爲了避免競爭條件,你使用某種形式的鎖。如果更新很少,您可以全局鎖定文件進行寫入。如果你想有更好的粒度鎖定,那麼你需要對磁盤上的索引結構做出更多的決定。
另一種選擇是將索引放在內存中,並在磁盤上維護一個「複製」用於恢復目的。在這種情況下,每個更新索引的人最終都會操縱相同的共享內存中索引,並且訪問該索引將受全局或精細操作系統級鎖的保護。
感謝您的洞察力。將索引以完全標準化的形式存儲在數據庫中會是一個好主意嗎?或者與原始文件相比,這會消耗太多空間和時間? –
請參閱[這個問題](http://stackoverflow.com/questions/2451919/what-is-the-best-way-to-build-inverted-index) –