Хорошо, у вас может быть столбец в таблице, в котором указано, обрабатывается ли запись в данный момент.В транзакции извлеките данные для записи, которая в данный момент не обрабатывается, и обновите запись, чтобы сообщить, что она сейчас обрабатывается.Детали того, как будут обрабатываться конфликты, будут зависеть от типа транзакций, которые вы создаете, и базы данных, которую вы используете, но я подозреваю, что транзакции должны лежать в основе этого.
Это предполагает, что вы действительно хочу использовать базу данных, а не очередь сообщений с некоторым описанием.Вы можете рассмотреть возможность использования очереди сообщений в сочетании с базой данных ... и в некоторые базы данных встроены очереди, что также может быть полезно.Даже если вам нужна запись в базе данных, у вас может быть очередь только из идентификаторов - клиенты могут просто извлечь следующий элемент из очереди, а затем получить данные.Возможно, вы все еще захотите записать время, когда элемент был извлечен из очереди, чтобы в случае сбоя клиента или чего-то подобного пакетное задание могло поставить любые сбойные задания (например, те, которые были получены день назад, но непока нет результатов) назад в очередь.