2011-06-28 23 views
3

假設我們有一個相互連接的大型數據庫圖,這是一個巨大的分佈式數據庫。圖上的任何節點都可以通過遞歸地查詢其鄰居來查詢整個數據庫,這會從它們的鄰居獲得結果,並將組合結果傳遞迴查詢路徑。這個分佈式數據庫數據位置優化算法的名稱?

此外,假設如果節點自己的數據庫包含足夠好的結果,就有能力停止遞歸,以便在附近有相當不錯的結果時不必查詢整個網絡。這使得我要說的是相關的。

將返回的數據傳遞給發起查詢的節點每進行一次查詢後又有什麼意義?也就是說,查詢節點查詢其鄰居並獲取X,查詢自己並獲取Y,將X + Y傳遞迴查詢它的節點,將X存儲在其數據庫中,並從其數據庫中刪除Y.這最終會不會導致分佈式數據庫在其節點間的數據分佈相對於查詢期間將被諮詢的節點數量大體上是最佳的?

這個技術有名嗎?

+1

只有當你有一個「數據局部性」的概念 - 也就是說,源自給定節點集合的查詢需要給定類型的數據時(例如,如果您的巨型數據庫存儲HTML頁面,查詢源自來自意大利需要意大利頁面)。基本上,你正試圖做一種「分佈式緩存」的形式。我不明白的是在所有這些之後Y會被存儲在哪裏。你應該將Y傳遞給某個地方進行存儲,而不是將其刪除...... – akappa

+0

我不明白爲什麼節點會刪除自己的Y信息? – Tobu

+0

Y是傳遞給存儲它的查詢節點的結果的一部分。 – mwhite

回答

2

這個話題在網格計算中出現了很多;你想做一個谷歌學者搜索像data grid replica placement。如果訪問中存在大量的時間局部性(如果一個節點需要一些數據,在不久的將來它會需要它)並且數據是大部分讀取的,它就會運行良好。正如yi_H指出的那樣,如果數據有很多大的修改,「緩存」(副本)一致性就成了一個大問題。

1

有這樣的技術,但你必須知道,一旦你「緩存」了一個結果,你必須更新它,如果數據改變的時候......這意味着你必須存儲緩存它的數據,或者通知大家。實現這樣的事情需要很多的協調,這會損害性能......並不像聽起來那麼容易。您還可以放寬數據庫爲您提供的約束,然後在應用程序中注意可能會得到不同步的緩存結果(並且如果需要請求非緩存版本)。