目前,我正在研究p2p应用程序模型。我相信即使对等体之间共享数据,仍然有一个数据库服务器在某处保存用户帐户信息。以Skype为例。虽然用户建立了p2p通信,但我相信他们正在使用PostgreSQL。我想知道的是有没有p2p数据库实现,所以数据是在客户端计算机上分发(和加密)而不是托管在服务器场中?
如果没有,实施p2p数据库会非常困难/不现实吗?
答案 0 :(得分:9)
如果您对非关系数据库感兴趣,那么有许多事务性和非事务性P2P键值存储,例如memcached(在工作组中),或者不同的分布式哈希表(DHT)实现互联网整体(例如CAN,Chord,Pastry,Tapestry和Chimera)。
这是一个很好的起点:http://en.wikipedia.org/wiki/Distributed_hash_table
答案 1 :(得分:6)
你提到Skype,这是一个很好的例子。 AFAIK,Skype在同行之间分发他们的数据库。
但请注意,他们在某些分布在同行上的数据库上拥有专利权。如果你写任何东西,请确保你不踩他们的专利!
我认为这是他们以超过8B的价格卖给微软的部分原因。
我建议您阅读一些关于JoltID (company)的文章,其中包含美国专利7,480,658“涵盖分布式数据库系统和协调分散的点对点计算”的知识产权。
答案 2 :(得分:4)
P2P框架通常独立于任何数据库实现。他们专注于在节点之间传输信息。有些依靠内存数据库来存储临时信息。关于JXTA,用户可以配置节点以使用内存或基于文件的数据库。
我已经使用P2P了很多,而且我还没有听说过一个完全P2P数据库用户导向的框架。我认为你必须在你的数据库之上实现你最喜欢的P2P框架。
答案 3 :(得分:4)
迟到的答案,但对于有同样问题的其他人可能会有所帮助。我同意@JVerstry的说法,P2P数据库的实现通常只是位于标准数据库顶部的通信和同步层。
我知道一个项目基本上在各种网络副本之间对数据库进行双向复制和冲突解决,每个节点都有一个完整的副本。这确实是一个P2P数据库,但请注意还有其他类型(@Canuck正确提到DHT,用于在网络中实现搜索,其中每个节点都拥有数据库的部分副本)。
对于NoSQL方法,您可以查看基于CouchDB的Refuge。我相信这是写作时的早期阶段,但看起来很有趣。
答案 4 :(得分:3)
我不确定这是否能直接回答您的问题,但在我看来,任何一种在本地存储数据并提供同步或与其他实例(或兼容应用程序)共享的应用程序,事实上,某种对等数据库。
以分布式搜索引擎应用为例。该领域有一些实验(例如http://yacy.net)。使用它们,您有一个本地索引,您可以与同行共享,等等。
或者,更重要的是,有点洪流客户......
这些都不是通过SQL正确进行通信,也不一定是存储用户帐户信息的DB服务器。事实上,每个人都在分布式数据存储领域。
在每种情况下,拥有“服务器”(或其所引用的任何内容)的目的是使应用程序的实例不会形成彼此不了解的不相交网络。最好我知道,如果没有某种“永远在线”的参考点,没有可靠的方法可以实现这一点。
对于Skype而言,扭曲的是,除了想要塑造一个独特的网络之外,您还希望a)在用户加入网络时对用户进行身份验证,以及b)存储一定数量的(但不是全部)历史记录(例如,您会收到错过的电话和联系请求的通知;但只有在连接两个Skype客户端时才会显示错过的聊天消息。)
答案 5 :(得分:2)
实际上有一个,但它需要一个新的维护者:先知
Prophet是一种专为Web-2.0后世界设计的新型数据库。它是为了让您与朋友和同事协作,而无需任何特殊的服务器或互联网提供商。
先知的热门词汇内容如下:
具有自我修复冲突解决方案的基础,半对等,对等复制,断开连接,版本化的属性数据库。
它甚至被用来创建一个名为Simple Defects的P2P错误跟踪器