这个分布式数据库数据定位优化算法应该如何命名?

3
假设我们有一个相互连接的大型数据库图,实际上是一个巨大的分布式数据库。图上的任何节点都可以通过递归查询其邻居来查询整个数据库,邻居会将它们从邻居处获取的结果组合后向下传递查询路径。
此外,假设有能力停止递归,如果节点自己的数据库包含“足够好”的结果,则不必查询整个网络,因此如果附近已经有不错的结果,则我即将说的内容就很相关了。
每次进行查询时,将返回的数据向更接近发起查询的节点转移一步,这样做是否有意义?也就是说,被查询的节点查询其邻居并获得X,查询自身并获得Y,将X+Y传回查询它的节点,将X存储在其数据库中,并从其数据库中删除Y。这样做是否最终会导致分布式数据库在节点之间具有大致最优的数据分布,平均而言,在查询期间将被查询的节点数量?
这种技术有名称吗?

1
只有当你了解“数据本地性”的概念时,这才有一定的意义——也就是说,源自于一组节点的查询想要某种类型的数据(例如,如果你的大型数据库存储HTML页面,则源自于意大利的查询想要用意大利语显示页面)。基本上,你正在尝试进行“分布式缓存”的形式。我不理解的是,在所有这些操作之后,Y会被存储在哪里。你应该将Y传递到某个地方进行存储,而不是删除它... - akappa
我不明白为什么节点会删除自己的Y信息? - Tobu
1
你的问题让我想起了缓存和强化学习,当被查询的事物更容易获得/给予更多权重时,它们会更有效。但这只是类比。 - Tobu
1
@mwhite:所以你正在从源数据库一直复制相同的信息到请求者那里。此外,靠近请求者的数据库将不得不存储大量数据。这不好...你必须移动数据,而不是在每个查询中多次复制东西。我认为基于缓存和显式请求“移动数据”之间的方法应该更好。 - akappa
哎呀,我在想:“只需要一步。如果请求者多次重复查询,那么它最终会被全部移动。”但实际上你是对的。你需要一种区分你的数据和邻居数据的方法来传递数据。这有点麻烦。我认为你大概是对的。 - mwhite
显示剩余2条评论
2个回答

2
这个话题在网格计算中经常出现; 您可以搜索类似于数据网格副本放置的Google学者。如果访问中有很多时间局部性(如果节点需要某些数据,它将在不久的将来需要它),并且数据主要是只读的,则效果很好。正如yi_H指出的那样,如果数据有很多大的修改,“缓存”(副本)一致性就成为一个重要问题。

1

有这样的技术,但您必须意识到一旦“缓存”结果,则必须在数据更改时更新它..这意味着您必须将其缓存的数据保存下来或通知所有人。实现这样的东西需要很多协调,这会损害性能..不像听起来那么容易。您还可以放宽数据库给您的约束,然后在应用程序中注意可能会得到未同步的缓存结果(如果必要,请请求非缓存版本)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接