这几天读的东西越多,却发现更难落笔,因为需要思考的困惑也更多了。
先拣一点写写。
区块链公链碰到的重要挑战之一就是性能,当然如果只是把区块链用于数字货币,把区块直接扩大,可能也就差不多了,但如果考虑智能合约,则还远远不足。
分片技术是提高性能的解决方案之一。
分片技术的来源
分片技术(Sharding)来源于数据库。
Sharding
是把数据库扩展到多个物理节点上的一种有效的方式,其主要目的是为突破单节点数据库服务器的
I/O
能力限制,解决数据库扩展性问题。Shard这个词的意思是“碎片”。如果将一个数据库当作一块大玻璃,将这块玻璃打碎,那么每一小块都称为数据库的碎片(DatabaseShard)。将整个数据库打碎的过程就叫做sharding,可以翻译为分片。
Sharding策略包括垂直切分和水平切分两种。
垂直(纵向)拆分:是指按功能模块拆分,以解决表与表之间的io竞争。比如分为订单库、商品库、用户库...这种方式多个数据库之间的表结构不同。
水平(横向)拆分:将同一个表的数据进行分块保存到不同的数据库中,来解决单表中数据量增长出现的压力。这些数据库中的表结构完全相同。
形式上,Sharding可以简单定义为将大数据库分布到多个物理节点上的一个分区方案。每一个分区包含数据库的某一部分,称为一个shard,分区方式可以是任意的,并不局限于传统的水平分区和垂直分区。
区块链中的分片技术
V神吹得很玄幻。
“你可以把分片看成是,设置一个区块链,在其中有一百个各自不同的宇宙,每一个宇宙都是一个独立的账户空间。所以你可以在某个宇宙中拥有一个账户,也可以在数个宇宙中持有一个合约,当然,你还可以在数个宇宙间发起一笔交易,而这笔交易仅仅会对涉及到的这几个宇宙产生影响。但是,这一百个宇宙不仅仅是割裂分散的区块链,它们在内部相互联系并组成系统,彼此间达成共识。如果要打破其中一个宇宙,你就必须打破这一个整体”。
可现实很骨感,分片中的一部分问题好解决,一部分却不容易。
最主要的问题就是跨片交易,有办法预知哪些交易应该放在同一个碎片中,从而减少跨片交易吗?
一个预设的碎片分类方法很难适配未来不断涌现的新应用。
是按照应用分类吗?那似乎更接近于侧链的思想了。
网友评论