又删了12个人 ,节约了94M的空间!——来让做过IM应用的人帮你分析

让技术宅来辟谣

又删了12个人
,节约了94M的空间!【不要让拉黑你的人占用你的空间,您也试试吧,复制我的消息,找到微信里的设置,通用,群发助手,全选,复制粘贴消息发送就行,谁的名字变色了,删掉就行!】
已啦。

有朋友今天找我,说最近老是收到这条微信消息,被烦到不要不要的境地。
但是那么多人在发,不知道是不是真的删除几个拉黑自己的人就能节省很大空间出来?只是想到自己收到类似信息时的反感心情,又不敢轻易尝试,所以搞得自己很纠结。

正好我曾经做过类似的IM即时通讯工具,为了有理有据,那么我就从微信客户端的数据存储角度来分析这个问题。

首先鉴于微信存储的数据特征,采用SQLite数据库结合本地文件来存储本地数据,数据库为local.db,本地文件存储在document目录下的localfile文件夹中。

下面我们就来进行详细的数据库表结构分析。

1 msg表详细信息

表名:msg 备注:消息数据存储表

主键 字段名 数据类型 长度 可空 备注
ID int 32 消息唯一id
m_chatId String 64 聊天id
m_strOppositeSideName String 64 发消息者名称
m_strMessageBody String 256 消息内容
m_isFromSelf Bool 2 是否是自己发的小
m_messageStatus Int 32 消息状态
m_strTime String 32 消息时间戳
m_oppositeChaterId String 64 发送方id
m_contentType Int 32 内容类型
mediaPath String 256 附件路径
loginUserId Int 32 当前用户id,对应loginUser表的id

注:每收发一条消息,均向该表中添加一条数据,如果收发的是语音、图片、小视频,则同时往localfile文件夹下存储一个附件文件,消息的mediaPath项纪录附件完整的路径。

2 contact表详细信息

表名: contact 备注:联系人信息存储表

主键 字段名 数据类型 长度 可空 备注
id string 64 主键,微信号
Name String 64 名称
City Stirng 32 地区
HeadPic String 256 头像链接
Sex Bool 2 性别
Signature String 256 个性签名
From String 64 来源
Comments String 64 备注名
PhoneNum1 String 11 备注,手机号码1
PhoneNum2 String 11 备注,手机号码2
PhoneNum3 String 11 备注,手机号码3
PhoneNum4 String 11 备注,手机号码4
PhoneNum5 String 11 备注,手机号码5
TagId Int 64 标签id,对应tag表的主键,默认无标签
DescString String 256 描述
DescPhoto String 64 描述图片路径
IsStar Bool 2 是否星标好友,默认不是
CanSeeMe Bool 2 可以看我朋友圈,默认可看
SeeHis Bool 2 看他朋友圈,默认可看
Black Bool 2 加入黑名单,默认不加
loginUserId Int 32 当前用户id,对应loginUser表的id

3 chat表详细信息

表名:chat 备注:聊天信息表

主键 字段名 数据类型 长度 可空 备注
id int 32 主键,会话id,群聊时为生成id,单聊则为对方id
isTop Bool 2 是否置顶,默认不置顶
Mute Bool 2 消息免打扰,默认不开启
Background String 64 聊天背景,默认不使用
isGroup Bool 2 是否群聊
GroupName String 32 群聊名称,默认前三个人名,群聊有效
Code String 32 群二维码,群聊有效
Notice String 256 群公告,群聊有效
NikeName String 32 我在本群的昵称,默认用微信昵称
ShowNickName Bool 2 显示他人在群里的昵称
loginUserId Int 32 当前用户id,对应loginUser表的id

4 group_member表详细信息

表名:group_member 备注:群组成员表。

主键 字段名 数据类型 长度 可空 备注
ContactId String 64 联合主键,contact表的主键
ChatId int 32 联合主键,chat表主键
GroupNickName String 32 用户在群聊中的昵称

5 tag 表详细信息

表名:tag 备注:标签表

主键 字段名 数据类型 长度 可空 备注
id int 10 主键
Name String 32 Tag名称
loginUserId Int 32 当前用户id,对应loginUser表的id

6 loginUser表详细信息

表名: loginUser备注:登录用户信息表

主键 字段名 数据类型 长度 可空 备注
Account String 32 账户名,主键
id string 64 微信号
Name String 64 名称
City Stirng 32 地区
HeadPic String 256 头像链接
Sex Bool 2 性别
Signature String 256 个性签名
From String 64 来源
Comments String 64 备注名

表结构分析到此结束。

怎么理解这个信息呢,针对最后一张表loginUser表,我们可以理解为这就是一张excel的表格结构定义,这个表格包含了Account、id、Name、City、HeadPic、Sex、Signature、From、Comments这么多列。每次有不通的用户登录后,该表格中就多插入一条数据。(主键表示该列的数据唯一)

也就是说没多一个联系人,则contact表多一条数据,都一条消息,则msg表多一条数据(语音、图片、小视频文件同时存入localfile文件夹中),多一个群组,则聊天表格多一条数据。

从上面分析可以看出,好友基本都是文本信息,占用空间微乎其微,而且好友数据相对固定(微信最多可加好友300人?)而真正数据膨胀的则是msg既聊天消息(微信对聊天条数并没有限制,而且聊天中的图片、表情、语音、视频一般都是兆或者几十兆的数据单位)。

所以,好友数和空间内存没有关系
占用存储空间的不是好友,而是和好友的聊天消息
本文完

ps:清理内存的方法,设置--通用--清理储存空间--查看微信储存空间--选择删除
再ps:markdown插入表格的方法是在是坑~~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容