當然,出現問題的原因是非常複雜的,其中很重要的一個原因就是單個資料庫表過熱,我們可以舉個例子來理解這個概念,比如超市購物結算時,結算臺的數量是有限的,這個時候人多就要排隊,就需要等待。資料庫表就像超市的結算臺,當業務高峰來臨的時候,它就成為緊俏的資源,當訪問表需要排隊的時候,系統的就會緩慢。我們稱這個現象為「熱表」。
在超市中,管理員可以大喊一嗓子說,大家排一下隊,慢慢來。但是在IT系統中,情況完全不同,訪問網頁或者打卡App多等待2秒,使用者就會不耐煩,甚至直接離開,而解決這個問題的一個很重要的辦法,就是分割槽表。
所謂分片技術,其實就是要把資料放到不同的資料庫和主機上。但是分片也帶來了一些新的問題,我們首先要考慮的就是分片策略,也就是說哪些資料該放哪一個DB上,總要有個規矩。
典型的分片策略,有這麼幾種:
·基於 使用者id 的區間分片,例將使用者 id 為 1-10W 的資料存放在 A 資料庫,10W-20W 的資料存放在 B 資料庫。
·基於 id 的 Hash 分片,例如將 id%2=0 的資料存放在 A 資料庫,id%2=1 的資料放在 B 資料庫。
·基於時間的區間分片,對於有一些業務場景,比如銀行賬單查詢,新資料被操作的機率更大,舊資料幾乎不會被操作,可以透過資料的插入時間進行分片(也稱為冷熱分離)。所以銀行的App裡面要查詢超過3個月的資料,總會讓使用者多操作幾下,想查詢超過1年的,幾乎不太可能,那個分割槽的資料已經變成冷資料刻在磁帶上放到倉庫了。
·基於檢索表分片,建立一張檢索表儲存 id 與所在資料庫節點的對應關係,就像是書的目錄一樣。
·基於地理位置分片,像大眾點評、滴滴打車之類的軟體,由於不同城市的資料不需要互通,可以按照城市分片,將不同城市的資料存放在不同資料庫中,這樣做的一個優點是可以將資料庫伺服器部署到離對應城市最近的節點上,還可以提高訪問速度。
總而言之,分割槽想要用的好,需要系統架構師根據業務特點來最佳化分割槽策略。也可以理解,為什麼這幾年系統架構師的收入,迅速在增長。
區塊鏈的分片技術
下面,我們來介紹一下區塊鏈的分片技術,我們拿以太坊為例,V神采用的是二次分片策略。其實,這個是很容易理解的東西,假設一個節點能處理N個交易,那麼主鏈能追蹤N個分片,每個分片都能處理N個交易,所以系統一共能處理N的2次方個交易。
在二次分片中,以太坊將鏈分成主鏈和分片兩個部分,當交易沒有涉及跨片時,則在所屬分片區域自行驗證完成。這樣的設計主鏈只記錄少量資訊,從而實現主鏈記錄N個分片的資訊,每個分片可以實現實現N個交易的管理。
但是問題是:分片之後,每個分片各自管理自己的交易,速度得到提升,但是如果要給好友轉賬,而很不幸被分到了不同的鏈上,這個轉賬該如何實現呢?在以太坊中,V神設計了收據的概念,來解決這個問題,如下圖所示。
兩個分片中。這樣就可以完成全域性交易的資訊收集。因為大部分交易不需要透過主鏈完成,同時主鏈只儲存少量資訊,所以這樣的設計即保證跨片交易可以順利完成,又能大大提升以太坊的整體效能。
更多區塊鏈資訊:http://www.qukuaiwang.com.cn/news