这里的通讯录实际上是指“手机联系人”的数据。不管是“微信”还是“支付宝”,目前,但凡是个有一点点社交元素的的 App 几乎都有“通讯录”(或叫“好友”或叫“朋友”),然后点击“添加”都有一个“手机联系人”。
这个“手机联系人”一般都是把用户手机本地通讯录数据上传到服务器保存的数据。 但是这个数据怎么存储才能提高读写的效率(需要考虑及时更新、按字母分组显示、App 内好友关系状态等基本需求),是我现在遇到的一个问题。数据少的时候还不明显。稍微多了之后,各种问题就出现了。例如:一般每个用户 100-300 条数据,平均按 200 条计算吧,如果有 10W 用户的话,这就是 2000W 条数据。
现在求个更好的解决方案,主要是后端的数据读写机制以及存储方案设计。烦请各位大佬不吝赐教。
![]() | 1 takemeaway 2020-06-29 17:03:32 +08:00 2000W 你不会重复吗? 用户关系都是关联的啊。 |
![]() | 2 xiaoyong OP @takemeaway 手机联系人里面的关系都是手机号码吧?而且每两个手机号的之间的关系都不同(例如备注名)。 |
3 xiaolinjia 2020-06-29 17:16:18 +08:00 我想这就是图数据库的用处了吧。传统的关系型数据库怎么处理好,我也蹲个答案。 |
![]() | 4 x537196 2020-06-29 17:25:33 +08:00 就在客户端本地对比不行吗? |
![]() | 5 lqs 2020-06-29 17:31:34 +08:00 如果不需要反向查询(用手机号找谁的通讯录里有这个号),那么就每个手机号用 5 个字节表示,每个用户存 200 条手机号就是 1KB,全部 10 万用户的通讯录总共 100MB 空间,随便找个方案就能存下。 |
6 ibegyourpardon 2020-06-29 17:57:40 +08:00 我怎么觉得 json 就够了。。。 |
7 leer 2020-06-30 08:10:45 +08:00 via iPhone 不是存储空间的问题,是存储结构的问题 以手机号建立用户表,以朋友表保存昵称备注 |
![]() | 8 treblex 2020-06-30 10:38:29 +08:00 我以为 app 申请通讯录权限,只是拿手机号查一下用户表,看有没有你认识的好友 我还是天真了 |
![]() | 10 xiaoyong OP |