Веб-сервис для возврата уникального автоматически увеличиваемого человека читаемого идентификатора - PullRequest
5 голосов
/ 22 марта 2010

Я хочу создать простой веб-сервис, который при опросе возвращает уникальный идентификатор. Идентификатор должен быть удобочитаемым для человека (то есть не путеводителем, вероятно, в форме 000023) и просто увеличивается на 1 каждый раз, когда вызывается.

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

Есть ли другой вариант, кроме использования базы данных для хранения текущего номера?

Конечно, это было сделано раньше, может кто-нибудь указать мне какой-нибудь исходный код, если это так.

Спасибо

Neil

Ответы [ 2 ]

1 голос
/ 22 марта 2010

Используйте кусок кода критической секции, чтобы управлять потоком по одной через секцию кода. Вы можете сделать это, используя оператор lock или быть немного более хардкорным и используя мьютекс напрямую. Это гарантирует, что вы будете возвращать разные номера каждому абоненту.

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

Другой вариант - сохранить его в локальном файле, хотя это будет дорого прочитать файл, увеличить его число и записать обратно в критическую секцию.

0 голосов
/ 22 марта 2010

вы можете использовать файл.

Псевдокод:

if (!locked('counter.txt'))
   counter = read('counter.txt')
else
   wait
   startAgain
lock('counter.txt')
counter++
print counter
write('counter.txt', counter)
unlock('counter.txt)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...