有没有办法用Firestore强制执行外键约束?

时间:2018-04-09 19:12:19

标签: firebase google-cloud-firestore

我尝试添加库/图层以使用Firestore,它将以处理外键约束的方式生成创建/更新/删除操作的正确代码。用户可以指定这样的模式:

struct Game {
   players: List<Player>;
   regions: List<Region>;
}
struct Player {
   occupiedBases: List<&Base>; // & means a foreign reference, this base *must* exist.
}
struct Region {
   bases: List<Base>;
}
struct Base {
   position: Vec2;
}

&amp; amp;是:

  • 你不能拥有&amp;引用一个不存在的节点。
  • 如果有人有&amp;节点,则无法删除节点。参考它。

换句话说,它是一个外键约束。

我对如何做到这一点有一个粗略的想法:

  • 每次玩家获得一个新的&amp; Base时,它会自动递增目标基础文档的__refCount字段。
  • 每次有人试图删除Base时,都会检查__refCount是否为0。

然而,没有&#34;原子地增加&#34;。为此,我需要交易。但是,如果我有事务,那么修改__refCount的一个人将在每个其他事务中导致失败/重试,修改相同的__refCount。换句话说,__ refCount现在是一个热点。如果很多&amp;引用引用相同的节点,这将导致一些大规模的减速,因为它们都读取/写入相同的整数。

当我进一步深入这个兔子洞时,我想,这必须存在,有人必须已经这样做了。是否有一种确定的好方法来做这样的外键约束?

0 个答案:

没有答案