数据管理(Data Management)是指对不同类型的数据进行收集、整理、组织、存储、加工、传输、检索的各个过程,它是计算机的一个重要的应用领域。其目的之一是为了借助计算机科学地保存和管理复杂的、大量的数据,以便人们能够方便而充分地利用这些信息资源;另一目的是从大量原始的数据中抽取、推导出对人们有价值的信息,然后利用信息作为行动和决策的依据。目前企业主要使用中心化的数据库和文件系统进行数据的管理。大型的互联网公司会自己研发相关系统,例如GFS(Google File System)、SQL Server等,并部署本地化服务。中小型公司则接入AWS、阿里云等云服务,将数据管理的任务委托给了第三方。不论是本地数据库还是云数据服务,这些中心化的数据库都有一定的应用场景,并在维护着很多公司的基础数据。中心化存储是现行数据管理的主要解决方法,但当下全球范围内的中心化数据库和文件系统出现了严重的存储问题。企业往往通过中心化数据库和文件系统,存储其所有的信息和文件。但中心化存储方案通常会黑客成为攻击的标靶,或者毁于灾难之中。企业将会面临丢失其所有的数据资源而永不可找回。而企业对数据和文件的依赖,导致了前所未见的巨大风险,令人十分忧心。虽有些大企业,也提供了相关的云备份服务,只能多提供几个备份点而已,并没有解决根本问题。
相关工作
随着区块链技术和数字货币市场的发展,去中心化的数据存储、管理技术也越来越受到研究领域和投资市场的重视。
去中心化文件系统
区块链作为一个分布式的账本系统,会在每个节点都备份链上的数据,因此不适合用于存储诸如图片、视频、音频等数据量较大的文件。目前的区块链应用中,仍然将这些文件存储在开发者的服务器上。这一方式造成了应用的中心化,违背了区块链的本质意义。去中心化文件系统的项目主要包括 IPFS(InterPlanetary File System)[1]、Swarm [2]、Storj [3] 等。其基本方式都是在文件上传的时候,将文件分割为较小的数据块,然后存储到节点上。当下载文件的时候,使用文件的hash值作为地址进行请求,然后从节点上获取所有的数据块,组合成完整的文件。通过这种方式,一个文件分散地存储在网络上的各个节点中,实现了去中心化。这些技术面临一个问题,就是如何让网络中有更多的节点保持在线,提供下载服务。因此一些项目提出在去中心化文件系统的基础上加入节点激励的机制,从而让在线的节点能够获得收益。这样,去中心化文件系统成为了一种类似于云存储的服务,用户在上传和下载的过程中需要购买服务,用来奖励提供存储服务的节点。几个典型的项目包括 Filecoin [4]、Wolk [5]、Fluence [6]、Sia [7]。
去中心化数据库
去中心化文件系统实现了数据的去中心化存储功能,但是当用户上传数据后,无法进一步对数据进行修改和查找,限制了其在数据管理方面的应用。传统的中心化数据管理服务通常使用MySQL、Redis等数据库系统来实现数据的增删改查,因此在去中心领域中也需要类似的数据库服务。有一些项目在去中心化数据库的领域进行研究,包括 BigchainDB [8]、Bluzelle [9]、Ties.DB [10] 等。其基本想法都是将数据库的写入请求通过交易上传至区块链,然后再用MongoDB等引擎实现数据的索引功能并响应查找请求。使用区块链来构建去中心化数据库,有效地利用了区块链成熟的去中心化系统架构,在稳定性和安全性等方面有较大优势。这些项目当前都在起步阶段,在具体的实现成熟之前,使用智能合约作为数据库服务也是一种可行的替代方案。部分项目基于Ethereum+IPFS来搭建自己的应用,使用Solidity编写的智能合约来进行数据的管理。Solidity支持的数据结构中,包含常见的List、Map、Struct等类型,这对于常见数据管理场景已经足够适用。这些项目在 [11] 中有充分的列举。
系统描述
去中心化系统的实现方案各种各样,给开发者带来了较高的掌握成本。本文将设计一个通用库,用于连接底层的去中心化系统和上层的DApp应用,实现多种去中心化系统的CRUD功能。开发者通过这个库可以快速构建自己的数据管理应用,而不必关心底层的技术实现。同时,基于这一通用库可以搭建一套云服务,提供多种去中心化系统的在线CRUD接口,省去了开发者部署和维护去中心化系统的成本。以区块链为代表的去中心化技术为数据管理提供了一类新的解决方法。数字加密和节点共识机制的引入,保证了数据的隐私、安全和不可篡改。由于数据在网络中存了很多份,就不用担心单个节点故障带来的数据丢失,提高了安全性和可靠性。加密和分割技术则保证了数据的隐私,控制了用户数据的读取权限。同时为了保证可拓展性,使用集群技术。集群即一大组节点,共同存储和管理数据,可以加入新节点,也可拓展更多集群。
然而目前,随着大量去中心化系统的提出,开发者在选择、学习、开发、部署、维护方面都面临较高的成本。于是我们提出了DDAO(Decentralized Data Access Object),目的是希望使用一个通用的库来访问各种去中心化系统,从而进行数据的CRUD(Create, Read, Update, Delete)操作。开发者通过这一系统可以快速读写各种去中心化系统中的数据,构建自己的应用,而不必关心底层的技术实现。
系统可以分为三层,分别是DDMI(Decentralized Data Management Infrastructure,去中心化数据管理设施)、DDAO和DApp(Decentralized Application),以下将分别介绍。
DDMI
DDMI层将兼容各种去中心化系统,包括区块链、去中心化数据库、去中心化文件系统等。这些去中心化系统可以由开发者本地启动,也可以部署在远程服务器上,然后通过统一格式的描述符进行连接。例如 name://user:password@ip:port 格式,即通过 qtum://admin:[email protected]:13889 可以连接上本地13889端口下的Qtum链,或是通过 ipfs://myname:[email protected]:8080 连接局域网内8080端口下的IPFS。DDAO
DDAO层是本文提出的核心模块,主要功能包括(1)建立各种去中心化系统的连接和(2)抽象得到具有兼容性的CRUD接口。对于不同类型的去中心化系统,将抽象成不同的接口:1.对于区块链系统,将包括发送交易、查询交易、创建合约、读写合约等接口。2.对于去中心化数据库系统,将包括创建、查找、插入、更新等数据库接口。3.对于去中心化文件系统,将包括文件上传、下载、加密等主要接口。此处设计需要考虑到系统的兼容性,因此仅对一些通用的功能进行抽象。同时预留发送原始命令的接口,让开发者可以请求每个系统特有的一些接口。DApp
DApp可以是运行在浏览器上JavaScript脚本,也可以是运行在服务端的程序。DApp程序本身可以存储在去中心化文件系统上,通过特定地址作为入口获取到。DApp通过实例化DDAO,连接本地或是云端的去中心化系统,并对系统进行CRUD操作,从而实现数据管理的应用。在DApp内可以实例化多个DDAO,去连接多个不同的去中心化系统。这样可以在一个应用中与多个去中心化系统进行数据交互,实现比传统基于智能合约的DApp更为丰富的功能。例如多个区块链的数据跨链传输,或是区块链+文件系统的数据可视化(Data Visualization)展现。应用场景
丰富的应用场景是介绍DDAO重要性的最好方式。基于DDAO,很多去中心化的应用将变得易于开发实现。
去中心化的内容分享
基于DDAO可以用来搭建一个社交、博客、图片、音乐、视频分享平台。通过使用DDAO的写接口,可以将用户发布的文字、图片、视频等内容可以存储在IPFS这类去中心化文件系统中,同时将meta data(例如内容的地址、发布时间、用户ID等)存储在智能合约或是数据库中。然后再使用DDAO的读接口,进行内容的筛选、排序、展现。这样系统的优点在于用户发布的内容去中心化存储,不可篡改。
去中心化的交易平台
基于DDAO可以实现淘宝、Amazon这样的交易平台。商家上传商品信息的时候,通过DDAO的写接口将文字和图片存储至去中心化文件系统,商品的meta data(例如价格、数量、分类、关键词等)存储在智能合约或是数据库中。用户浏览的时候使用DDAO的读接口进行商品的查找、筛选。最终通过DDAO连接区块链进行订单创建、支付、完成交易。这种平台的优点是,商品信息和交易过程更加透明,支付也更为便捷。
云存储服务的去中心化
存储服务提供商通过DDAO将信息写入区块链或数据库进行注册。用户上传文件的时候,通过购买和消耗区块链上的代币,购买存储服务,并通过DDAO上传文件至去中心化文件系统,文件的地址存储至区块链或数据库。下载的时候通过DDAO浏览文件的信息和地址,再从文件系统中下载文件。用户消耗的代币用于奖励存储服务提供商,形成完整经济生态。
总结
去中心化的数据存储、管理,有着广泛的应用前景。目前由于基础设施的不完善,制约了落地应用。去中心化的数据库、文件系统,都正在开发中。可以想象到不久的将来,这些系统会被陆续实现。而DDAO也会像现在中心化系统中的DAO一样,广泛地被应用在实际开发中。
参考文献
[1] IPFS. https://ipfs.io/.[2] Swarm. https://swarm-guide.readthedocs.io/en/latest/.[3] Storj. https://storj.io/.[4] Filecoin. https://filecoin.io/.[5] Wolk. https://wolk.com/.[6] Fluence. https://fluence.one/.[7] Sia. https://sia.tech/.[8] BigchainDB. https://www.bigchaindb.com/.[9] Bluzelle. https://bluzelle.com/.[10] Ties.DB. https://tiesdb.com/.[11] Awesome IPFS. https://awesome.ipfs.io/.