我正在考虑使用firebase作为一个web应用程序的用户数据存储库,我目前的想法是使用用户加入时的时间戳作为引用该用户数据的键来存储每个用户的数据,这种方案的优点是它是一种为用户分配唯一整数id的简单方法,并且使用户的时间顺序排序变得简单。
然而,缺点是如果两个add user
请求提交的数据相同,应用程序会很乐意添加两个单独的条目,这是不公平的。我可以把事情打乱(我开始认为我应该使用电子邮件作为关键,并根据连接数据而不是我当前的方案来确定优先级),但假设我不想这样做,有什么方法可以防止重复数据吗?
最简单的方法可能是这样做:
if(!searchFirebaseForUser(data)) {
addUser(data);
}
但这绝对是一个竞态条件;两个请求很容易在数据库中同时查询和查找不到用户,并且同时添加。我想在事务中完成此操作,但Firebase事务支持似乎不支持此情况。有什么方法可以处理此问题吗?
5条答案
按热度按时间8i9zcol21#
您可能必须使用用户名或电子邮件地址作为密钥,并尝试原子地写入该位置。
下面是transaction函数参考中的相关代码示例,在本例中,我们使用
wilma
作为用户的键。ih99xse12#
安全规则不足以强制唯一性吗?我不知道它们是否是原子的。
x7rlezfr3#
您可以使用
push
自动生成按时间顺序递增的ID,这些ID不会与其他客户机冲突,即使它们是同时创建的(其中包含随机成分)。例如:
4urapxun4#
唯一可靠的解决方案应该由数据库核心提供。
我想唯一的解决办法是使用不同的数据库。或者使用node express编写自己的后端。
px9o7tmv5#
代替在fire-base数据库中定义规则,防止重复条目的最简单方法是首先从fire-base数据库中获取所有数据,并将其与您想要存储的数据(新数据)进行比较,如果与先前数据匹配,则再次放弃存储在数据库中,否则存储在数据库中。检查以下内容以获得更多清晰度。
下面的代码用于向firebase添加数据
使用onStart从firebase数据库获取详细信息
最后添加pojo类
}