0

我正在实现一个文件系统。每个文件夹都有一个 ACL,它基本上只是一个允许读取/写入文件夹的用户 ID 列表。我想通过将 ACL 从上层文件夹复制到下层文件夹来实现这一点 - 我想要继承权限,但我不想在读取时查找它们。我将文件夹之间的关系存储为对子文件夹中超级文件夹的引用。

那么,以下操作顺序很难用 HRD 解决:

  1. 将文件夹 B 作为文件夹 A 的子文件夹放入数据存储中,该文件夹已存在。
  2. 更改 A 的权限。

问题是,当我在步骤 2 中更改 A 的权限时,我需要查找 A 的所有子级,以便我也可以将权限更改应用于它们。不幸的是,这意味着查询,因此 B 可能不会出现在该查询中。B 可能会错过权限更改!

到目前为止,我想到的唯一解决方案是双向存储“子文件夹”关系:A 引用了它的所有子文件夹,B 引用了它的超级文件夹。然后我可以使用跨组事务同时更新 A 和 B,并且不需要在步骤 2 中进行查询。这可能会更好,因为直接获取可以轻松缓存,不需要索引扫描等。

有人有其他想法吗?我不喜欢这个解决方案的冗余存储需求,或者 XG 事务的需求。

4

1 回答 1

1

数据存储区中唯一具有事务性和强一致性的单元是实体组。因此,如果您希望 B 的读者通过事务保证了解对 A 的更改,则 A 和 B 需要在同一个组中。听起来您正试图避免这种方法的缺点(争用、每组写入率),因此我们需要找到一个可接受的折衷方案。

例如,如果 A 和 B 实体不能位于同一组中,但此类元数据的实例可以位于同一组中(例如很少更新)并且与原始实体(如果实体和此元数据的 XG 更新是可以的),您可以保持数据分离和类比。

如果您有一个可以快速识别 B 的所有层次结构祖先的数据结构,您可以在确定 B 及其祖先的聚合元数据属性时执行所有祖先的异步读取。您可以通过存储实体的完整路径来管理它。这涉及更多的数据存储操作(按路径长度的顺序),但不会增加请求时间,并且您可以保持这些数据标准化。

于 2012-01-28T23:07:43.050 回答