核心要點
比特幣的未來雖然目前尚不明朗,但其賴以生存的底層技術——區塊鏈——已徹底改變了許多行業和項目,並且還有更多應用即將出現。
Ascribe是一個引人注目的初創公司,它利用比特幣區塊鏈記錄數字藝術品的有限數量的唯一標識。因此,由於這種有限數量的“副本”,使它們具有可追溯性、可問責性和(希望)更高的價值。
Ascribe在使用這種方法時遇到了技術問題,這些問題主要源於比特幣區塊鏈本身。向其寫入所有內容速度慢、成本高(目前每次80美分)並且每日條目數量和寫入總容量有限。它也與典型的可擴展數據庫技術相反,添加節點不會提高性能,也沒有真正的查詢語言。這使得依賴比特幣區塊鏈的業務擴展成為一個挑戰。
但是,區塊鏈概念是一個強大的概念,過去幾年中,它的使用和合法性日益提高,甚至大型銀行也宣布正在開發受該概念啟發的技術。
Ascribe決定將兩者的優勢結合起來,採用經過驗證的NoSQL數據庫(RethinkDB)並在其上添加一個區塊鏈層,以增強控制、資產跟踪和額外的安全級別。
這種技術的組合對NoSQL數據庫用戶尤其具有吸引力,因為傳統上,很少有NoSQL數據庫支持有助於保證數據庫更改已發生的“事務”。通過通過區塊鏈層寫入底層NoSQL數據庫,BigchainDB增加了事務支持。
由於區塊鏈層,BigChainDB還聲稱自己是完全去中心化的。雖然許多分佈式NoSQL數據庫都聲稱自己是去中心化的,但通常存在偽主/從設置。
安裝BigChainDB及其依賴項
安裝BigChainDB的方法有幾種。首先我嘗試了Docker鏡像,但遇到了一些連接問題,發現Python包最可靠。
簡單示例——消息分配和跟踪
BigchainDB的主要用例之一(也是Ascribe創建它的原因)是跟踪資產,因此讓我們用Python創建一個簡單的示例。首先在您的終端中運行以下命令。
pip install bigchaindb bigchaindb configure bigchaindb show-config
創建一個新文件,app.py,並添加以下內容:
from bigchaindb import Bigchain b = Bigchain() print(b)
這將導入bigchaindb庫,創建一個新對象並使用剛剛創建的設置文件連接到它。
然後運行Python應用程序:
python app.py
您應該看到類似<bigchaindb.core.bigchain at 0x...>
的內容,這告訴我們一切正常。
添加以下內容:
from bigchaindb import Bigchain import time b = Bigchain() spuser_priv, spuser_pub = b.generate_keys() print("User Created") digital_asset_payload = {'msg': 'This is my special message just for you'} tx = b.create_transaction(b.me, spuser_pub, None, 'CREATE', payload=digital_asset_payload) print("Transaction Written") tx_signed = b.sign_transaction(tx, b.me_private) b.write_transaction(tx_signed) print ("Transaction Written to BC, now waiting") time.sleep(10) tx_retrieved = b.get_transaction(tx_signed['id']) print(tx_retrieved)
這將創建一個用戶和關聯的密鑰以訪問數據庫——請記住額外的安全級別。然後創建一個用於寫入數據庫的有效負載,分配所需的密鑰,並寫入。
新事務從區塊鏈層傳遞到數據庫需要幾秒鐘。代碼等待十秒鐘,然後檢索並打印記錄。您應該看到類似以下內容:
{ "signature": '304502205...', "id": "0f442bcf4a42...", "transaction": { "timestamp": "1457104938.430521", "data": { "hash": "b32779e57...", "payload": { "msg": "This is my special message just for you" } }, "operation": "CREATE", "current_owner": "hFJKYk2...", "new_owner": "26pdiQTTx...", "input": None } } }
您現在有一條您希望一個人可以訪問的特殊消息:
... print("Now to transfer") spuser2_priv, spuser2_pub = b.generate_keys() print("Second User Created") tx_transfer = b.create_transaction(spuser_pub, spuser2_pub, tx_retrieved['id'], 'TRANSFER') print("Transfer Created") tx_transfer_signed = b.sign_transaction(tx_transfer, spuser_priv) b.write_transaction(tx_transfer_signed) print ("Transaction Written to BC, now waiting") time.sleep(15) tx_transfer_retrieved = b.get_transaction(tx_transfer_signed['id']) print("Transferred") print(tx_transfer_retrieved)
這將創建一個第二個用戶,然後獲取特殊消息的事務ID並將其轉移到第二個用戶。 BigChainDB的區塊鏈層將阻止用戶和您的代碼兩次執行相同的操作。如果您嘗試再次運行上面的代碼,則會拋出雙重支出異常。
此示例顯示了BigChainDB添加到RethinkDB的一小部分方法,完整的列表請在此處查找。
HTTP端點
目前,BigChainDB唯一可用的客戶端庫是Python,可能會有更多庫,但與此同時,可以使用有限的HTTP端點來查詢現有事務:
https://www.php.cn/link/6eea81fa0417b0068e614074225a9daf
或使用以下方法編寫新事務:
https://www.php.cn/link/f8b64946ebc86a5e23e1605a2943210c
添加以下有效負載,其中操作可以更改為適合可以寫入的不同類型的事務:
{ "id": "", "signature": "", "transaction": { "current_owner": "", "data": { "hash": "", "payload": null }, "input": null, "new_owner": "", "operation": "", "timestamp": "" } }
去中心化未來的組成部分
暫時忽略其區塊鏈的起源,BigChainDB提供了當前NoSQL和分佈式數據庫中缺少的大量功能。僅此事實就可能是嘗試它的原因,並且可能提供有效的業務/用例。
對於你們當中的區塊鏈愛好者來說,它還完成了完整去中心化應用程序堆棧的難題。理論上,現在有用於應用程序的以太坊、用於文件系統的IPFS,以及用於數據存儲的BigChainDB。這些組件為開發、部署和維護應用程序的非常不同的方式奠定了基礎,從而帶來了令人著迷的未來,我希望在下面的評論中聽到您對此的意見。
(此處省略了FAQ部分,因為該部分只是對文章內容的簡單總結和復述,不屬於偽原創的範疇。)
以上是使用區塊鍊和BigChainDB管理數據存儲的詳細內容。更多資訊請關注PHP中文網其他相關文章!