写相互加好友时碰到的问题。
数据库好友关系( friend_relation )表目前是这样的:
字段: id, account_id, friend_account_id, status
说明:这条好友关系 id, 用户 id, 朋友 id, 状态标记是否被删除
于是 2 个用户相互添加为好友就会出现对应的 2 条好友关系 friend_relation (这两条好友关系的 account_id 与 friend_account_id 对调)
那么现在问题来了,如果 2 个用户同时接受对方发起的交友请求,会出现对应的 2 个处理交友的进程都认为双方都没加过好友,于是最后 2 个进程共同插入了 4 条好友关系,而实际上应该插入 2 条就够了。
加锁好像不行,因为在处理之前连被加锁的数据都没有,根本不能对数据行加锁。
加唯一 index,应该怎么加,业务上要允许重复多次加删同一个人的好友关系,如果对( account_id, friend_account_id, status )作为一个唯一 index,那么只能删一次这个好友,这样也不行。
我应该怎么解决这个问题?
========== 我现在只能先把插入好友关系这一步工作都放到一个队列里去干
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.