后端大佬们看过来, App 的手机通讯录数据在服务器的存储问题

2020-06-29 17:00:14 +08:00
 xiaoyong

这里的通讯录实际上是指“手机联系人”的数据。不管是“微信”还是“支付宝”,目前,但凡是个有一点点社交元素的的 App 几乎都有“通讯录”(或叫“好友”或叫“朋友”),然后点击“添加”都有一个“手机联系人”。

这个“手机联系人”一般都是把用户手机本地通讯录数据上传到服务器保存的数据。 但是这个数据怎么存储才能提高读写的效率(需要考虑及时更新、按字母分组显示、App 内好友关系状态等基本需求),是我现在遇到的一个问题。数据少的时候还不明显。稍微多了之后,各种问题就出现了。例如:一般每个用户 100-300 条数据,平均按 200 条计算吧,如果有 10W 用户的话,这就是 2000W 条数据。

现在求个更好的解决方案,主要是后端的数据读写机制以及存储方案设计。烦请各位大佬不吝赐教。

1992 次点击
所在节点    程序员
10 条回复
takemeaway
2020-06-29 17:03:32 +08:00
2000W 你不会重复吗? 用户关系都是关联的啊。
xiaoyong
2020-06-29 17:07:06 +08:00
@takemeaway 手机联系人里面的关系都是手机号码吧?而且每两个手机号的之间的关系都不同(例如备注名)。
xiaolinjia
2020-06-29 17:16:18 +08:00
我想这就是图数据库的用处了吧。传统的关系型数据库怎么处理好,我也蹲个答案。
x537196
2020-06-29 17:25:33 +08:00
就在客户端本地对比不行吗?
lqs
2020-06-29 17:31:34 +08:00
如果不需要反向查询(用手机号找谁的通讯录里有这个号),那么就每个手机号用 5 个字节表示,每个用户存 200 条手机号就是 1KB,全部 10 万用户的通讯录总共 100MB 空间,随便找个方案就能存下。
ibegyourpardon
2020-06-29 17:57:40 +08:00
我怎么觉得 json 就够了。。。
leer
2020-06-30 08:10:45 +08:00
不是存储空间的问题,是存储结构的问题
以手机号建立用户表,以朋友表保存昵称备注
treblex
2020-06-30 10:38:29 +08:00
我以为 app 申请通讯录权限,只是拿手机号查一下用户表,看有没有你认识的好友
我还是天真了
xiaoyong
2020-07-01 23:43:24 +08:00
@lqs 我个人也趋向于你的这个思路。正在想办法实现和优化。谢谢
xiaoyong
2020-07-01 23:44:04 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/685671

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX