以太坊源码解读(7)以太坊的P2P网络基础

一、分布式网络的来历

基于P2P技术的应用有很多,包括文件分享,即时通信,协同处理,流媒体通信等等。其中文件分享和下载是p2p技术最集中体现。其中,DHT技术是目前很多分布式系统所普遍采用的方案,也包括以太坊。所以这里先要对DHT技术有所了解。

二、DHT(Distributed Hash Table)技术简介

DHT全称叫分布式哈希表(Distributed Hash Table),是一种分布式存储方法,一类可由键值来唯一标示的信息按照某种约定/协议被分散地存储在多个节点上,这样可以有效地避免“中央集权式”的服务器(比如:tracker)的单一故障而带来的整个网络瘫痪。

1)首先我们需要弄懂一个概念——哈希表。

哈希表是一种数据结构,是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做哈希表

(数组与链表的结合)

哈希表的具体实现过程是:把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里。这个数组空间,我们可以称之为一个“bucket”,也就是说bucket里存的是多个键值对,键值对以链表的形式组织。

某个具体的哈希表,bucket的数量通常是固定的(比如N个),桶的编号从0~N-1,分别就是上面取余之后的结果。当使用哈希表进行查询的时候,就是再次使用哈希函数将key转换为对应的数组下标,并定位到该空间获取value,如此一来,就可以充分利用到数组的定位性能进行数据定位。

特点:这种哈希表的特点是创建哈希表(HashMap)需要先指定大小,这导致如果哈希表存满了要扩容的时候就会有很大麻烦。

举个例子:

假设哈希函数为 hash(x)=x ,哈希表的长度为5(有5个桶)
key=6时,hash(6)%5 = 1,即Key为6的元素存储在第一个桶中
key=9时,hash(9)%5 = 4,即Key为9的元素存储在第四个桶中
Key=17时,hash(17)%5=2,即Key为17的元素存储在第二个桶中....

假设现在hash表长度扩容成8,那么Key为6,7,8 的数据全都需要重新哈希。因为,

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值