BigchainDB,区块链与数据存储

自从我写这篇文章以来,BigchainDB和区块链领域已经发生了很大的变化,所以现在似乎是重新审视和更新区块链对传统计算领域更基本部分之一的影响的时候了:数据存储。

BigchainDB最初是作为替代Ascribe数字艺术品跟踪项目中比特币区块链的技术而构建的,它扩展为废弃IPDB的一个组件,现在作为Ocean protocol的存储层。

这种使用的变化导致了BigchainDB的基础和实现的变化,RethinkDB的关闭也迫使团队将存储引擎切换到坚固的MongoDB。数据库顶部的区块链层提供了有助于保证数据库更改的交易支持,并增加了额外的控制和安全性,但已经成熟,BigchainDB在2018年设置为2.0。

所有这些变化现在意味着BigchainDB鼓励你使用他们的公共网络而不是部署你的实例。这种方法在某种程度上与传统的分布式数据库实践相悖,但在过去几年中更适合基于区块链的项目的发展,有助于BigchainDB通过其平台(使用ICO或SaaS模型)货币化,这是一个有趣的变化。时间将告诉客户是否愿意将数据存储在公共网络中,但是通过访问token通证确保安全性和隐私性,它在概念上与使用云托管数据库并不太相似。

如果你愿意,你仍然可以安装自己的BigchainDB实例,但我觉得公司会越来越多地鼓励你不要这样做。

无论你选择哪种方式,都可以使用官方的Python,JavaScript或社区驱动程序。例如,使用JavaScript,使用npm install bigchaindb-driver安装软件包,使用适当的写入程序和阅读器密钥创建连接并将资源写入和读取数据库。

你可以在此处阅读驱动程序的完整文档和数据库,但下面的示例为作者创建这篇文章的一个福利,然后将其分享给读者:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
const driver = require('bigchaindb-driver')
const author = new driver.Ed25519Keypair()
const assignee = new driver.Ed25519Keypair()

console.log('Author: ', author.publicKey)
console.log('Assignee: ', assignee.publicKey)

const assetdata = {
'article': {
'title': 'Blockchain DBs',
'body': 'Article body',
}
}

const txCreateAuthorSimple = driver.Transaction.makeCreateTransaction(
assetdata,
[driver.Transaction.makeOutput(
driver.Transaction.makeEd25519Condition(author.publicKey))
],
author.publicKey
)

const txCreateAuthorSimpleSigned = driver.Transaction.signTransaction(txCreateAuthorSimple, author.privateKey)

let conn = new driver.Connection('https://test.bigchaindb.com/api/v1/', {
app_id: '<APP_ID>',
app_key: '<APP_KEY>'
})

conn.postTransactionCommit(txCreateAuthorSimpleSigned)
.then(retrievedTx => console.log('Transaction', retrievedTx.id, 'successfully posted.'))

.then(() => {
const txTransferAssignee = driver.Transaction.makeTransferTransaction(
[{tx: txCreateAuthorSimpleSigned, output_index: 0}],
[driver.Transaction.makeOutput(driver.Transaction.makeEd25519Condition(assignee.publicKey))],
{price: '100 dollars'}
)

let txTransferAssigneeSigned = driver.Transaction.signTransaction(txTransferAssignee, author.privateKey)
console.log('Posting signed transaction: ', txTransferAssigneeSigned)

return conn.postTransactionCommit(txTransferAssigneeSigned)
})
.then(res => {
console.log('Response from BDB server:', res)
return res.id
})
.then(tx => {
console.log('Is Assignee the owner?', tx['outputs'][0]['public_keys'][0] == assignee.publicKey)
console.log('Was Author the previous owner?', tx['inputs'][0]['owners_before'][0] == author.publicKey)
})
// Search for asset based on the serial number of the bicycle
.then(() => conn.searchAssets('Blockchain DBs'))
.then(assets => console.log('Found assets with title:', assets))

其他替代品

BigchainDB不再是城里唯一的基于区块链的数据库,具体取决于你的定义以及你想要实现的目标。

FlureeDB包含一个带有区块链图层的图形式数据库,当你考虑区块链的本质时,它会有所帮助。由于图形基础,它与GraphQL和React很好地集成。它仍在积极开发中,遵循熟悉的数据库资金模型,社区版本有限,以及额外的容量,安全性和对高级用户的支持。FlureeDB参与区块链技术似乎使用通证token作为货币的替代品和某种形式的共识机制。该项目不是开源项目,因此很难说清楚它是什么。

从记忆时间来看,OrbitDB的存在时间与BigchainDB一样长,但设计用于更简单的应用程序需求。虽然它使用IPFS进行存储(有些人可能会声称是各种类型的数据库),但它并不声称是“区块链数据库”,而是去中心化应用程序的选择。

TiesDB在其网站上提出了许多大胆的主张,但是关于它如何实现它们的细节很少,并且有关于如何运行数据库的稀疏存储库和稀疏文档,很难确定它是否能够提供。在存储库自述文件中有一些白皮书可供你筛选,但它们仍主要涵盖理论而非实践。有趣的是,它还允许你删除数据,这些数据虽然是传统数据库的基本部分,但却与区块链理想相矛盾。这个决定没有错误或正确;一些开发商必须考虑妥协,将区块链技术推向主流。

Swarm是一个以太坊组件,它是去中心化应用程序(Dapps)的默认存储机制。它没有提供这种无缝的入门方式,但是如果你已经在研究以太坊的其他组件,那么请阅读文档以获取更多详细信息。

Filecoin做了不同的事情。它提供了一种机制,用于跟踪数据中心和Internet周围的备用存储块之间的交易。它允许你使用传统存储,但通过区块链层,用户可以竞标你提供的空间并跟踪其使用情况。

这篇文章中更详细地描述了这两种技术。

去中心化未来的一部分

BigchainDB暂时忽略了Blockchain遗产,提供了当前NoSQL和分布式数据库所缺少的功能。仅这一事实正是可能是尝试它的原因,并可能提供有效的业务/用例。

对于你们中的区块链爱好者来说,BigchainDB和其他替代方案也可以完成去中心化应用程序堆栈的难题——使用以太网作为应用程序,IPFS作为文件系统,BigchainDB用于数据存储。这些部分适用于开发,部署和维护应用程序的不同方式,从而形成一个迷人的未来,我很乐意听取你的意见。

======================================================================

分享一些以太坊、EOS、比特币等区块链相关的交互式在线编程实战教程:

  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • ERC721以太坊通证实战,课程以一个数字艺术品创作与分享DApp的实战开发为主线,深入讲解以太坊非同质化通证的概念、标准与开发方案。内容包含ERC-721标准的自主实现,讲解OpenZeppelin合约代码库二次开发,实战项目采用Truffle,IPFS,实现了通证以及去中心化的通证交易所。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • EOS教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • 深入浅出玩转EOS钱包开发,本课程以手机EOS钱包的完整开发过程为主线,深入学习EOS区块链应用开发,课程内容即涵盖账户、计算资源、智能合约、动作与交易等EOS区块链的核心概念,同时也讲解如何使用eosjs和eosjs-ecc开发包访问EOS区块链,以及如何在React前端应用中集成对EOS区块链的支持。课程内容深入浅出,非常适合前端工程师深入学习EOS区块链应用开发。
  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
  • c#比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在C#代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是C#工程师不可多得的比特币开发学习课程。
  • tendermint区块链开发详解,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。

汇智网原创翻译,转载请标明出处。这里是BigchainDB,区块链与数据存储