php / mysql — проблема с плохим параллелизмом для решения

Переменные:

1) Таблица с именем doc_types, которая имеет много типов документов, которые пользователь хочет в своей системе.

  • Поля: id_doc_type как int (14) AUTOINCREMENT, имя как varchar (25)

2) Таблица именованных документов, в которой есть все документы, которые создает пользователь.

  • Поля: id_document как int (14) AUTOINCREMENT, id_doc_type как int (14), doc_number как int (14) и т. Д …

3) Таблица с именем secuence, это решение проблемы параллелизма, которая у меня все еще есть.

  • Поля: id_secuence как int (14) AUTOINCREMENT, ref как 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);
}

Мой вопрос:
Где мое решение не может решить проблему, и как мне это исправить?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …