首頁 > 後端開發 > Python教學 > 使用區塊鍊和BigChainDB管理數據存儲

使用區塊鍊和BigChainDB管理數據存儲

Christopher Nolan
發布: 2025-02-23 08:52:11
原創
177 人瀏覽過

Managing Data Storage with Blockchain and BigchainDB

核心要點

  • Ascribe公司利用比特幣區塊鏈記錄數字藝術品的唯一標識,並將NoSQL數據庫(RethinkDB)與區塊鏈層相結合,創建了BigchainDB。這種組合增強了控制、資產追踪和安全級別,對NoSQL數據庫用戶尤其具有吸引力。
  • BigchainDB由於其區塊鏈層,宣稱自己是完全去中心化的。它還增加了事務支持,這是NoSQL數據庫中經常缺少的功能。此支持保證在通過區塊鏈層寫入底層NoSQL數據庫時,數據庫更改已發生。
  • BigChainDB可以填補當前NoSQL和分佈式數據庫中缺失的空白,這可能提供有效的業務或用例。對於區塊鏈愛好者來說,它完成了完全去中心化應用程序堆棧的難題,可能會改變應用程序的開發、部署和維護方式。

比特幣的未來雖然目前尚不明朗,但其賴以生存的底層技術——區塊鏈——已徹底改變了許多行業和項目,並且還有更多應用即將出現。

Ascribe是一個引人注目的初創公司,它利用比特幣區塊鏈記錄數字藝術品的有限數量的唯一標識。因此,由於這種有限數量的“副本”,使它們具有可追溯性、可問責性和(希望)更高的價值。

Ascribe在使用這種方法時遇到了技術問題,這些問題主要源於比特幣區塊鏈本身。向其寫入所有內容速度慢、成本高(目前每次80美分)並且每日條目數量和寫入總容量有限。它也與典型的可擴展數據庫技術相反,添加節點不會提高性能,也沒有真正的查詢語言。這使得依賴比特幣區塊鏈的業務擴展成為一個挑戰。

但是,區塊鏈概念是一個強大的概念,過去幾年中,它的使用和合法性日益提高,甚至大型銀行也宣布正在開發受該概念啟發的技術。

Ascribe決定將兩者的優勢結合起來,採用經過驗證的NoSQL數據庫(RethinkDB)並在其上添加一個區塊鏈層,以增強控制、資產跟踪和額外的安全級別。

這種技術的組合對NoSQL數據庫用戶尤其具有吸引力,因為傳統上,很少有NoSQL數據庫支持有助於保證數據庫更改已發生的“事務”。通過通過區塊鏈層寫入底層NoSQL數據庫,BigchainDB增加了事務支持。

由於區塊鏈層,BigChainDB還聲稱自己是完全去中心化的。雖然許多分佈式NoSQL數據庫都聲稱自己是去中心化的,但通常存在偽主/從設置。

安裝BigChainDB及其依賴項

安裝BigChainDB的方法有幾種。首先我嘗試了Docker鏡像,但遇到了一些連接問題,發現Python包最可靠。

  1. 安裝RethinkDB,對於其他Mac用戶,還有一個Homebrew包可用。
  2. 安裝Python 3.4 。
  3. 使用Pip安裝BigChainDB – sudo pip install bigchaindb
  4. 使用rethinkdb啟動RethinkDB
  5. 使用bigchaindb start啟動BigChainDB,它也會為您配置一些內容。
  6. 在http://SERVER_IP:58080/打開BigChainDB(實際上是RethinkDB UI)管理UI。

簡單示例——消息分配和跟踪

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板