最近我一直在创建一个新闻应用程序,我在Firebase数据库中存储新闻动画的信息。以下是我的Firebase数据库结构的图像。
我在某处读过,不建议将数字作为Firebase数据库的密钥。但是,我无法找到任何解释。 Firebase密钥不应该是数字吗?
如果是这样,我可以为每个新闻类别设置National_01,National_02,National_03 ......等关键名称吗?
答案 0 :(得分:2)
TL; DR 对于静态数据和迷你项目,可以使用“National_01”等键;使用Push Keys进行动态数据和大型项目。
以下是使用Firebase推送密钥的一些好处
自动生成推送键
如果您在必须更新数据时继续使用手动创建的密钥,则必须创建如下所示的密钥:
String category = "National;"
count = count + 1;
String key = category + count.toString();
// Not say keep track of the "count" too
相反,如果您决定使用Firebase自动生成的推送键:
String key = mDatabase.child(category).push().getKey();
几乎不可能复制推键
如果使用自生成密钥,则在创建密钥时可能会出错,从而创建重复密钥。在这种情况下,由于您在复制的原始密钥下覆盖数据,因此可能会丢失数据。
然而,push id几乎不可能复制,也不需要额外的代码来实现。
结论
所以继续只使用自生成的密钥,并且只有当你的数据是静态的时(我不认为它应该是因为它是一个新闻应用程序)并且你不希望扩展这个静态数据(这也是对于新闻应用而言,这是不切实际的想法。
但请记住,使用Push Keys可以很方便地使用,并且如果您打算将来扩展您的应用程序,它是未来的证明。 :)
修改强>
此外,生成的推送密钥是基于timestamp
生成的,因此所有密钥都将按时间顺序排序!!
答案 1 :(得分:1)
在Firebase数据库中使用密钥名称并不是一种不好的做法,但根据您的应用程序复杂性,您可以选择何时使用这些密钥或随机生成的密钥。
使用push()
方法生成的密钥可以保证唯一性,因为算法基于timestamp
。因此,您的所有商品都会按时间顺序自动订购。
如果您希望用户在您的应用中发布新闻,因为Firebase会为每个新新闻生成唯一键,如果多个用户同时添加帖子,则不会发生写入冲突。使用key names
以非常简单的方式无法实现这一目标。
希望它有所帮助。
答案 2 :(得分:0)
作为记录:我已经阅读了Firebase最佳实践文档,您不应该对大型项目使用自定义键,因为这将禁用在后台使用的分片方法。
您可以在以下位置查看更多详细信息: https://firebase.google.com/docs/firestore/best-practices