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

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></bigchaindb.core.bigchain>的內容,這告訴我們一切正常。

添加以下內容:

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
Python中的合併列表:選擇正確的方法Python中的合併列表:選擇正確的方法May 14, 2025 am 12:11 AM

Tomergelistsinpython,YouCanusethe操作員,estextMethod,ListComprehension,Oritertools

如何在Python 3中加入兩個列表?如何在Python 3中加入兩個列表?May 14, 2025 am 12:09 AM

在Python3中,可以通過多種方法連接兩個列表:1)使用 運算符,適用於小列表,但對大列表效率低;2)使用extend方法,適用於大列表,內存效率高,但會修改原列表;3)使用*運算符,適用於合併多個列表,不修改原列表;4)使用itertools.chain,適用於大數據集,內存效率高。

Python串聯列表字符串Python串聯列表字符串May 14, 2025 am 12:08 AM

使用join()方法是Python中從列表連接字符串最有效的方法。 1)使用join()方法高效且易讀。 2)循環使用 運算符對大列表效率低。 3)列表推導式與join()結合適用於需要轉換的場景。 4)reduce()方法適用於其他類型歸約,但對字符串連接效率低。完整句子結束。

Python執行,那是什麼?Python執行,那是什麼?May 14, 2025 am 12:06 AM

pythonexecutionistheprocessoftransformingpypythoncodeintoExecutablestructions.1)InternterPreterReadSthecode,ConvertingTingitIntObyTecode,whepythonvirtualmachine(pvm)theglobalinterpreterpreterpreterpreterlock(gil)the thepythonvirtualmachine(pvm)

Python:關鍵功能是什麼Python:關鍵功能是什麼May 14, 2025 am 12:02 AM

Python的關鍵特性包括:1.語法簡潔易懂,適合初學者;2.動態類型系統,提高開發速度;3.豐富的標準庫,支持多種任務;4.強大的社區和生態系統,提供廣泛支持;5.解釋性,適合腳本和快速原型開發;6.多範式支持,適用於各種編程風格。

Python:編譯器還是解釋器?Python:編譯器還是解釋器?May 13, 2025 am 12:10 AM

Python是解釋型語言,但也包含編譯過程。 1)Python代碼先編譯成字節碼。 2)字節碼由Python虛擬機解釋執行。 3)這種混合機制使Python既靈活又高效,但執行速度不如完全編譯型語言。

python用於循環與循環時:何時使用哪個?python用於循環與循環時:何時使用哪個?May 13, 2025 am 12:07 AM

UseeAforloopWheniteratingOveraseQuenceOrforAspecificnumberoftimes; useAwhiLeLoopWhenconTinuingUntilAcIntiment.forloopsareIdealForkNownsences,而WhileLeleLeleLeleLeleLoopSituationSituationsItuationsItuationSuationSituationswithUndEtermentersitations。

Python循環:最常見的錯誤Python循環:最常見的錯誤May 13, 2025 am 12:07 AM

pythonloopscanleadtoerrorslikeinfiniteloops,modifyingListsDuringteritation,逐個偏置,零indexingissues,andnestedloopineflinefficiencies

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。