shiyanhui/dht

像路由表之类的数据结构能实现成接口吗?

xgfone opened this issue · 3 comments

DHT和KRPC中有一些像路由表(routingTable)之类的数据结构都是使用内存式容器实现的,这些数据结构能否实现成接口 Interface 吗?

之所以有这样的想法,主要是有个担心:如果结点Node一旦多了(比如几千万、几亿),需要几GB甚至几十GB的内存空间,内存有可能不足。

如果是接口,那么就可以根据需求自定义它们的存储,比如可以使用 Redis 来代替内存。

一般DHT主要有两种用途,BT客户端的标准DHT组件和DHT爬虫。

如果作为标准DHT组件,按照DHT官方协议,routing table里的节点个数不超过 160 x K ,这里 K=8。我们假设一个节点需要占1k bytes(事实上远没有这么多),那么我们可以估量出一个内存使用上限 160x8x1024/1024/1024,约为1.25M。即使我们把k增大到1000,也才150M左右。而K太大对于一个标准DHT组件来说没有太大意义。

如果单纯的作为DHT爬虫来用,事实上,你不保存节点也可以。也就是说节点所占的内存为0。

所以综上,对于节点不必有那样的担心 :)

而对于Peers存储,确实存在这个问题,这时可以用其他的存储方式持久化到硬盘里。不过当前DHT主要作为爬虫来用,在爬虫模式下,peers根本就不会被存储。未来可以考虑把这块实现为interface。

Tks. 很期待 peer 存储实现为 interface。