随着时间的推移,我们在经济和技术层面上都已经对区块链技术的特性有了更深的理解。今天,我想给大家介绍一下区块链技术的最新进展:基于块链的图形化数据库。
![](https://ip.bitcointalk.org/?u=http%3A%2F%2Fwww.btc38.com%2Fuploadfile%2F2015%2F0505%2F20150505091726188.jpg&t=665&c=TYUhl66Cmfzy5Q)
比特币引入了一种全新的数据结构,我们称之为“区块链”,类似于一个环环相扣的交易清单,每一笔交易的输入与前一笔交易的输出相串联成链。比特股意识到比特币的结构太过于僵化,可以使用某些特定操作将其抽离成一个通用数据库。比特币系统仅仅将条件交易用在纯粹的经济学意义上,而在数据库的世界,同样的场景中交易必须是一组零错误调用,或数据库保持不变的操作。
多年来,已经有很多不同类型的数据库被开发出来。目前应用最广的数据库称作“关系数据库”,使用SQL(结构化查询语言)作为通用接口。最近,非关系统型数据库(NoSQL)开始流行起来,NoSQL包含了种类繁多的数据库技术,以应对不断增长的用户、对象和产品所带来的海量数据,对此类数据的高频访问以及性能和数据处理需求。另一方面,关系性数据库的设计并不足以应付现代应用程序的大规模和高灵活性需求,也没能利用现今的廉价存储及有效处理能力取得竞争优势。
但是,大多数通用数据库结构并不适用于基于区块链的数据库,后者的目标是尽可能高的灵活度,我们不能提前预知人们想要将什么数据存储到区块链上,或者应该如何进行索引,因此,我们需要一个新的方案。我打算直接从Neo4j上复制一个关于“图形化数据库”的说明。
图形化数据库简介
我们生活在一个互联的世界里,在这里没有孤立的信息片段,相反,丰富的互联领域充斥着我们的生活。只有能够包含“关系”并将其作为数据结构核心特色的数据库,才能有效地存储、运行,以及高效地查询连接。其他数据库在查询时为计算连接付出高额代价;而图形化数据库将连接作为最高等级优先存储对象,随时可用于任何“join-like”导向运算。处理这些现有的连接是一种高效的定时运算,可保证每秒上百万的连接数据处理速率。
总数据集大小的独立,使得图形数据库擅长管理高度关联的数据及复杂的查询指令。仅需确定模式并选择一组起始点,图形数据库即可在初始点周边探索更广阔的范围——从上百万的节点及关系中搜集和汇总信息——直接跳过数十亿计的其他无关信息。
属性图形模型
如果经常和一个对象模型或实体关系图打交道,你会对标记属性图模型非常熟悉。属性图形包含相连的实体(节点),这些实体能够控制任意类型和数量的资产(键值对)。节点能够用从0开始的大量标签来标记,以区分其在上述域中的不同角色。除了情境节点和关系属性,标签也可用于附加元数据(比如索引或约束信息)给节点。
关系定义了两个节点间的定向、具名的语义连接。一个关系通常都具有固定的方向、类型,一个起始节点和一个端节点;和节点一样,关系能够拥有任意属性。大多数情况下,关系的特性是可量化的,比如重量、距离、等级、时间间隔或者强度。由于关系可被有效存储,在两个节点间能够有任意数量或类型的关系而不影响性能。需要注意的是,虽然是定向的,但关系通常可以双向指引。
在图形数据库里,只有一个不变的准则:“拒绝坏链”。一个关系通常都有一个起始节点及一个端节点,因此不能在未删除其相关关系的条件下单独删除一个节点。也可以假设,一个已存在的关系不能指向一个不存在的端节点。
比特股图形数据库
我们打算运用图形数据库的基本思路,应用一些相关的简单限制。图形中的每个节点(顶点/对象)均通过两个多重签名权限所管理,一个用于升级,一个用于转移。图形中每个边界都隶属于它的源节点。
边界本身就是对象,这意味着你能从一个节点到边界,或从边界到边界来构建一个新的边界。每个对象用户都可以以JSON对象的形式存储任意数据。
这意味着,比特股网络就成了一个认证规则简单的通用图形数据库,数据库的释义完全依赖于客户端应用程序。这提供了极高的灵活度,让区块链保持简单。以下这些都是可以应用图形对象的例子:
相关帖子的论坛
信任网络
脸书
身份管理
组织成员
投票
域名
尽管所有这些东西都相当有趣,但其实这仅仅只是冰山一角,我会继续探索对象图的一些特殊应用。这是传统应用的图示:
账户、资产和市场是第一类对象
比特股数据库中的每个单项都会有一个有效对象ID,能够通过图形API接入。这意味着你的用户账号和资产能够在更大范围的图形中成为节点,从而成为信任网络的基础。
基础脚本
对象图形将成为未来比特股脚本环境的基础。每个脚本语言有一个数据模型,同时这个数据模型会对脚本效能产生戏剧化的影响。
以太坊采用了一个非常简单的数据库,单键值存储。键值存储是所有数据库的一个基础建设区块,并且图灵完备。通过采用一个更高级别的数据表示我们能够大大加速很多操作,而使用单键值存储则代价高昂,这种区别就像使用汇编语言编程和一个更高层次的语言(如Java)脚本编程一样。我们能够优化脚本环境运行的图形数据库,却无法直接优化键值存储。换句话说,以太坊将将在他们的键值原语之上开发出一个脚本环境,迫使开发者在此基础上构建图形数据库,这就意味着此图形数据库只能被解释执行,而不是全面优化和编译。
通过在对象图形上构建脚本环境,我们能够使用更优化的数据结构来执行查询,同时降低脚本环境自身的运算数。这让开发人员能更简单的思考数据及关系,而无需考虑低级原语。
现状
比特股的库已经支持绝大多数创建对象和对象间链接边际需执行的必要操作。在并入比特股网络之前的几周时间里,我们会将这些特性作为Dev(测试网络)的一部分进行测试。如果你有关于比特股对象图形的有趣的点子或应用,请在论坛上跟我们一起分享。
翻译:很多比特
校对:callmeluc
原文链接:
http://bytemaster.bitshares.org/article/2014/12/24/Introducing-BitShares-Object-Graph/作者:DanielLarimer
文章:
http://www.bts.hk/bitshares-object-graph.html