Android FirBase RealTimeDb JsonTree设计,基于RealTime聊天的json格式
来源:互联网 发布:罗技g502软件 编辑:程序博客网 时间:2024/05/30 22:57
这一次,我要用 FirBase RealTimeDb实时数据库写个聊天的demo,在存储数据和查询数据时需要规划一下json数据格式,要不然后期就蒙圈了,google的官方文章如下:
https://firebase.google.com/docs/database/android/structure-data
为举例说明为什么嵌套数据不正确,现假设一个如下所示的多层嵌套结构:
{
// This is a poorly nested data architecture, because iterating the children
// of the "chats" node to get a list of conversation titles requires
// potentially downloading hundreds of megabytes of messages
"chats": {
"one": {
"title": "Historical Tech Pioneers",
"messages": {
"m1": { "sender": "ghopper", "message": "Relay malfunction found. Cause: moth." },
"m2": { ... },
// a very long list of messages
}
},
"two": { ... }
}
}
若采用这种嵌套设计,循环访问数据就会出现问题。例如,要列出聊天对话标题,就需要将整个 chats 树(包括所有成员和消息)都下载到客户端。
平展数据结构
如果数据被拆分到不同路径(又称反规范化),则可根据需要通过不同调用有效地下载。 请考虑此平面化结构:
{
// Chats contains only meta info about each conversation
// stored under the chats's unique ID
"chats": {
"one": {
"title": "Historical Tech Pioneers",
"lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
"timestamp": 1459361875666
},
"two": { ... },
"three": { ... }
},
// Conversation members are easily accessible
// and stored by chat conversation ID
"members": {
// we'll talk about indices like this below
"one": {
"ghopper": true,
"alovelace": true,
"eclarke": true
},
"two": { ... },
"three": { ... }
},
// Messages are separate from data we may want to iterate quickly
// but still easily paginated and queried, and organized by chat
// converation ID
"messages": {
"one": {
"m1": {
"name": "eclarke",
"message": "The relay seems to be malfunctioning.",
"timestamp": 1459361875337
},
"m2": { ... },
"m3": { ... }
},
"two": { ... },
"three": { ... }
}
}
官方的建议还是要才用的,淡然,我觉得官方给的第二层结构"members"这个对我来说并没有什么用,于是我打算把它去掉,google核心的思想就是避免嵌套,遵循这一原则,我稍微修改了官方的json结构最终是下面的.
存储聊天内容的json
{
"chats": {
chatlist: [
{
{
"title": "Historical Tech Pioneers",
"lastMessage": "ghopper: Relay malfunction found. Cause: moth.",
"timestamp": 1459361875666,
"member": "天涯恋",
"fridlogo": "pic",
"messageid": "青青"
}
}
]
},
"messages": {
"messages": {
"青青": {[
{
"name": "eclarke",
"message": "The relay seems to be malfunctioning.",
"timestamp": 1459361875337
}]
}
}
}
在chats对象中可以查看到聊天的数量,和哪个好友,头像,时间,对方id,拿到id后可以在message信息中获取好友的聊天记录
存储用户信息的json,这个没啥好说的,保存所有用户的信息
{
users:{userid:
{
"id": "00000000-0000-0000-0000-000000000000",
"createTime": "0001-01-01 00:00:00",
"level": 0,
"nick": "string",
"gender": false,
"birthday": "0001-01-01 00:00:00",
"cellphoneNumber": "string",
"emailAddress": "string",
"name": "string",
"picture": "string""address": "string"
}
}
}
- Android FirBase RealTimeDb JsonTree设计,基于RealTime聊天的json格式
- Android 集成FireBase Realtime DataBase实现聊天
- jsonTree
- Android数据传输格式(基于JSON格式)
- [Android通信]基于socket的聊天app(三):传输json数据
- Android蓝牙聊天程序的扩展开发(基于Google Sample,类QQ设计)
- 基于JSON的Ajax简易网络聊天程序(PHP)
- Android 基于Socket的聊天应用(二)
- Android基于蓝牙的聊天demo
- Android:基于局域网的聊天系统
- Android基于蓝牙的聊天demo
- android-实例-基于蓝牙的聊天程序
- 基于Android的WiFi聊天系统
- 基于json遍历的输出格式优化
- 基于P2P的聊天
- 基于asmack的聊天
- 基于百度云推送的高仿微信实时聊天Android源码+
- [Android通信]基于socket的聊天app(五):收发表情
- require.js的结构及常用组件用法
- codeforces 792C Divide by Three
- 十大编程算法助程序员走上高手之路
- 96. Unique Binary Search Trees
- 删除linux里已断开的软链接(dangling link)
- Android FirBase RealTimeDb JsonTree设计,基于RealTime聊天的json格式
- Android 偷梁换柱!!!带你实现修改shareSDK九宫格布局,去除阴影的动画。
- IntelliJ IDEA for mac 快捷键
- 数组,array,vector
- window上轻松安装CNTK并运行demo
- SpringMVC封装数据的类型转化器( Date)
- 单元测试心得
- 前端模块化
- RecycleView添加分割线(ItemDecoration)以及交互动画效果