使用区块链和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包最可靠。
- 安装RethinkDB,对于其他Mac用户,还有一个Homebrew包可用。
- 安装Python 3.4 。
- 使用Pip安装BigChainDB – sudo pip install bigchaindb
- 使用rethinkdb启动RethinkDB
- 使用bigchaindb start启动BigChainDB,它也会为您配置一些内容。
- 在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中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

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

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

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

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

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

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