Страница 1 из 1

Помогите придумать алгоритм

Добавлено: 10 фев 2008, 17:25
nnezam
Форумчанам привет.
Подскажите дитю неразумному...
Задача такова:
Необходимо организовать автоматическую нумерацию записей в таблице(табл1) .Количество записей конечно, т.е. никогда не будет больше 100.000. Почти обязательно, чтобы числа шли без пропусков. Т.е. в общем случае генератор использовать не получиться. Единственное, что приходит в голову, это взять и создать отдельную таблицу(табл2) с одним полем где значения будут от 1 до 100000. Соответственно по старту транзакции выбирается минимальное значение из табл2, запись с минимальным число удаляется до завершения трансзакции. Если commit, то запись не восстанавливается, если rollback - восстанавливается. Но алгоритм не нравится. Чувствую, что грабли, но не могу понять где. Подскажите.

Добавлено: 10 фев 2008, 20:30
Attid
на главной странице ibase.ru в новостях за 10.09.2007 есть поисковик по всем матерьялам по иб\фб , поищи там "бездырочная нумерация" где-то не раз обсуждалось.

Добавлено: 10 фев 2008, 21:44
nnezam
To Attid
Спасибо, порыскал. Обидно, что все мысли в обсуждениях сводятся к тому, что у меня в голове. Альтернативы так и не нашел...Может сильно упертый? :)

Добавлено: 11 фев 2008, 09:15
kdv
Чувствую, что грабли, но не могу понять где.
ты про InterlockedIncrement слышал? Mutex? генераторы?
ну так вот - они все используют метод монопольной блокировки. без которой непрерывную последовательность получить нельзя. Соответственно, в многопользовательской среде это единственный вариант. И реализовать его можно ограниченным числом способов?

Добавлено: 11 фев 2008, 10:44
nnezam
Спасибо. Пошел ковырять. ("Ученье свет, а неученье - чуть свет и на работу")