如何同时从数据库中检索对象?

时间:2017-06-09 17:24:06

标签: python mysql sql django algorithm

我正在使用Django构建社交分析网站。

以下是我的use cases之一:

"Users" of the site analyze social media "profiles" (from Snapchat, Instagram, Twitter, etc...). 
Each social media "profile" is only analyzed once (and not more).

我有一个SQL查询,可以检索队列中的profiles。例如,返回的第一个5 profiles(当我重复此查询5次时)是:

xmax123, darcy67, shop_hallmary10, christmas_shop987, lilybend_09

user分析profile xmax123后,xmax123将不再显示其他users进行分析。

我的问题是当多个users同时调用此SQL查询时,会为所有profile返回相同的社交媒体xmax123users)。换句话说,当两个usersuser 1user 2)同时调用此SQL查询时,相同的社交媒体profilexmax123)是为他们两个回来了。这意味着xmas123将被2users分析两次,这是一个问题。

我希望确保user 1得到xmax123user 2得到darcy67,即使两个users同时调用此SQL查询也是如此。有哪些策略可以解决这个问题?

2 个答案:

答案 0 :(得分:2)

您可以使用互斥锁来限制访问。

没有看到代码库,我不确定在哪里放置它。您可以使用它来锁定访问权限,以便一次只能查询一个用户。然后在查询一个人后释放互斥锁,以便下一个用户现在可以访问该数据库。

答案 1 :(得分:1)

或许您可以查询用户,然后在完成后将其标记为“已完成”,因此如果有人在该用户中工作,则该用户仍可供其他用户使用,因此您可能需要“工作”布尔字段以便当有人在其中工作时你可以锁定它..