6

我有一个分布式 SQL 数据库的想法,该数据库使用 bittorrent 协议来提取和写入其数据。

为了争论,假设这是一个消息应用程序,成千上万的用户在其中运行一个包含消息窗口的程序,以及一个供他们编写消息的输入框。

写入的每条消息都会插入到它们自己的 sqlite 数据库中。

怎么做

  • 下载一个 .torrent 文件,该文件基本上包含用于创建数据库的模式/DDL,并在本地计算机上创建它。
  • 任何时候完成“写入”操作(例如用户想要发送消息),该 INSERT 行(有点像增量)会做两件事:
    • 写入自己的内部数据库
    • 从该行创建一个 .torrent 文件,命名为messaging-[my-ip]-[UTC_timestamp].torrent,并将其发布到跟踪器
  • 运行该应用程序的每个人都在不断地扫描跟踪器以查找具有此特定名称的文件(可能在特定日期之后),下载 .torrent 并托管它,并在其本地数据库上运行 INSERT 命令。

然后您将拥有大量的增量文件,所有 P2P 托管以实现冗余,在许多机器上更新本地 .sqlite 数据库。

我遇到的一些问题

  • 如何抓取某个文件名的种子?我已经阅读了 http bittorrent tracker 规范,但您似乎只能根据文件的特定信息名称查询文件。有没有办法查询一组文件,或者基于文件名?

  • 如何从跟踪器下载 .torrent 文件?我需要将文件托管在中央服务器上,还是可以使用跟踪器以某种方式下载文件?如果我必须自己托管 .torrent 文件......

    • 这不会破坏分散数据库的目的,因为如果我的网站出现故障,应用程序将停止获取更新?

我在这里先向您的帮助表示感谢。

4

1 回答 1

7

Bittorrent 设计用于分发不可变且有点大的数据集,并且并不真正了解跨越多个 torrent 的任何操作。数据库主要是关于变异相对较小的数据块并对这些数据的不同子集执行操作。

尝试将数据库语义硬塞到 bittorent 中,您将不会感到高兴。

充其量您可以使用它来分发数据库的快照。
如果新内容只添加/删除文件(同样,大小很大)而不修改旧文件,那么稍微修改一下 bittorrent 就可以很好地从以前的 torrent 中回收数据。

除此之外的任何事情都需要对协议进行一些重大修改,它不再是普通的 bittorrent。

于 2015-01-31T04:46:52.360 回答