2

我有一个网站,用户选择某个标准来在该网站上找到另一个用户,然后网站将您与同样在寻找具有相同标准的人的其他人配对。有一个“未配对”用户集合(尚未配对),每次有人提出配对请求时,程序都会根据匹配条件检查集合中的下一个可用用户,并删除该用户如果匹配,则从“未配对”集合中提取,如果没有,则将用户添加到“未配对”集合中。

我的问题是,根据以下标准处理此类集合的最佳方法是什么?

  • 匹配过程是实时的,所以我使用 SignalR 之类的东西来处理实时配对
  • 如果系统关闭,则不需要保留该集合,因为系统已关闭,因此不会有用户“搜索”未配对的用户
  • 如果我横向扩展服务器并拥有多个实例,它们都必须能够从同一个集合中拉出
  • 如果 2 个用户同时请求处理并发(不知道我是否需要)

当我仔细考虑这个问题时出现的一些标准问题是:

  • 我什至需要一个数据库,因为不断添加和删除用户

  • 如果我确实需要某种存储,像 mongodb 这样的东西会是一个不错的选择吗?为什么?

  • 如果我将集合存储在内存中,那么如果我向外扩展,那将无法跨不同的实例工作,对吗?

4

1 回答 1

0
  • 您将需要处理并发问题 - 一旦您找到了要配对的用户,您将要锁定该用户,验证它仍然未配对,将它们配对,然后解锁。否则,当您第一次查看未配对的用户时,您会冒着风险,当您将他们配对时,他们已经被占用了。
  • 目前尚不清楚配对会产生什么副作用 - 但似乎您并不真正关心过去的现在(即如果服务器出现故障 - 配对是无关紧要的)。这听起来像是一个内存操作,可能为了记录/分析的目的而持久化到数据库。
  • 关于不同的实例,如果它在内存中,您仍然可以在服务器上执行它(map/reduce 公式可以在内存中工作,并且可能还有很多其他的)。您还可以构建您的解决方案,将您的用户存储在不同的服务器上,AN 在 server1 上,OZ 在 server2 上(如果这对您的数据有意义)。您还可以将配对所需的数据减少到最低限度,并拥有一台服务器(如您所愿)来处理配对,将配对后发生的任何事情都卸载到任何地方。

抱歉有点通用,对您的数据/用例没有更多了解

于 2012-07-23T22:24:37.977 回答