0

我有一个用 php 编写的呼叫中心 Web 应用程序。我需要一种更好的方法来管理对客户端数据库的访问。我可能有一个需要呼叫的 1000 人的列表,并且我可能有 10 个人同时查询该数据库以便拉一个人呼叫。什么是我可以保持相同记录的最佳方式,而不是在打电话的人之间出现。

目前,我抓取一条记录,然后写入其上的一个字段以表明它已被锁定。因此,当下一个人查询数据库时,它会检查以确保它没有拉出任何标记为锁定的东西。如果这是一个缓慢的夜晚,这很好。当您有很多人同时进行时,这不是解决问题的足够快的方法。

有任何想法吗?

4

2 回答 2

0

当您查询此人时,您可以尝试做类似这样的事情。

     Select yourPerson from yourTable WITH (rowlock, xlock) WHERE yourPersonid = 1;

这将为您提供对该人的排他行锁定,以防止其他人同时使用同一个人。

于 2013-08-02T19:23:12.637 回答
0

我想也许你正在做类似的事情:

declare @id int, @phone varchar(20), @name varchar(100)
select top (1) @id = id, @phone = phone, @name = name
from People
where status = 'awaiting'

update People
set status = 'in_process'
where id = @id --previously grabbed

--- etc.

这是不安全的,因为其他一些进程也可能在您的更新语句之前选择相同的记录

在这种情况下,您可以将update语句(或delete,取决于您的逻辑)与输出子句一起使用

declare @person table (id int, phone varchar(20), name varchar(100))

update top (1) p
set status = 'in_process'
output inserted.id, inserted.phone, inserted.name into @person
from People p
where status = 'awaiting'
于 2013-08-02T19:58:04.317 回答