Правильное назначение общего идентификатора для каждой записи базы данных - PullRequest
0 голосов
/ 12 января 2011

Предположим, у меня параллельно работает десять заданий cron, которые извлекают записи из базы данных и обрабатывают их.

Первое задание cron получает все записи из базы данных, у которых поле 'commonId' равно 1, второй получает все записи из базы данных, у которых поле 'commonId' равно 2 и т. д. до 10.

Решение - Когда я добавляю записи в базу данных из внешнего интерфейса, у меня есть файл, в котором сохранен «последний» общий идентификатор. Этот идентификатор увеличивается до 10, а затем снова устанавливается на 1 для каждой записи в базе данных.

Препятствие - В интерфейсе много пользователей, и при добавлении записей один и тот же общий идентификатор используется для двух или трех последовательных записей. Этого не должно быть. Каждая запись в базе данных должна иметь серийный общий идентификатор от 1 до 10

.

Есть ли какое-то решение для этого? Чтобы получить последний из последних общий идентификатор?

Я использую MongoDB.

Если это невозможно. Что можно сделать?

Ответы [ 2 ]

1 голос
/ 12 января 2011

То, что вы хотите - это операция ATOMIC, и у MongoDB есть способы сделать это. Смотри http://www.mongodb.org/display/DOCS/Atomic+Operations

Есть ли причина, по которой вы специально хотите распределить их по кругам? Разве он не будет обрабатываться быстрее, если вы позволите каким-либо из заданий chron использовать любое ожидающее задание?

Я предлагаю просто положиться на сгенерированные MongoID (см. http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-TheBSONObjectIdDatatype), в обратном порядке по ним и найти первый нераспределенный рабочий элемент, взять его, используя один из упомянутых атомарных методов. Если работа не найдена, спите и попробуйте снова или уволиться (в зависимости от того, как часто ваша хронографическая работа переводит этих работников в рабочее расписание).

0 голосов
/ 13 января 2011

Я бы посоветовал взглянуть на команду findAndModify и примеры на этой странице. Если вы просто ищете быстрый счетчик с автоприращением / последовательным счетчиком, я бы посоветовал взглянуть на этот пост: http://shiflett.org/blog/2010/jul/auto-increment-with-mongodb.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...