最大的不同是一致性。
对于数据库来讲,一般都是强一致,比如Oracle,写入一条记录以后,确保数据一定是存在的,并且这条数据在数据库日志里确保不能被更改。在分布式数据库里则是最终一致性,当写一条记录以后,不一定能够立刻看到这个东西,但是能够确保在未来一段时间之内这个记录一定存在。不管强一致还是最终一致,本身要求是写入成功的数据一定会存在在数据库里某一时刻。
但
区块链不一定,区块链可能会出现分叉,分叉完了还要做合并。比如某一个人账户里有10个
比特币,在同一个时刻,在中国和美国两个不同账户里做交易,因为在中国和美国服务器不一样,一个服务器接收我给A做交易是成功的,在第二个美国服务器接收同样消息,转给B的也是成功的,但这两个人不能同时成功。
在区块链一定有交易成功确认过程,这在数据库里是没有交易确认,只要在数据库里写的东西一定可以成功。如果在中国向A转10个比特币,在美国向B转10个比特币,假设由于中美开战了,中美之间网络突然断掉了,可能断了三天,三天之内,中国大陆所有比特币交易没有办法通畅,这样就会超过比特币6块的问题,当两个网络合并时就会产生分叉,如果未来去做合并时,在中国做交易,给10个比特币,把一堆东西卖给我,在美国也一样,这样在线下收到20个比特币,最后当做比特币合并时,其中一方肯定会被损失。在极端情况下,在比特币体系里没有办法真正保证强一致,去中心化存储里和中心化存储最大的区别,就是在于一致性。
为了确保一致性,在数据库里用锁,因为所有操作在主节点执行,几个并行操作里,结构没有提交时会锁住,其他操作过来以后,一定要保证这套交易成功才能释放这个锁,保证继续。
区块链没有锁的机制,比如在中国做一笔交易以后,不可能在毫秒级或微秒级之内就把交易信息传到美国去,如果美国对同样记录做操作时,就会面临这样问题,两者有冲突,在去中心化或多活、多主节点写入里,无法保证全局锁,这个时候怎么确保这个东西,Oracle最终确认时,谁先提交谁成功,后面发现记录变了,重新做一个。
相对于区块链,
以太坊使用NAS,确保每一个账户更有顺序化,这时候从某种策略选出其中一个正确的。如果顺序错了,会把错误继续。
从安全级别来讲,区块链有很多机制确保安全性。对于数据库大家的想法是这个东西是跑在数据中心里的,区块链基本上有一个笔记本就可以了,所以除了确保本地安全以外,更重要的是协议层面确保其他对等节点、相邻节点有没有作恶的坏人。
在三个层面上确保安全,对于记录级安全,属于交易数字签名、智能合约数字签名,就是当做一笔交易时,一定要通过数字签名来验证帐号是否有权利修改这套记录,通过加密,从记录级确保修改这条记录的人一定是本人。
区块级的安全机制,当收到块以后怎么确保这个块是正确的,这个块包括默克尔树、挖矿校验,这是对于区块安全的保障。对于链级安全机制,怎么确保这个链是靠谱的,利用前一个区块生成校验码、分叉解决方案。
分片机制。
传统数据库分片很容易,都在一个数据中心之内,如果做两个分片之间的操作,先问所有参与交易的人是不是都准备好了,可以提交了,确保大家都在同一个状态下。但有一个问题,没有办法在多个分片之间做控制。在区块链里除非有某种机制确保不会分叉,不可能确保其中某个操作在在另一个链里未来会不会被退掉,没有技术确保,因为链不具备这个功能。
不是技术上操作不了,是理论上行不通。如果这么做也会有一些方法,找到第三方中介做这个事,他来背锅是有可能的,或者用侧链机制、跨链机制。
版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。