分片Sharding || 百科

Posted DIGIBN币海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分片Sharding || 百科相关的知识,希望对你有一定的参考价值。


Shard本意是砂砾、玻璃渣。作为数据库相关的技术用语,分片(sharding)并不是新的技术,而是一个相对简朴的软件理念。分片是数据库的水平(horizontal partition)或横向扩展(scale out)。数据库中的某些数据仍然存在于所有分片中,但有些数据仅出现在单个分片中。


数据库分片和分区


mysql 5 之后才有了数据表分区功能。单一数据库不足以处理应用数据时需要分片进行数据库容量扩展。分片不能保证数据完整性。分片的思想从分区而来,但数据库分区基本上是数据对象级别的处理,比如表和索引的分区,每个子数据集上能够有不同的物理存储属性,还是单个数据库范围内的操作,而分片能跨数据库,甚至跨越物理机器。



区块链扩容问题


区块链存在效率瓶颈,所有区块链都面临扩容问题,分片是区块扩容的一种解决方案,称为水平扩容。避免所有节点都包含完整的副本以提高整体性能,将区块链分割成多个并行处理交易的较小部分,从而加快交易吞吐量和容量,从而降低交易成本。


以太坊分片设计思路


将区块链网络中的每个区块变为一个子区块链,子区块链中可以容纳若干打包了交易数据的Collation(大概可以称为“校验块”,为了在分片的情景中将其与区块的概念区分开),这些Collation最终组成一个主链区块;一个区块分割成的数个分片可以分别验证。每个分片都会有和现在的以太坊相同的容量,很可能还更高。理论上分片越多,扩容效果越显著。


三种分片策略


用细分的方法来实现分片策略,如网络分片和交易分片,以及状态分片等。网络和交易分片更容易实现,而状态分片则要复杂得多。


网络分片:开发者需要开发一种机制来确定哪些节点可以按照安全的方式保留在哪些分片中,这样就能避免那些控制大量特定分片的人所发起的攻击。网络可以随机抽取节点形成碎片,防止恶意节点过度填充单个碎片。还必须要确保网络的一个碎片中不同成员意见的一致性。这可以通过像工作量证明这样的共识协议来实现。


交易分片:在类似比特币的UXTO的账户系统中,为了防止双花问题,在验证过程中,碎片将不得不进行相互通信。事实上,由于双花交易可能会在任何碎片中出现,因此特定碎片所接收到的交易将不得不与其他的碎片进行通信。而实际上,这种相互之间的通信可能会破坏交易分片的整个目的。



状态分片:如果两个受欢迎的账户由不同的碎片进行处理,那么这可能需要进行频繁的跨碎片通信和状态交换。确保跨碎片通信不会超过状态分片的性能收益仍然是一个值得公开的研究问题。减少跨碎片通信开销的一种可能方法,是限制用户进行跨碎片交易,但可能会限制平台的可用性。


如果特定分片遭攻击而导致其脱机,由于碎片并没有复制系统的全部状态,所以无法验证脱机碎片中的交易。解决此问题的方法是维护存档或进行节点备份,但这样节点存储系统的整个状态,有中心化的风险。网络必须在一定时间内重新随机分配节点。但在状态分片的情况下,重新分配节点非常棘手,同步完成前可能会出现导致整个系统失效的问题。



END



历史阅读:


关 注 币 海

币海  这里不江湖

以上是关于分片Sharding || 百科的主要内容,如果未能解决你的问题,请参考以下文章

分库分表sharding-jdbc—分片策略

Sharding-Sphere系列-主从配置和分库分表

Sharding-JDBC2.0.3版本实践

MongoDB学习笔记——分片(Sharding)

mycat分片规则

Sharding-JDBC自定义复合分片算法