我所拥有的简化结构是:
用户可以更新根信息,不应该允许对子用户进行任何其他操作(因为根更改可能会影响到所有的根信息)。
此外,用户也可以对子用户进行操作(当然,如果根没有使用)。例如,用户可以在同一时间更改2个子级,这是允许的,因为每个子节点都是独立的。
为了确保没有腐败,我需要这个结构中的锁:
这里困扰我的是需要锁定所有的子级--在一个分布式系统中,这意味着发送那么多请求到分布式锁定。
有什么更好的解决办法吗?
发布于 2016-04-13 17:40:00
你错过了两件事。首先,多个线程同时从节点读取是安全的,只要没有人向它写入。第二,子节点可以看作是较小树的根,因此,除了叶节点之外,同样的算法/解决方案也可以应用于所有节点。第一个是最重要的。以下是你如何做到的:
在树中的所有节点上使用读/写互斥。允许任意数量的进程并发读取,或者允许单个进程在任何时候写入节点。
阅读:
编写:
这意味着两个兄弟姐妹可以并发修改,任意数量的读取都可以并发执行。然而,阅读的成本是你需要抓取O(log100(tree_height))读锁,对于每层都有大约100个子树的树。这不太可能是一个真正的问题,除非您的树很大,有非常多的读和写到同一个叶节点。
这假定任何子级都不能修改其父级。
https://stackoverflow.com/questions/36272564
复制相似问题