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

为了争辩,可以说这是一个消息传递应用程序,其中成千上万的用户运行一个程序,该程序包含一个消息传递窗口以及一个供他们编写消息的输入框。

写入的每个消息都会对自己的sqlite DB进行INSERT。

怎么做

  • 下载一个.torrent文件,该文件实质上包含用于创建数据库的架构/DDL,然后在本地计算机上创建该文件。
  • 每当执行“写”操作(例如用户要发送消息)时,INSERT行(有点像增量)都会做两件事:
  • 写入自己的内部数据库
  • 从该行开始创建一个.torrent文件,命名为message-[my-ip]-[UTC_timestamp] .torrent,然后将其发布到跟踪器
  • 运行该应用程序的每个人都在不断跟踪跟踪器中是否有此名称的文件(可能在某个日期之后),下载.torrent并将其托管,然后在其本地DB上运行INSERT命令。

  • 然后,您将拥有大量的增量文件,所有P2P都托管用于冗余,可以在许多计算机上更新本地.sqlite数据库。

    我遇到的一些问题
  • 如何抓取某个文件名的种子?我已经阅读了http bittorrent跟踪器规范,但您似乎只能根据文件的特定信息名称来查询文件。有没有办法查询一组文件或基于文件名?
  • 如何从跟踪器下载.torrent文件?我需要将文件托管在集中式服务器上,还是可以使用跟踪器以某种方式下载文件?如果我必须自己托管.torrent文件...
  • 这是否会破坏分散数据库的目的,因为如果我的网站出现故障,应用程序将停止获取更新?

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

    最佳答案

    Bittorrent是为分发不可变的,有些大的数据集而设计的,它实际上并不了解跨越多个torrent的任何操作。
    数据库主要是关于使相对较小的数据块变异并对其不同子集执行操作。

    尝试将数据库语义刺入棘手的事情,您将不会高兴。

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

    除此之外,还需要对协议(protocol)进行一些重大修改,而不再是真正的bittorrent。

    关于sql - 建立一个分布式bittorrent-SQL数据库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28241454/

    10-12 02:50