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

Модераторы: kdv, CyberMax

Ответить
nnezam
Сообщения: 4
Зарегистрирован: 10 фев 2008, 17:12

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

Сообщение nnezam » 10 фев 2008, 17:25

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

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 10 фев 2008, 20:30

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

nnezam
Сообщения: 4
Зарегистрирован: 10 фев 2008, 17:12

Сообщение nnezam » 10 фев 2008, 21:44

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 11 фев 2008, 09:15

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

nnezam
Сообщения: 4
Зарегистрирован: 10 фев 2008, 17:12

Сообщение nnezam » 11 фев 2008, 10:44

Спасибо. Пошел ковырять. ("Ученье свет, а неученье - чуть свет и на работу")

Ответить