我有一个我正在尝试构建的系统,可以实时匹配用户。根据特定标准,用户的匹配是 1 对 1。我有以下数据库表(有点像聊天轮盘赌类型系统):
Pool
+UserId
+Gender
+City
+Solo (bool)
Matched
+UserId
+PartnerId
当用户进入某个页面时,他们被添加到Pool
表中并Solo
设置为 true。然后系统通过查询Pool
表来搜索另一个用户,并返回结果Solo
为真(意味着他们没有合作伙伴)并且Gender
也City
等于他们查询的任何内容。如果返回匹配项,则将两个用户都放入Matched
数据库并将他们在表中的两Solo
列都转换为. 如果它们断开连接,它们将从表中删除,并且它们的列将更改为。我在尝试构建线程安全和并发的方式时遇到了麻烦。以下是我遇到的一些问题:Pool
false
Matched
Solo
true
- 如果 2 个用户Pool
同时查询数据库并且都返回相同的“solo”用户怎么办?我该如何防止这种情况?
- 如果 1 个用户Pool
在用户的solo
列被更改之前查询,那么现在该用户在结果集中返回,但从技术上讲,他不是单独的
- 我还面临哪些其他并发/线程安全问题?还有比这更好的方法吗?