Firebase实时数据库:数据推送方式是否存在差异?
两种Firebase实时数据库写法的差异分析
这两种写法区别非常大,完全不是一回事儿,咱拆开来唠明白:
写法一的作用
my_ref= FirebaseDatabase.getInstance().getReference().child("messages").child(current_id).child(user_id).push();
这个写法是先精准定位到你想要的目标路径 messages/current_id/user_id,然后调用push()方法。Firebase会在这个指定路径下生成一个唯一的自动ID(也就是你说的push_id),最终你通过这个my_ref写入的数据,会存在 messages/current_id/user_id/[自动生成的pushId] 这个位置。
这完全符合你描述的节点结构需求——把消息归类到对应的current_id和user_id下面,方便后续按用户或会话查询消息。
写法二的作用
my_ref= FirebaseDatabase.getInstance().getReference().push();
这个写法就简单粗暴了:直接在Firebase实时数据库的根节点下生成一个新的自动ID节点。你通过这个my_ref写入的数据,会直接存在 /[自动生成的pushId] 位置,和你想要的messages节点半毛钱关系都没有,完全偏离了你的业务结构。
核心差异总结
- 存储路径完全不同:写法一的消息存在
messages/current_id/user_id层级下,写法二的消息直接在根节点“裸奔” - 业务逻辑匹配度不同:写法一完美贴合你需要的消息分类存储结构,写法二完全不符合你的需求
- 数据可维护性不同:写法一能按
current_id和user_id轻松分组查询消息,写法二的消息分散在根节点,后续查询和管理会非常混乱
内容的提问来源于stack exchange,提问作者user9609225
相关产品推荐
相关产品推荐

