Есть парсер работает двумя потоками и записы добавляются в базу потом в сфинкс
Есть rt индекс при новой записи в базу, для добавления в сфинксе делаю так,
$flow - Это поток парсинга
$maxId = (new Query())->select('id')->from(Yii::$app->params['real_index'])->max('id');
if((($maxId % 2) == 0 && $flow == 1) || (($maxId % 2) != 0 && $flow == 2)){
$id = $maxId + 1;
} elseif((($maxId % 2) == 0 && $flow == 2) || (($maxId % 2) != 0 && $flow == 1)) {
$id = $maxId + 2;
} else {
$id = $maxId + 1;
}
Yii::$app->sphinx->createCommand(
'INSERT INTO `'.Yii::$app->params['real_index'].'` (`id`, `product_id`, `product_name`, `description`, `company_id`) VALUES (:id, :product_id, :product_name, :description, :company_id)',
[
'id' => $id,
'product_id' => (string)$model->_id,
'product_name' => $model->product_name,
'description' => $model->description ? str_replace('\'', '', $model->description) : '',
'company_id' => isset($model->company_id) ? $model->company_id : '',
]
)->execute();
суть в том что , для первого потока id нечетные подставляются, для второго четные думал хоть так решу проблему, хоть и костыль (чтобы во время выполнения не получились дубли $id) но опять каким то образом получается дубли и выдает ошибку
Next exception 'yii\db\Exception' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 duplicate id '780214'