如何在FireBase中处理这种情况,其中两个用户使用相同的数据库密钥

时间:2016-11-01 14:51:52

标签: android race-condition firebase-security

我正在使用FireBase Street保存名为push的项目,并获取具有自动生成ID的Street项目列表。可以说每个Street都有一个像"path" : "unique value"这样的节点。假设两个用户即将插入具有相同Street的新"path" : "unique value"

有什么方法可以消除这种情况?这就像一个用户将商品放入购物篮的网上商店,现在系统必须保留此商品直到用户购买。

我应该创建一个单独的FireBase根目录,例如“reserved_streets”,并让用户将其保留的Street与user.id一起添加,直到他购买它为止?也许有一个Servlet实例正在运行删除10分钟的条目。

Street列表可能非常大,在rar案例中可能只有1亿

1 个答案:

答案 0 :(得分:1)

阻止Firebase数据库中重复值的典型方法是将这些值转换为键。

所以,如果您当前的型号是(下次,请在您的问题中分享这样一个最小的片段):

streets: {
  "-K1234567": {
    path: "unique path"
  },
  "-K1234568": {
    path: "unique path 2"
  }
}

您将添加使用路径作为键的其他结构(或更改现有结构):

pathsToStreets: {
  "unique path": "-K1234567",
  "unique path 2": "-K1234568"
}

使用此结构可确保路径只有一条街道,您可以使用不能覆盖路径的安全规则。