又刪了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插入表格的方法是在是坑~~~~