Как решить проблему с дублями id в сфинксе?

Есть парсер работает двумя потоками и записы добавляются в базу потом в сфинкс
Есть 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'
  • Вопрос задан
  • 268 просмотров
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
если у вас два однопоточных парсера то четные не четные должны решить вашу проблему, отдебажьте код просто
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы