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

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

Feb 23, 2025 am 08:52 AM

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

热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

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何解决Linux终端中查看Python版本时遇到的权限问题? 如何解决Linux终端中查看Python版本时遇到的权限问题? Apr 01, 2025 pm 05:09 PM

Linux终端中查看Python版本时遇到权限问题的解决方法当你在Linux终端中尝试查看Python的版本时,输入python...

如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? 如何在使用 Fiddler Everywhere 进行中间人读取时避免被浏览器检测到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere进行中间人读取时如何避免被检测到当你使用FiddlerEverywhere...

在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? 在Python中如何高效地将一个DataFrame的整列复制到另一个结构不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas库时,如何在两个结构不同的DataFrame之间进行整列复制是一个常见的问题。假设我们有两个Dat...

如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? 如何在10小时内通过项目和问题驱动的方式教计算机小白编程基础? Apr 02, 2025 am 07:18 AM

如何在10小时内教计算机小白编程基础?如果你只有10个小时来教计算机小白一些编程知识,你会选择教些什么�...

Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Uvicorn是如何在没有serve_forever()的情况下持续监听HTTP请求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持续监听HTTP请求的?Uvicorn是一个基于ASGI的轻量级Web服务器,其核心功能之一便是监听HTTP请求并进�...

在Linux终端中使用python --version命令时如何解决权限问题? 在Linux终端中使用python --version命令时如何解决权限问题? Apr 02, 2025 am 06:36 AM

Linux终端中使用python...

如何绕过Investing.com的反爬虫机制获取新闻数据? 如何绕过Investing.com的反爬虫机制获取新闻数据? Apr 02, 2025 am 07:03 AM

攻克Investing.com的反爬虫策略许多人尝试爬取Investing.com(https://cn.investing.com/news/latest-news)的新闻数据时,常常�...

See all articles