分片的基礎
通常在資料庫世界的擴充套件中,一致雜湊是確定性地將任何資料分配給分片的主要概念之一,分片是資料最終儲存的“位置”。 現在說您要在系統中使用16個分片,然後只需執行Hash(data)mod 16(取一個數字,然後減去16,然後取剩下的值,也稱為模數)即可識別要儲存資訊的位置。 為了知道在哪裡找到它,您只需找到一個與hash(IP)mod 16 == Hash(data)mod 16匹配的節點/機器/伺服器。透過這種方式,您可以以一種簡單的確定性方式知道在哪裡可以找到您的資料 。
當存在未知數量的節點想要將資料劃分為越來越多的分片時,這種方法就會遇到困難。換句話說,就是進行動態分片。動態確定您的分片會導致網路的所謂重新分配,因為它需要向周圍不斷髮送資料。因此,像Radix之類的DLT解決方案選擇了非常大量的分片,並認為分片空間永遠不會用完。因此,現在我們只是使用非常大的數量進行調整,但問題是將沒有足夠的裝置像只能使用16個分片那樣將所有分片空間1對1填充。這種情況由所謂的雜湊環和分散式雜湊表處理,因此我們可以在不瞭解整個網路拓撲的情況下發現鄰居的資料。
現在這可以很好地與鍵值對配合使用,但並非所有資料都是唯一的,也並非只有鍵值。大多數實際資料,包括分散式分類帳,都是某種形式的連結資料。它是環境的,僅表示環境的某種內容,例如地址的餘額是所有事務向其傳送內容的結果。僅使用分散式鍵值儲存,它將不得不在分散式雜湊表和一致的雜湊環中從一個位置彈出到另一個位置,以檢索所有這些分組的和相關的資料。如果每個人都需要一直執行此操作,那麼這將阻塞所有網路頻寬,然後丟失整個分片點。
我要在這裡嘗試的是分散式連結/相關資料結構的一些基本要求。
1. 根據我們要尋找的資料,我們必須確定它的“位置”2. 給定一個位置,我們必須知道什麼網路地址對映到它。3. 我們希望相關資料與其關係相對接近。
為了分片DAG但使其相關資料彼此靠近,我們應該讓頂點包含位置資訊,並且僅包含其“鄰近度”內的參考(邊)頂點。這種方法的問題在於,如果該空間是虛構的,那麼用大量資料填充單個位置就變得很瑣碎(例如一致雜湊中的分片)。這是因為沒有動力去玩得好,並且因為“位置”是任意選擇的,不再是其自身的功能(雜湊)。
為了仍然讓頂點選擇它們的附著位置,我們需要某種方式限制誰可以這樣做。
基於地理位置的分片和網路
現在已經建立了一些環境,讓我們直接深入實際的想法。
頂點需要最少的分片設定,還有多個欄位是其他目的所必需的,但都被忽略了,例如時間戳。
頂點結構:
Vertex:{id:Hash(fields),location:"gbsuv7ztr",vertex_ref_1:"gbsuv7ztq-v1ID",vertex_ref_2:"gbsuv7zts-v2ID",nodeID:"gbsuv7ztr-nodeID",nodeSig:"0xfff88...",nonce:999,payload:{"whateveryourapplicationis"}}
Location定義為Geohash,即對經緯度GPS空間中小區域的簡潔描述,因此它不是固定Location ,而是小區域的描述。只有兩個邊緣,類似於IOTA的分支和主幹。但是這些邊的識別符號包括其參考的頂點的Location 。
網路節點
此設定中的節點需要標識自己。 NodeID至少由其公鑰和Geohash組成,後者可以自由選擇,但不能隨意選擇。該節點的Geohash很重要!
節點可以透過釋出一個宣告其NodeID的頂點(它是預期的分片範圍)來開始附加。分片範圍將包含NodeID的潛在鄰居,並且由相對於NodeID自己宣告的geohash的表面函式(半徑/正方形/多邊形等)組成。
僅透過使用基於等待時間的多邊/三角剖分對節點的位置進行嚴格測試的其他節點,才可以新增此頂點,如何進行此操作確實需要另一篇文章,但以前對此主題進行過研究。
由於環境條件的限制,與自己的節點相比,可以生成節點位置的置信區域。 一個NodeID的geohash必須位於此置信區域內,其他節點才能接受它。為了保持誠實,這需要繼續測試節點。
隨著網路吞吐量的增加和更多節點加入網路,此方法的精度會提高。這種方法的結果是,它將激勵強大的節點分佈並防止Cloudproviders中的節點叢集。
節點覆蓋的表面積大小將取決於網路的吞吐量及其機器的功能。當頂點吞吐量增加時,將需要加入更多的節點,而現有節點將減少其表面積。
位置限制
一個頂點引用了另外兩個頂點。但是為了實現分片,對此還有進一步的限制。 首先:不允許一個節點釋出一個頂點,該頂點的位置超出其自身表面積,該最大值可以從DAG的吞吐量和鄰近節點得出。
除了一個節點只能在其自宣告和經過鄰居測試的地理位置內釋出頂點外,頂點本身還必鬚髮布位於要引用的頂點所定義的曲面內的位置。如果頂點的給定位置不可用,則節點將需要釋出工作量增加的出界頂點,以便網路可以開始包含這些頂點。
透過結合具有可測試的相對位置的NodeID以及對頂點的一些額外限制,我們為每個節點建立了一個分片,可以根據地理位置和資源確定自己的吞吐量。
推導式金融分類帳
如前所述,本文並非要解釋金融分類賬起作用的其他共識機制。但是請務必注意,如果您具有位置感知的資料結構,則位於其上的財務層也必須是位置感知的。意味著金錢獲得了分配給它的位置,幾乎就像真實現金一樣;
結論
總而言之,這通常允許當前DLT系統沒有的有趣屬性。
網路拆分不是問題,僅在拆分的實際物理位置可能存在問題。
它允許地理感知共識機制。 就像代幣一樣,透過共識機制只能在特定城市或地區使用。因此,物理地理圍欄的一般概念。
這也將允許具有真正的水平可伸縮性。更多的機器=更多的吞吐量,就像真實物件一樣,向資料新增物理位置。