我想在Firebase中存储多个大型列表(基本上是任务队列),并让客户端进程监控它们。理想情况下,我希望能够使用事务在列表之间移动任务。简单的第一种方法是保留单独的任务列表并在共同的祖先节点上运行事务。
Q1 即可。每次运行事务时,此事务是否最终获取共同祖先下的所有数据?
如果是这样,如果列表很大并且我们必须反复进行交易,那么我的第一种方法似乎很浪费。我的下一个想法是在单个节点下保存多个列表,但优先级充当它们所属列表的标签。因此,您可以查询特定的优先级标记,并通过更改优先级在列表之间移动任务。
Q2 即可。像这样标记列表有什么大的缺点吗?这是好的做法吗?
答案 0 :(得分:0)
这是相当古老的,但仍然是:
Q1:如果您指的是Firebase.transaction(),那么是的,它将获取所有数据。不要这样做。
Q2:这可能是一个好主意,但请记住:
1)如果你使用.orderByX,(按标签过滤),你不能第二次使用.orderByX。换句话说,您可以查询'priority = done'或者您可以'order_by_date',但目前您无法将这两者结合起来。
2)您将无法为单个节点的某些过滤部分编写自定义验证规则。
更好的解决方案:
1)查看多地点更新:https://www.firebase.com/blog/2015-09-24-atomic-writes-and-more.html
2)查看firebase-transactions项目:https://github.com/vacuumlabs/firebase-transactions(免责声明:我是其中一位作者)