對於區塊鏈是分布式資料庫的說法,有疑惑,區塊鏈不支援常規資料庫的檢索的吧?

時間 2021-05-06 13:17:00

1樓:auxten

Bitcoin 只是乙個賬本,算不上是資料庫,如果強行說 Bitcoin 是資料庫,那 .csv 就可以算是結構化資料庫了。

2樓:dgon

首先樓主你的理解是對的,區塊鏈本身確實不支援你說的那種常規的資料庫檢索。

但是,如果你想長期當節點的話(比如礦池主),可以把前面鏈裡的內容自己轉化成常規資料庫啊。轉化完成後記錄好截止區塊,再有新區塊出來只用轉化新的累加進自己的庫里就行了嘛。就算發生分叉鏈跳轉,向前恢復幾個塊就行了。

那麼,為什麼不能用常規資料庫取代前面亢餘的交易資料呢?因為節點間的互不信任,去中心化嘛,沒有節點願意直接相信別的節點轉化好的常規資料庫。雖然轉化完的資料庫肯定是一樣的,但自己不轉一遍不可能放心啊。

3樓:

blockchain目前只支援CR, Create Read。

在檢索方面可以用其他技術比如支援SQL的資料庫來錄入和優化檢索索引。

4樓:yylluu

正如有的答案提到的,對乙個區塊鏈的全結點而言,區塊鏈提供了「資料庫」的操作日誌。通過這一日誌,全結點可以毫無懸念地在本地恢復資料庫的當前狀態。本質是因為通過把乙個無歧義的日誌複製到各個結點,從而解決了狀態機複製問題(state machine replication)。

假設有乙個資料庫,它是可以抽象為操作驅動的狀態機。那麼區塊鏈能夠把這個狀態機複製到各個全結點,手段是把驅動狀態機的所有操作按順序記錄在區塊鏈中。隨著狀態機的操作日誌被每個結點複製到本地,狀態機也複製到了全網。

在這一過程中,能夠保證一致性(consistency)和活性(liveness)。1. 一致性保證所有誠實的(全)結點讀取到的資料庫擁有同乙個的view;2.

活性保證所有結點對資料庫進行操作都會被執行。直白的說法就是:(全)結點既可以執行「寫」操作,也可以執行「讀」操作。

但不是說沒有難點。一大問題在於(輕)結點,所謂的輕結點無法同步整個區塊鏈的日誌檔案,更無法還原出「資料庫」的狀態。也就是說:

輕結點很難享受到一致性,雖然它們仍然可以享受活性。更直白的說法就是:輕結點能「寫」不好「讀」

針對這一問題,提出了很多方案。比如早期的SPV proof,和近期的PoPoW等等。但這些方案都有很強的侷限性,並不能直接在輕結點上實現題主所說的 select * where 操作。

主要原因也很容易理解:因為要實現select * where ,就必須要non-memebership proof,而(輕)結點只能驗證memebership proof。

舉個栗子:某區塊鏈裡面有1_000_000_000筆交易,輕結點不知道這1_000_000_000筆交易本身,只知道它們的commitment(i.e.

Merkle tree root)。memebership proof的目的是向(輕)結點證明某一筆特殊的交易(e.g.

某乙個PK_1簽名的交易)在這1_000_000_000筆交易之中,這是相對容易的,可以有Merkle tree proof直接實現。但non-memebership proof的目的是向(輕)結點證明某一筆特殊的交易(e.g.

某乙個PK_1簽名的交易)不在這1_000_000_000筆交易之中,這是很難的,除了向輕結點傳送所有的1_000_000_000筆交易之外,沒有很好的變法。但一旦把所有的1_000_000_000筆交易都發給輕結點,就相當於迫使它變成了(全)結點。

總結:對於(全)結點而言,把區塊鏈model成資料庫是可以的;但對(輕)結點而言,依然有很多開放式的問題。

5樓:

就區塊鏈那樣的效能也可以叫資料庫?那大部分的分布式儲存都可以叫資料庫了~而且還不支援SQL.....頂多是NoSQL的資料庫

6樓:

只是一種比喻,並不是真正的資料庫。但是你也可以選擇用資料庫形式將鏈儲存。

只要你有辦法將資料持久化,不管你是用資料庫,檔案,雲儲存,還是寫紙上,刻石頭上都沒關係。

7樓:楊個毛

首先,如果有程式設計常識的話(只有SQL知識不能算會程式設計),很容易看出只要你能訪問到資料,一切你想得到的查詢*都是可以實現的,只是速度快慢難說而已。

其次,你心裡想的那個叫「關係型資料庫」。並不是所有的資料庫都是關係型資料庫。

*這句話其實不嚴謹,不過暫時假設你沒法拍腦袋想出乙個uncomputable的查詢來……

8樓:靈劍

資料庫裡最重要的是資料,而不是結構,拿到資料你可以自己組織索引之類進行查詢,無非就是費點事而已,所以能把資料可靠儲存起來就已經完成第一步了。

9樓:伍亦勤

一、區塊鏈做為普通資料庫使用的話,冗餘程度太高。因此區塊鏈中只應儲存最關鍵的資料資訊。

二、區塊鏈可以結合傳統資料庫使用。

把源資料存在傳統資料庫,把關於資料的資料(Metadata)(比如,所有權資訊,訪問許可權,交易記錄等等)儲存在區塊鏈中。

通過資料層與區塊層的分層,可以極大拓展傳統資料庫的功能。

提到分層,程式設計師們是不是躍躍欲試了呢?

同No SQL 一樣,新的資料庫出現,不是為了取代傳統資料庫,而是豐富完善人類處理資料的能力。

區塊鏈可以成為畫龍點晴的一筆,但無法成為整個龍。

三、沒有什麼資料庫比傳統資料庫更擅長增、刪、查、改,No SQL 比不上,區塊鏈也比不上。

區塊鏈的強勢點不在這些,而在於——它在不安全的網路環境下,提供分布式的、能抵抗人為攻擊的可信賴的資料服務。

歸納為三點:不安全環境,分布系系統,可信賴資料。

區塊鏈把自己善長的做好就夠了。

四至於題主中的SQL語句,要查詢同一付款位址的所有交易記錄,位元幣需要遍歷所有區塊才能找全。

但是位元幣的錢包公司(Wallet),兌換平台公司,或其他資料公司,肯定已經整理好了,在他們的資料庫中,可以一條SQL語句抓取。

這個例子也可以看出,分布式系統與中心化系統是相對的。

網際網路協議是分布式的,但網際網路服務提供商(ISP)是中心化的。

區塊鏈的核心是去中心的,但區塊鏈周邊服務可能是中心化的。

在網際網路中跳出 all or nothing 的思維侷限,你會發現更多可能。

10樓:岑凱

很多區塊鏈專案底層就是資料庫,區塊鏈只是一種資料組織形式甚至思想,實際資料儲存方式的實現很多仍然是資料庫,所以也是可以查詢的。

區塊鏈和分布式資料庫有什麼本質不同?

極客時間 簡單來說,你真的可以把區塊鏈拿來做分布式資料庫用,但它同時還可以用來做點別的。這就好比一台膝上型電腦,你可以把它當 U 盤使,存放各種檔案,扛著東奔西走 不嫌累的話 但它還可以是一台電腦,打打遊戲看看電影,不在話下。分布式資料庫,顧名思義,就是把資料庫分布式地部署在不同的機器 也可被稱作 ...

分布式資料庫,如hadoop cassandra mysql集群,主流是採用什麼儲存技術,DAS NAS還是SAN?

如果簡單的回答題主的問題,那麼答案是DAS。除了MySQL以外,其他的都是經典的分布式系統。這些分布式系統通常假定任何裝置都是不可靠的,演算法上會對資料做冗餘儲存,因此對介質本身的要求相對較低,DAS即可。MySQL相對特殊。一般而言,如果用MySQL,題主要用的是關聯式資料庫,且資料一般是比較重要...

分布式資料庫計算引擎對分布式儲存系統底座提出了哪些新的技術挑戰?

lemon wonder 我說一下HTAP情況,對於資料庫,TP主要是事務相關,一般底層儲存引擎使用行存,對於AP是分析性,對事務要求沒那麼高,一般用列存,要處理HTAP,那要做到行列混合儲存就很困難。對於儲存引擎,一種是外掛程式型,向MySQL中,SQL和儲存約定好介面,實現介面並直接使用。但是要...