Веб-сервис для возврата уникального автоматического увеличенного человекочитаемого идентификационного номера

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

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

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

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

Спасибо,

Neil

6
задан Neil 22 March 2010 в 12:05
поделиться

2 ответа

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

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

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

1
ответ дан 17 December 2019 в 22:12
поделиться

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

Псевдокод:

if (!locked('counter.txt'))
   counter = read('counter.txt')
else
   wait
   startAgain
lock('counter.txt')
counter++
print counter
write('counter.txt', counter)
unlock('counter.txt)
0
ответ дан 17 December 2019 в 22:12
поделиться
Другие вопросы по тегам:

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