假设我们有一个相互连接的大型数据库图,实际上是一个巨大的分布式数据库。图上的任何节点都可以通过递归查询其邻居来查询整个数据库,该邻居获取它们从邻居那里获得的结果,并将组合后的结果传回查询路径。
此外,假设如果节点自己的数据库包含“足够好”的结果,则可以停止递归,这样,如果附近已经有不错的结果,则不必查询整个网络。这使得我接下来要说的话变得相关了。
每次进行查询时,将返回的数据向发起查询的节点更近一步传输不是很有意义吗?也就是说,被查询的节点查询其邻居并获得X,查询自身并获得Y,将X+Y传递回查询它的节点,将X存储在其数据库中,并从其数据库中删除Y。这不是最终会导致分布式数据库在其节点之间相对于查询期间将被咨询的节点数量具有大致最优的数据分布吗?
这项技术有名字吗?
发布于 2011-06-29 21:01:09
这个话题在网格计算中经常出现;你想在谷歌学者中搜索像data grid replica placement这样的东西。如果访问中存在大量的时间局部性(如果节点想要一些数据,那么它在不久的将来就会想要很多数据),并且数据主要是读取的,那么它就能很好地工作。正如yi_H指出的,如果数据有很多大的修改,“缓存”(副本)一致性就会成为一个大问题。
发布于 2011-06-29 06:45:49
有这样的技术,但你必须意识到,一旦你“缓存”了一个结果,当数据发生变化时,你必须更新它。这意味着要么将数据存储在缓存的数据中,要么通知所有人。实现这样的东西需要大量的协调,这会损害性能。并不像听起来那么简单。你也可以放松数据库给你的约束,然后在你的应用程序中意识到你可能会得到缓存的结果,这些结果是不同步的(如果需要的话,可以要求一个非缓存版本)。
https://stackoverflow.com/questions/6513895
复制相似问题