将数字指定为Firebase数据库的键是否有任何缺点?

时间:2017-07-14 07:52:49

标签: android firebase firebase-realtime-database

最近我一直在创建一个新闻应用程序,我在Firebase数据库中存储新闻动画的信息。以下是我的Firebase数据库结构的图像。

Firebase database structure

我在某处读过,不建议将数字作为Firebase数据库的密钥。但是,我无法找到任何解释。 Firebase密钥不应该是数字吗?

如果是这样,我可以为每个新闻类别设置National_01,National_02,National_03 ......等关键名称吗?

3 个答案:

答案 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