php / mysql - 要解决的错误并发问题

时间:2015-01-24 14:13:23

标签: php mysql concurrency

变量:

1)名为doc_types的表,它有许多用户想要的文档类型。

  • 字段:id_doc_type as int(14)AUTOINCREMENT,name as varchar(25)

2)表命名文档,包含用户创建的所有文档。

  • 字段:id_document as int(14)AUTOINCREMENT,id_doc_type as int(14),doc_number as int(14)等...

3)表名为secuence,这是我仍然遇到的并发问题的黑客攻击。

  • 字段:id_secuence as int(14)AUTOINCREMENT,ref as int(14)

问题:

服务器每秒有大约1200次查询,在高峰时段并发方案中有超过100个唯一用户。每个用户生成多种文档类型,每种文档类型必须具有文档类型的唯一编号。 很长一段时间,我仍然无法修复它。

我的解决方案: 2个功能:

1)使用AUTOINCREMENT调用生成下一个数字以确保其结果

function generate_secuence($last_number)
    {
        // get the last id generated in the secuence table
        $sql="select max(id_secuence) as last_secuence from secuence";
        $result=mysql_query($sql);
        $row=mysql_fecth_object($result);
        $last_secuence=$row->last_secuence;

        // insert a decoy in order to generate the unique autoincrement number
        $sql="insert into secuence (ref) values ('$last_number')";
        mysql_query($sql);
        $new_secuence=mysql_insert_id();

        // calculate the next number in a way that we get hold of the autoincrement regardless of the user timing
        $next_number=$last_number - $last_secuence + $new_secuence;
        return($next_number);
    }

2)如果每个文档都没有编号,则会在保存时调用。

function get_next_doc_number($doc_type)
    {
        // get the last number of the document type the user is saving
        $sql="select max(doc_number) as last_num from documents where id_doc_type='$doc_type'";
        $result=mysql_query($sql);
        $row=mysql_fecth_object($result);
        $last_number=$row->last_num;

        // call the function 
        $next_number=generate_secuence($last_number);   
        return($next_number);
    }

我的问题: 我的解决方案在哪里无法解决问题,我应该如何解决?

0 个答案:

没有答案