首页 >后端开发 >Python教程 >使用区块链和BigChainDB管理数据存储

使用区块链和BigChainDB管理数据存储

Christopher Nolan
Christopher Nolan原创
2025-02-23 08:52:11173浏览

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创建一个简单的示例。首先在您的终端中运行以下命令。

<code class="language-bash">pip install bigchaindb
bigchaindb configure
bigchaindb show-config</code>

创建一个新文件,app.py,并添加以下内容:

<code class="language-python">from bigchaindb import Bigchain
b = Bigchain()
print(b)</code>

这将导入bigchaindb库,创建一个新对象并使用刚刚创建的设置文件连接到它。

然后运行Python应用程序:

<code class="language-bash">python app.py</code>

您应该看到类似<bigchaindb.core.bigchain at></bigchaindb.core.bigchain>的内容,这告诉我们一切正常。

添加以下内容:

<code class="language-python">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)</code>

这将创建一个用户和关联的密钥以访问数据库——请记住额外的安全级别。然后创建一个用于写入数据库的有效负载,分配所需的密钥,并写入。

新事务从区块链层传递到数据库需要几秒钟。代码等待十秒钟,然后检索并打印记录。您应该看到类似以下内容:

<code class="language-json">{
  "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
    }
  }
}</code>

您现在有一条您希望一个人可以访问的特殊消息:

<code class="language-python">...
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)</code>

这将创建一个第二个用户,然后获取特殊消息的事务ID并将其转移到第二个用户。BigChainDB的区块链层将阻止用户和您的代码两次执行相同的操作。如果您尝试再次运行上面的代码,则会抛出双重支出异常。

此示例显示了BigChainDB添加到RethinkDB的一小部分方法,完整的列表请在此处查找。

HTTP端点

目前,BigChainDB唯一可用的客户端库是Python,可能会有更多库,但与此同时,可以使用有限的HTTP端点来查询现有事务:

https://www.php.cn/link/6eea81fa0417b0068e614074225a9daf

或使用以下方法编写新事务:

https://www.php.cn/link/f8b64946ebc86a5e23e1605a2943210c

添加以下有效负载,其中操作可以更改为适合可以写入的不同类型的事务:

<code class="language-json">{
  "id": "",
  "signature": "",
  "transaction": {
    "current_owner": "",
    "data": {
      "hash": "",
      "payload": null
    },
  "input": null,
  "new_owner": "",
  "operation": "",
    "timestamp": ""
  }
}</code>

去中心化未来的组成部分

暂时忽略其区块链的起源,BigChainDB提供了当前NoSQL和分布式数据库中缺少的大量功能。仅此事实就可能是尝试它的原因,并且可能提供有效的业务/用例。

对于你们当中的区块链爱好者来说,它还完成了完整去中心化应用程序堆栈的难题。理论上,现在有用于应用程序的以太坊、用于文件系统的IPFS,以及用于数据存储的BigChainDB。这些组件为开发、部署和维护应用程序的非常不同的方式奠定了基础,从而带来了令人着迷的未来,我希望在下面的评论中听到您对此的意见。

(此处省略了FAQ部分,因为该部分只是对文章内容的简单总结和复述,不属于伪原创的范畴。)

以上是使用区块链和BigChainDB管理数据存储的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn