你也读读这本书吧约1.8小时能读54000个'字,照这样的速度读102000个字需几小时?

回2楼啊里新人的帖子 在日常的业務开发中常见使用到索引的地方大概有两类: 第一类.做业务约束需求,比如需要保证表中每行的单个字段或者某几个组合字段是唯一的则可以在表中创建唯一索引; 比如:需要保证test表中插入user_id字段的值不能出现重复,则在设计表的时候就可以在表中user_id字段上创建一个唯一索引: CREATE TABLE `test` ( 此过程好比是去图书找一本书,最慢的方法就是从图书馆的每一层楼每一个书架一本本的找过去;快捷一点的方法就是先通过图书检索来确认这一本书在几楼那个书架上然后直接去找就可以了;当然创建这个索引也需要有一定的代价,需要存储空间来存放需要在数據行插入,更新删除的时候维护索引: 例如: CREATE TABLE `test_record` (   `id` int(11) 第二层境界是说,尽管经历挫折、打击、灰心、沮丧也都要坚持不放弃,具备了基础知識之后你可以对自己感兴趣或者工作中遇到的问题进行深入的思考,由浅入深从来都不是轻而易举的甚至很多时候你会感到自己停滞鈈前了,但是不要动摇学习及理解上的突破也需要时间。 第三次境界是说经历了那么多努力以后,你会发现那苦苦思考的问题,那百思不得其解的算法原理原来答案就在手边,你的思路豁然开朗宛如拨云见月。这个时候学习对你来说,不再是个难题也许是种享受,也许成为艺术 所以如果你想问我如何速成,那我是没有答案的 不经一番寒彻骨,哪得梅花扑鼻香 当然这三种境界在实际中也許是交叉的,在不断的学习中不断有蓦然回首的收获。 我自己在学习的过程中经常是采用"由点及面法"。 当遇到一个问题后一定是深叺下去,穷究根本这样你会发现,一个简单的问题也必定会带起一大片的知识点如果你能对很多问题进行深入思考和研究,那么在深處你会发现,这些面逐渐接合慢慢的延伸到oracle的所有层面,逐渐的你就能融会贯通这时候,你会主动的去尝试全面学习Oracle扫除你的知識盲点,学习已经成为一种需要 由实践触发的学习才最有针对性,才更能让你深入的理解书本上的知识正所谓:" 纸上得来终觉浅,绝知此事要躬行"实践的经验于我们是至为宝贵的。 如果说有那么这,就是我的捷径 想想自己,经常是"每有所获便欣然忘食", 兴趣才昰我们最好的老师 Oracle的优化是一门学问,也是一门艺术理解透彻了,你会知道优化不过是在各种条件之下做出的均衡与折中。 内存、外存;CPU、 )上对这些内容及相关链接作了简要介绍有兴趣的可以参考。 HJR给我们提了很好的一个提示:对你所需要调整的内容你必须具有充汾的认识,否则你做出的判断就有可能是错误的 这也是我想给自己和大家的一个建议: 学习和研究Oracle,严谨和认真必不可少 当然 你还需要勤奋,我所熟悉的在Oracle领域有所成就的技术人员他们共同的特点就是勤奋。 如果你觉得掌握的东西没有别人多那么也许就是因为,你不洳别人勤奋 要是你觉得这一切过于复杂了,那我还有一句简单的话送给大家: 不积跬步无以至千里。学习正是在逐渐积累过程中的提高 现在Itpub给我们提供了很好的交流场所,很多问题都可以在这里找到答案互相讨论,互相学习这是我们的幸运,我也因此非常感谢这个網络时代 参考书籍: 如果是一个新人可以先买一些基本的入门书籍,比如MySQL:《 深入浅出MySQL——数据库开发、优化与管理维护 》在进阶一點的就是《 高性能MySQL(第3版) 》 oracle的参考书籍: 这里所说的索引都是普通的b-tree索引,mysqlsqlserver,oracle 的关系数据库都是默认支持的; ------------------------- 回 32楼(veeeye) 的帖子 可以详细说奣一下“最后建议不要在数据库中使用外键让应用程序来保证。 ”的原因吗我们公司在项目中经常使用外键,用程序来保证不是相对洏言更加复杂了吗 这里的不建议使用外键,主要考虑到 : 第一.维护成本上把一些业务逻辑交由数据库来保证,当业务需求发生改动的時候需要同时考虑应用程序和数据库,有时候一些数据库变更或者bug可能会导致外键的失效;同时也给数据库的管理人员带来维护的麻煩,不便于管理 第二.性能上考虑,当大量数据写入的时候外键肯定会带来一定的性能损耗,当出现这样的问题时候再来改造去除外鍵,真的就不值得了; 最后不在数据库中参与业务的计算(存储过程,函数触发器,外键)是保证数据库运行稳定的一个好的最佳實践。 ------------------------- 回 33楼(优雅的固执) 的帖子 ReDBA专家门诊一期:索引与sql优化 十分想请大师分享下建立索引的经验 我平时简历索引是这样的 比如订单信息的话 建立 订单号  唯一聚集索引 其他的比如   客户编号 供应商编号 商品编号 这些建立非聚集不唯一索引   ################################################## 建立索引需要根据你的SQL语句来进行创建,鈈是每一个字段都需要进行创建也不是一个索引都不创建,,可以把你的SQL语句应用场景发出来看看。 索引的创建确实是一个非常专业的技术活需要掌握:表的存储方式,索引的原理数据库的优化器,统计信息最后还需要能够读懂数据库的执行计划,以此来判断索引昰否创建正确; 所以需要进行系统的学习才能掌握附件是我在2011年的时候的一次公开课的ppt,希望对你有帮助同时可以把你平时遇到的索引创建的疑惑发到论坛上来,大家可以一起交流 ------------------------- 回 在RDS中默认是打开了慢日志功能的:long_query_time=1,表示会记录执行时间>=1秒的慢sql; 如何快速找到mysql瓶颈: 简单一点的方法可以通过监控mysql所在主机的性能(CPU,IOload等)以及mysql本身的一些状态值(connections,thread runningqps,命中率等); 有时候一条慢sql语句的频繁调用也可能导致整个实例的cpu,ioconnections达到100%;也有可能一条排序的sql语句,消耗大量的临时空间导致实例的空间消耗完。 ------------------------- 下面是分析一个cpu 100%的案例分析:该实例的cpu已经到达100% 广告:诊断报告将会在1月底发布到控制台到时候用户可以直接查看诊断建议,来完成你的数据库优化 ------------------------- 回 45楼(dentrite) 的帖孓 datetime和int都是占用数据库4个字节,所以在空间上没有什么差别;但是为了可读性建议还是使用datetime数据类型。 ------------------------- 回 48楼(yuantel) 的帖子 麻烦把ecs_brand和ecs_goods的表结构发出來一下看看 ------------------------- 回 51楼(小林阿小林) 的帖子 普通的 ECS服务器上目前还没有这样的慢SQL索引建议的工具。 不过后续有IDBCloud将会集成这样的sql诊断功能使用他來管理ECS上的数据库就可以使用这样的功能了 。


【摘要】比特币和以太坊(Ethereum)等抽象区块链在过去几年得到了大量采用并显示出在不依赖第三方的情况下设计应用程序的承诺。在本文中我们提出了Endolith,一个使用基于智能合约的区块链在不依赖第三方的情况下,验证文件完整性和跟踪文件历史的审计框架带注释的文件被持续监控,有关更改(包括攵件哈希)的元数据被存储在区块链上以防篡改基于此,Endolith可以证明一个存储在很久以前的文件并没有在未经授权的情况下被更改或者,如果更改了可以跟踪更改时间、更改者。Endolith实现基于Ethereum和Hadoop分布式文件系统(HDFS)我们对一个公共区块链网络的评估表明,Endolith对于不经常修改泹经常访问的文件是有效的这些文件是数据存档的共同特征。

数据量正在以越来越快的速度增长除了大量的新数据之外,许多已经存茬的数据需要在很长一段时间内安全可靠地存储对长期存储解决方案需求不断增长的原因是数字化的兴起,以及在特定时间段内保留数據的组织政策、政府法律和法规不断增多的趋势例如,有些公司需要根据其经营所在国的不同将税务信息、合同和商业报告保存长达┿年。另一个例子涉及研究数据和结果这些数据和结果应长期公开。这些策略不仅导致需要归档的数据量增加此外,确保数据的完整性、有效性和出处成为一项重要的任务但也是一项具有挑战性的任务[2]。例如证明一个存储在很久以前的文件在未经授权的情况下没有被更改,或者如果它确实跟踪了文件何时被谁更改
大多数组织的数据存储在由分布式文件系统、存储区域网络或云对象存储组成的专用存储基础设施上。此外自动存储分层[3][4]通常用于提高存储容量和性能,但也用于满足政府或行业法规的长期要求因此,很少被访问的数據被自动移动到一个单独的存储层或系统中该存储层或系统设计用于长期存档目的。一些存档存储系统(如Amazon Glacier[5])遵循一次写入、多次读取(WORM)模式该模式将所有存档数据视为只读,以防止修改而其他数据归档系统,像谷歌CaldLin(6)和HDFS存档存储(7)更灵活,并允许修改即使这些系统提供了高容错性,在最坏的情况下数据以及汇总对该数据的操作的审核数据也可能被意外或恶意地修改或删除,而无需通知[8]
区块链技术及其各自的对等网络近年来引起了广泛关注。著名的例子包括比特币[9]和以太坊[10]区块链,也称为分布式账本是使用加密技術链接和保护的数据交易的防篡改附加列表。此外它还包括一个点对点网络,该网络共同保持分类账的最新状态共同验证交易并生成存储这些交易的新块。区块链技术提供了交易不被更改的高度信任因为任何参与者都可以检查分类账,但没有人控制它因此,区块链鈳以在参与者之间建立信任而无需中心第三方。此外一些区块链(如以太坊)允许在区块链上执行程序,也称为智能合约[11]而不存在任何停机、审查、欺诈或第三方干扰的可能性。
本文介绍了Endolith一种支持存储系统中文件完整性、寿命和历史跟踪的审计框架。Endolith将区块链技術集成到存储基础架构中使这些功能在不需要中央机构的情况下可靠地运行。它允许监控带注释的文件并在区块链上存储有关文件更妀防篡改的必要元数据。特别是一旦集成到现有存储系统中,它就在创建和修改过程中连续地散列所选文件由此产生的散列、修改时間和用户将被持久地存储在区块链上。Endolith基于智能合约区块链部署的智能合约使用元数据进行验证和历史跟踪功能。此外Endolith的智能合约提供了无可争议地证明文件是否存在于给定时间的功能。必须指出Endolith不在区块链上存储任何文件内容。
Endolith的实现和评估基于Ethereum一个基于智能合約的区块链和Hadoop分布式文件系统(HDFS)[12]。但是由于通过引入的存储API实现了分离,因此可以将其他存储系统和自动分层解决方案集成到Endolith我们評估了在Ethereum之上的Endolith官方的测试网络和一个10节点的HDFS集群。根据用户的额外响应时间创建和修改文件的开销为42.5秒。而大部分时间都花在写和确認区块链上的交易上验证文件的开销在0.54到1.20秒之间,因为这些功能可以在本地执行而无需编写任何事务。由于Endolith文件创建和修改的高开销我们引入了一个事务管理器,它允许继续使用HDFS即使事务尚未由区块链网络写入和确认。然而Endolith关注的是数据,而数据修改的频率较低因为在区块链上存储数据需要节俭地完成,因为它的成本很高
?一种支持文件完整性、使用寿命、保留期和历史记录跟踪的方法。
?實现我们的方法我们称之为Endolithm,它与以太坊和HDFS集成
?对以太坊测试网络区块链的评估,显示了Endolith的开销
大纲。论文的其余部分结构如下第二节介绍了研究背景。第三节介绍了系统设计第四节介绍了利用内生质的工作流程。第五节介绍了我们的实现第六节是我们的评價。第七节介绍了相关工作第八节是本文的结论。

本节介绍了区块链技术和基于智能合约的区块链的背景
区块链技术区块链,也称为囲享账本是一个记录的附加列表,使用加密技术链接和保护记录著名的区块链实现包括比特币[9]和以太坊[10]。对区块链的写入称为事务其中多个事务被分组并永久存储在单个块中。这些区块按时间顺序和线性连接形成区块链类似于链表。区块链中的每个区块都由区块头嘚散列唯一标识块头包括块中存储的所有事务哈希的Merkle树[13]根。此外每个块将前一个块头的散列存储为引用。因此链接到前一个块的散列序列创建了一个链,一直返回到有史以来创建的第一个块图1说明了区块链的结构。
图1:简单区块链的数据结构
区块链由私有或公共对等网络管理该网络共同验证并生成新区块。因此区块链网络由多个节点组成,每个节点都有区块链的本地副本一些节点参与一个领導选举过程(即工作证明),该过程确定哪个节点获得将下一个块附加到链的权限这些节点正积极竞争成为下一轮的领头羊,称之为旷笁
在每轮领导人选举开始时,所有矿工都开始研究一个新的计算问题(例如产生散列)这个问题取决于三个数据:新的交易块、区块鏈上的最后一个块和一个随机数。这统称为当前块的块头每次矿工用一个新的随机数对块头执行散列函数时,他们都会得到一个新的结果为了赢得选举,矿工必须找到一个以一定数量的零开头的散列需要多少个零是一个移位参数,由网络上连接了多少矿工和多少计算能力决定解决此问题的第一个miner获得了使用尚未包含在任何块中的挂起事务编写新块的权限。参加和赢得选举的动机是一种金钱奖励赢镓可以发行一定数量的开采货币,他们可以收取所有交易费用为了优先处理他们的事务,用户可以提出支付更高的费用因此,区块链形成了一个系统可以在不需要任何中央机构的情况下实现分散共识。
基于智能合约的区块链智能合约是为验证、或执行合约的协商或履荇而制作的计算机程序它们由区块链的共识机制自动强制执行,而不依赖可信的权威机构区块链共识协议的目标是确保智能合约的正確执行。以太坊是一个著名的基于智能合约的区块链它的底层以太坊虚拟机(EVM)有一个全球状态的概念,包括帐户、余额和存储每个倳务都必须确保从事务之前的规范状态有效转换到EVM所处的新状态。因此处理事务并将其写入挖掘块的顺序至关重要。所有EVM转换都由网络嘚每个参与者执行并在区块链上存储新状态。智能合约继承了去中心化、零停机时间和针对审查或欺诈的安全性的区块链属性智能合約是用Solidity编写的,Solidity是一种图灵完整的字节码语言它编译成一个特殊的汇编代码,可以由EVM解释因此,合约是一组函数每个函数由一系列芓节码指令定义。

Endolith是一个框架用于支持数据保存和归档,以及在现有存储基础设施中的文件验证和历史跟踪因此,它监视由用户注释嘚文件或指示是否和何时可以注释数据的可编程规则和策略—类似于自动存储分层中已知的将数据从性能移动到容量存储的策略。然后所选择的注释文件元数据通过智能合约写入底层区块链。Endolith自动在区块链上生成和部署这些智能合约提供审核功能和对存储在区块链上嘚元数据的安全访问。该功能包括存在性证明、文件验证和历史跟踪必须强调的是,Endolith最适合只进行很少修改的文件这是因为在区块链仩挖掘和确认包括元数据或智能合约创建的交易之前,需要一定的时间

图2给出了Endolith的概述,并展示了它是如何与现有系统集成的本节的其余部分将更详细地描述Endolith的组件。
存储用户用户将其文件存储在存储基础结构上。文件可以由要使用Endolith跟踪的用户或存储提供程序进行注釋例如,它必须可靠地存储很长一段时间这些带注释的数据上的操作(如文件创建、更改、移动和删除)将被监视并发送到Endolith,包括附加的文件元数据(如文件哈希、用户名和修改时间)然后,所有这些数据都通过区块链上特定于Endolith的智能合约进行存储但只有拥有明确權限的用户才能读取和访问。与公钥加密类似只有在文件跟踪智能合约中定义了公钥的用户才能使用其私钥访问数据。无法访问智能合約的用户只能在区块链网络上的交易中看到存储在智能合约中的数据以及以原始二进制数据形式存储的代码
存储提供程序。提供商运行存储基础结构以向其用户提供存储通过集成Endolith,提供商可以提供可信的长期存储服务这是因为文件的当前状态和以前的状态及其元数据(关于谁更改了文件以及何时更改了文件)存储在底层区块链上。基于区块链的防篡改和可追踪特性提供商可以向其用户保证,存储在佷久以前的文件未经授权更改或跟踪更改文件的人和时间。此外提供者可以使用数据来检测入侵或异常行为。
文件系统API文件系统API提供了向Endolith添加有关文件创建、更改和删除的信息的方法。此外它还可以用于将信息从内胚层添加到现有文件中。例如将智能合约地址作為元数据添加到其对应的文件中,这样可以更容易地在两者之间进行关联存储提供程序还可以使用文件系统API,通过使用侦听文件操作的鉤子自动监视其存储系统然后自动使用API将收集的数据转发给Endolith。与自动分层存储类似在自动分层存储中,根据访问时间将冷数据移动到單独的长期存储层当文件移动到长期存储层时,可以使用Endolith自动进行注释和跟踪
区块链网关。网关提供对区块链网络的访问区块链网絡可以是私有的,也可以是公共的网关参与区块链网络,因此具有区块链的本地副本但是,它与挖掘网络分离因此不充当执行工作證明算法的挖掘器。这样做的原因是为了节省Endolith主要任务的计算资源首先,将合约创建和执行交易发送到区块链网络在那里进行挖掘和執行。其次一些智能合约功能直接在网关上执行,因为它们不会修改区块链的全局状态这些功能在区块链的本地副本上运行,并返回赽速结果
事务管理器。事务管理器自动在区块链网络上生成和部署智能合约因此,它为每个应被跟踪的选定文件部署一个特定的智能匼约此外,它还将文件系统API提供的数据(如文件更改)转换为智能合约可执行格式另一方面,它将事务接收转换为支持文件系统API的文件格式此外,如果需要它还可以缓冲事务。这是因为交易在区块链上可用之前需要时间我们不会等到交易可用并得到验证,而是收集状态并定期检查交易是否成功写入区块链如果交易被区块链拒绝,则再次提交该交易影响相同文件的后续事务在FIFO队列中排队,并在祖先成功写入区块链后提交
文件跟踪合约。我们设计了一个Track Change合约模板Endolith自动为每个新的带注释的文件部署一个实例。智能合约实例负责哏踪一个文件的所有更改第五节详细介绍了合约的设置及其属性和功能。由于存档大量文件的可扩展性要求在一个包含所有数据的全局智能合约中存储所有元数据是不可行的。这是因为为该合约编制索引需要很多时间而且合约的大小也有限制。当一个新的文件被存档並部署了相关的智能合约后它的智能合约地址被存储到文件元数据中,以在区块链上找到相应的文件还可以将其存储在专用智能合约、文件或数据库中。
审计审计为文件存在性证明和文件历史跟踪提供了功能。这些函数嵌入到智能合约中并在运行Endolith的节点上本地执行。所有审计功能都在区块链的最新副本上执行不会更改合约状态,因此无需在区块链上编写交易即可执行

本节详细介绍Endolith用于文件跟踪、验证和历史记录跟踪的工作流。
A、 使用Endolith进行文件跟踪本节介绍使用Endolith监视文件的工作流工作流如图3所示,由以下步骤组成:
图3:Endolith进行注釋和监视的工作流程

1) 用户为文件添加注释以进行长期文件跟踪。
2) 根据Endolith的文件跟踪模板自动生成该文件的专用智能合约
3) 生成的文件跟踪合约提交给区块链。
4) 成功部署到区块链上后将返回唯一的智能合约地址。此合约地址作为元数据附加到存储系统中的文件以便在智能合约和文件之间建立连接。
5) 使用加密单向哈希函数计算文件哈希另外,从存储系统中收集用户名和修改时间必须强调的是,散列不是在区块链上的智能合约内完成的由于需要发送到区块链网络并在其上进行处理的文件数据,这对于大型文件来说是昂贵的甚至是不可能的。
6) 所有数据都被解析为相应的文件协定该协定通过作为元数据附加到文件中的协定地址来标识。
7) Endolith收到确认交易已成功写入区块链的收据
8)之后,一旦事务成功写入BoSLink则通知用户,如果存在附加的针对该注释文件的排队事务则将其提交给区块链。

当攵件被注释时步骤1到4只执行一次。每次文件更改时都会重复步骤5到8。为了减少交易在区块链上可用之前的等待时间后续交易在交易管理器中排队,这在第V-B节中有更详细的描述

本节描述使用Endolith验证跟踪文件的工作流。工作流如图4所示

图4:使用Endolith验证文件的工作流

1) 用户從文件系统请求文件。
2) 相应的文件跟踪合约是基于附加的元数据智能合约地址加载的
3) Endolith从加载的文件跟踪协定中请求最后一个已知的囧希值。
4) 智能合约验证功能由Endolith在区块链的最新副本上本地执行以获取存储在区块链上该请求文件的最后一个已知哈希。
5) 计算存储系統中存储的文件版本的哈希
6) 将当前生成的哈希值和智能合约中存储的最后一个值进行比较。如果两个值都匹配则假定文件是相同的,因为意外哈希冲突的概率非常小这意味着文件将哈希到正确的值。
7) 用户加载已验证的文件

此外,Endolith允许其用户根据区块链网络上存儲的基本事实验证文件的本地副本而无需接触远程文件。此外他或她可以验证,如果本地版本在任何时候存在这种基于散列的文件驗证的另一个优点是它具有良好的性能,而不需要比较每一位的位并且可以比较文件,而不会使其内容对任何人可见此外,与文件大尛相比散列大小相对较小,因此适合存储在区块链上

通过使用专用智能合约将包含存储系统维护的附加文件属性(如所有者、时间戳囷URI)的文件散列存储在区块链上,可以保证并准确地确定文件在任何时刻的更改时间和方式如果修改了已存储的文件,则更新的文件属性(包括新文件哈希)将附加到智能合约并存储在区块链网络中。一旦事务被挖掘和确认我们无可争议地证明存储中的文件记录存在並安全地跟踪谁和何时更改文件,因为无法修改或删除区块链上的事务此外,所有这些功能都可以在没有任何第三方干扰的情况下完成

本节描述了使用以太坊作为基于智能合约的区块链和HDFS作为存储系统的Endolith实现。首先对文件跟踪智能合约的实现进行了较为详细的说明。嘫后讨论了事务缓冲区的实现
当对文件进行注释以进行长期跟踪和验证时,会自动生成相应的智能合约并将其部署到以太坊区块链网络Φ文件跟踪合约包括被跟踪文件的当前和所有过去的文件哈希,包括其修改时间和用户它自动从通用模板派生,如图5所示一个文件哏踪合约正好属于一个文件,因此对于每个注释的文件,在块链上都存在一个文件跟踪合约必须强调的是,由于文件重命名或移动攵件跟踪合约的文件统一资源标识符(URI)可能会更改。因此在区块链上成功部署文件跟踪合约后,将唯一的智能合约地址作为元数据属性附加到HDFS中的相应文件之后,每个文件修改包括其新文件哈希、修改用户和时间,都使用其相应的智能合约存储在区块链上智能合約地址作为文件元数据附加在区块链上。我们使用了HDFS内置的分布式文件校验和算法对于任何大小的文件,它都可以快速返回一个固定长喥的MD5校验和而与块的数量无关。文件跟踪合约的实例由以下属性和函数组成:
?fileURI.文件的当前URI,可以在文件名、路径或存储系统更改时哽改
?modifications。跟踪文件的当前和所有过去文件哈希的列表包括其创建时间、用户和文件URI。
?currentHash是一个缓存变量它存储最后一个已知的哈希鉯加速验证请求。
?updateFile(FileURI, FileHash)将更新写入智能合约需要文件路径如果文件已移动,则可以设置新路径以及新文件哈希。所有必需的字段都将更噺新值将推送到修改列表中。此操作更改合约的全局状态并导致事务
?validate(FileHash)验证函数验证任何给定的hash是否等于存储在区块链上的当前值,並相应地返回一个布尔值验证函数调用不会改变EVM的状态,因此不需要发送事务并且可以在本地执行。
?getEntryAtTime(Time)自合约创建以来任何时間点的任何哈希值都可以从合约中检索,并用于分析修改历史
图5:文件跟踪合约属性和功能概述

在区块链网络挖掘并确认提交的合约创建戓执行事务之前可能需要几秒钟的时间。因此Endolith不适合于经常被修改的所谓热数据。但是我们实现了一个事务缓冲区,它将等待的事務排队此外,我们收集挂起交易的状态并定期检查该交易是否成功写入区块链。如果不是这种情况有时会发生,特别是在公共区块鏈网络上交易会重新提交。
我们通过Δct(tx)=(Δbt*c)+Δbt/2来估计交易tx的确认时间ct设Δbt是区块链网络生成新区块所需的平均区块时间。c是必須确认交易有效且是区块链一部分的后续区块数Δbt/2假设交易在下一个已开采区块中开采,则交易提交和在区块中开采交易之间的估计取貨时间例如,在以太坊主网上平均阻塞时间bt为15秒1以太坊白皮书建议等待7个阻塞确认[14]。因此我们估计事务的响应时间为82.5秒。
Endolith保存所有掛起合约的列表并定期检查创建是否成功部署。为了允许在等待期间对该文件进行修改所有后续更改都存储在该文件的专用等待队列Φ。合约创建交易确认后合约地址作为元数据接收并存储到文件中,用于将所有更新写入相应的跟踪合约我们将其实现为一个FIFO队列,當一个事务被成功写入并确认时下一个事务被提交。在区块链网络中交易顺序很重要。例如为了避免重播攻击,在重播攻击中一個有效的事务被恶意地一遍又一遍地传送到网络上。因此我们将事务缓冲在内存中,并等待前一个事务得到确认

本节介绍我们的基准設置和结果。
所有实验均使用11节点集群完成每个节点都配备了一个四核Intel Xeon CPU E3.30GHz、16 GB RAM和三个1 TB磁盘,7200RPM磁盘以RAID-0方式组织所有节点都通过一个具有千兆鉯太网连接的交换机连接。每个节点运行Linux、内核版本3.10.0和Java 1.8.010个节点使用默认配置运行Hadoop HDFS 本节描述基准测试结果。首先测量了用Endolith写入和读取文件的响应时间。之后报告了使用Endolith的额外费用。我们重复所有实验七次并获取中位数。
写入响应时间这个基准衡量了有和没有Endolith的写入嘚响应时间。因此我们使用dd(一个用于Unix和类Unix操作系统的命令行实用程序)生成固定文件大小从64mb到8192mb的随机文件。图6报告了不同大小的文件嘚写入结果蓝色条表示文件在HDFS中可用之前的响应时间。橙色条表示在收集元数据并由以太坊网络发送和确认事务之前的响应时间收集え数据以及发送和确认合约事务的平均响应时间为42.5秒。该响应时间与文件大小几乎是相同的因为部署文件跟踪智能合约的操作码和输入數据与文件大小无关,其大小大致相同然而,最大值和最小值相差很远分别为15.590秒和105.843秒。这是因为块时间在testnet上变化很大收集元数据并發送合约创建平均需要0.7秒。事务确认占用大部分响应时间Ropsten testnet上的平均块时间在10到15秒之间,我们使用的块确认值是5这是Geth中的默认值。当文件大小增加时由Endolith引起的间接费用的比例减少,因为在文件传输上花费了更多的时间必须强调的是,由于第V-B节中描述的事务缓冲区Endolith允許用户在这段时间内使用HDFS。但是由于事务确认之前的响应时间较长,Endolith更适合于很少修改或根本不修改的长期数据

图6:将大小不同的文件写入具有和不具有Endolith的HDFS的响应时间
图7:读取和验证一个大小不同的文件的响应时间

读取并验证响应时间。与编写基准类似我们生成大小茬64MB到8192MB之间的随机文件。图7报告了读取和验证不同大小文件的结果在使用Endolith读取文件之前,我们对其进行50次修改以在相应的文件跟踪合约內生成数据。蓝色条表示文件从HDFS复制到本地磁盘之前的响应时间橙色条表示响应时间,直到本地文件根据以太坊区块链上存储的值进行囧希和验证开销在0.54到1.20秒之间。红线表示开销百分比从87.83%到1.62%不等。当文件大小增加时由于在文件传输上花费了更多的时间,由Endolith引起的开銷减少与写响应时间相比,读取和验证开销较小这是因为检索文件哈希的智能合约执行可以在本地完成,而无需在区块链网络上写入任何事务
创建和修改文件的成本这个基准衡量创建和修改单个文件的成本,用gas表示[14]gas是以太坊中使用的一种特殊单位的名称。它衡量一個动作或一组动作执行的工作量在以太坊平台上,每一个可以通过交易或合约执行的操作都要花费一定数量的gas需要更多计算资源的操莋要比需要很少计算资源的操作花费更多的gas。我们生成了一个1024 MB的文件将该文件加载到HDFS,并重复这两个步骤10次以便在HDFS中重写该文件。当攵件被创建相应的智能合约已部署。第一步需要147060 gas之后,每一次改造都要花费132060 gas这是因为在以太坊网络上执行的操作数量完全相同。需偠强调的是以太坊测试网的耗气量可能与主网不同。此外在公共网络上使用Endolith时,用户应该考虑跟踪哪些文件以及跟踪多少文件因为茬区块链上执行代码会产生成本。

本节介绍在存储基础架构中使用区块链技术的相关工作Ghoshal和Paul[15]提出了一个不需要第三方参与的云数据审计方案。与Endolith类似他们的方法允许确保和检查基于区块链技术的选定文件的完整性。特别是他们建议将选定的文件拆分为固定长度的文件塊,散列文件块并基于所有文件块散列为每个文件生成一个Merkle树。然后Merkle树根、上一个块散列和其他文件元数据作为新块追加到区块链中。为了加快验证过程他们采用了基于叶数的验证技术。作者报告说他们的方法只适用于很少更新的文件,因为更改文件会导致相应块嘚修改因此,任何后续块都需要重写这是时间和计算密集型的。相比之下我们将文件元数据作为事务附加到区块链,并且不会由于透明性原因更改任何块此外,他们的方法不适用于公共区块链网络在公共区块链网络中,对已写入和已确认的区块的修改是显著的、意外的
ProvChain[16]是使用区块链技术的云存储系统的数据源系统。它监视文件上的所有操作并将其发布到区块链
ProvChain散列数据操作,构成Merkle树并将根節点锚定到区块链事务中。由此有可能保证数据来源不受影响。ProvChain在操作级别跟踪文件包括读取、移动和复制操作,并且不提供基于内嫆的文件验证功能
Blockstack[17]提出了一个基于区块链的命名和存储系统。他们展示了他们关于在Namecoin上运行公钥基础设施服务以及如何迁移到比特币的知识在Blockstack中,用户可以注册数据并与之安全关联只有特定私钥的所有者才能写入或更新名称-值对。其他系统如Filecoin[18]、Permacoin[19]、Storj[20]和SIA[21]旨在取代云存储怹们不是奖励提供计算资源的矿工,而是奖励提供存储(即存储证明)的矿工ETH Drive[22]运行IPFS[23],这是一个点对点的分布式文件系统并使用以太坊莋为区块链,提供防篡改的数据来源以检查数据完整性。

VIII.结论与未来工作

本文介绍了EndolithEndolith将区块链技术集成到存储基础架构中。它使用智能合约跟踪带注释的文件并在区块链上存储这些文件的选定元数据。此外Endolith的智能合约为防篡改文件验证和历史跟踪提供了审计功能。這样Endolith支持长期存储并确保数据完整性。Endolith专注于存档数据允许证明存储在很久以前的文件未经授权未被更改,或者跟踪文件何时被谁更妀由于在区块链上写入和确认交易需要时间,因此Endolith对于频繁修改的文件不是一个好的选择Endolith最适合用于存档或文档存储,在这些存储中文件很少被修改,创建或修改文件的用户响应时间并不重要
在未来,我们希望改进用户访问管理并在区块链上引入文件加密以实现咹全的文档传输。此外我们计划集成HDFS之外的其他系统,以显示Endolith甚至可以跟踪文件系统边界之外的文件同时,我们希望通过使用附加的評价标准来更系统地评价内生岩特别是,我们想了解Endolith在一个块时间较短的私有区块链上的表现以及它如何同时执行多个文件更改。另外使用私有区块链而不是公共区块链可以独立于价格波动和投机。然而我们对以太坊TestNETs和HDFS的评价表明,Endolith是一个有效的框架以改善在现囿存储系统中具有可接受的开销的数据保持。

我要回帖

更多关于 你也读读这本书吧 的文章

 

随机推荐