您将使用啥来构建带有客户端的分布式数据库?

Posted

技术标签:

【中文标题】您将使用啥来构建带有客户端的分布式数据库?【英文标题】:What would you use to build a distributed database with client?您将使用什么来构建带有客户端的分布式数据库? 【发布时间】:2012-10-01 02:43:27 【问题描述】:

如果我想为媒体文件(比如图像)创建一个分布式数据库,我会使用什么?

这个想法是数据库不会被任何特定实体控制(尽管软件可以控制,尽管它是 GPL / forkable)。

相反,您将拥有一个客户端,该客户端具有类似 libtorrent 的内容,可用于浏览/缓存数据库。您将使用“源”列表配置客户端。

Cydia 是一个很好的模型。

虽然我不想使用网络主机,但我想使用充当超级节点的比特种子播种机(它将对任意树高的子节点进行编目)

libtorrent 会是最好的选择吗?还是有更好的选择?

【问题讨论】:

【参考方案1】:

仅仅因为给定种子存在播种器并不意味着您的客户知道他们正在播种什么。对于每个单独的“事物”,您至少需要一个磁力链接或一个 torrent 文件。

所以,用 torrent 来“缓存”内容,好吧,但就“浏览”而言,你需要其他东西(例如:一个索引,它会列出磁铁/torrent 文件 - 我怀疑你会使用lib/bittorrent...)。

其次,您的“来源”列表将由跟踪器提供,以便连接到您的集群,或者如果使用 DHT,则至少是已知对等节点(您称之为超级节点)的列表 - 再次由其他东西提供那个 libtorrent。

另外,显然(?)你不能用 torrent 来“更新”内容——如果某些东西“改变”了,那么它就是一个不同的 torrent——所以,短期内,你会有一个包含无法修改项目的数据库...通过bittorrent“复制”,但被其他一些技术索引。

我不太明白您为什么要使用 bittorrent 来(重新)实现“分布式数据库”,但这对我来说似乎是不正确的(如果仅仅是因为索引,它不会被分发,几乎没有达到目的)。

如果您的问题是可靠性/可扩展性,为什么不考虑使用任何(现有的)“db”引擎来完成这项工作? (使用 mongo 的副本集,或者 hadoop 上的分布式文件系统,甚至是节点之间良好的老式手工数据复制,甚至是 sql 主从,或者一些云存储......)。

如果您的问题是对数据库的“所有权”,那么这与内容无关,而是与索引有关。 现在,我可以想象,peer 会在它们之间交换他们拥有的项目列表,允许给定的 peer 从另一个给定的 peer 获取数据,但这与我所说的“数据库”相去甚远......

我认为你不能放弃“所有权”(至少在索引上)而不放弃“数据库”的概念......(假设我很好理解你所说的“数据库不会可由任何特定实体控制”)

【讨论】:

我现在在看避难所 Refuge 使用 CouchDB 作为其核心存储 IIRC。现在,Refuge 不是数据库,更像是一个共享平台,对吧?

以上是关于您将使用啥来构建带有客户端的分布式数据库?的主要内容,如果未能解决你的问题,请参考以下文章

Redis构建分布式锁

Go常用包(二十五):ElasticSearch客户端的实现

Redis构建分布式锁

Redis构建分布式锁

hbase中用啥来区分多版本的数据

点燃瘦客户端的ClientCache是 否支持分布式锁