Текущий архив: 2005.02.20;
Скачать: CL | DM;
ВнизЗакончился диапазон, когда генератор выдаёт валидные.... Найти похожие ветки
← →
Некто (2005-01-24 22:47) [0]Закончился диапазон, когда генератор выдаёт валидные значения для первичного ключа таблицы.
Часто ли такое встречается на практике? Что делать в таких случаях?
← →
Anatoly Podgoretsky © (2005-01-24 22:51) [1]Какая разряжность генератора, скорость ввода записей в секунду (среднее за год)
← →
Некто (2005-01-24 22:52) [2]smallint...например :-)
← →
Anatoly Podgoretsky © (2005-01-24 22:58) [3]2 смилиона лет.
← →
Sergey_Masloff (2005-01-24 22:58) [4]Менять разрядность. GEN_ID в интербейзе 32-разрядное целое генерит. Я думаю 4, миллиарда записей вставляются очень долго.
← →
Desdechado © (2005-01-24 22:58) [5]Видимо, у него обычный integer, т.е. около 2 млрд положительных значений.
Я иногда использую схему сброса генератора, в случае надобности короткоживущих уникальных значений:
gen_id( genName, -gen_id( genName, 0 ) )
А практика у всех разная...
← →
Sergey_Masloff (2005-01-24 23:08) [6]Desdechado © (24.01.05 22:58) [5]
>Видимо, у него обычный integer, т.е. около 2 млрд положительных >значений
Да хоть необычный. Ты прикинь какой это объем базы даже если средняя длина записи байт 200. И это в одной таблице.
Кстати у интеджера тоже четыре миллиарда, он же циклический... Никто ж не сказал что ПК обязан > 0 быть.
← →
Некто (2005-01-24 23:17) [7]ну а если представить такую ситуацию, что нужно использовать в качестве ПК smallint и ничего кроме него использовать нельзя(и начинается отсчёт с -32768 и уже вот-вот подойдёт к критическому максимуму) и ещё интенсивность работы с таблицей очень большая....ситуация синтетическая, вопрос теоретический :-)
← →
jack128 © (2005-01-24 23:27) [8]Sergey_Masloff (24.01.05 23:08) [6]
Ты прикинь какой это объем базы даже если средняя длина записи байт 200. И это в одной таблице.
ну например 20 раз в секунду я вставляю запись и 20 раз в секунду удаляю запись. Тогда размер таблички будет маленький ;-)
← →
Sergey_Masloff (2005-01-24 23:32) [9]jack128 © (24.01.05 23:27) [8]
Но тогда нет проблемы и с идентификаторами - кэш ПК спасает отца русской демократии ;-) Проблема, насколько я понял, встает когда исчерпан диапазон.
← →
Danilka © (2005-01-24 23:34) [10][8] jack128 © (24.01.05 23:27)
4294967295/20/60/60/24/365 = около семи лет. Однако, в таком случае кто мешает задействовать 2 генератора для генерации ПК? :))
← →
Johnmen © (2005-01-25 09:26) [11]>Некто (24.01.05 22:52) [2]
>smallint...например :-)
Пример неудачный.
Начиная с IB6 генератор 8-байтный.
← →
Danilka © (2005-01-25 10:28) [12][11] Johnmen © (25.01.05 09:26)
> Начиная с IB6 генератор 8-байтный.
Тогда, если по 20 новых записей в секунду, то наше солнце успеет остынуть, к тому времени, пока генератор закончится. :)
← →
Johnmen © (2005-01-25 10:49) [13]>Danilka © (25.01.05 10:28) [12]
Вот и я намекаю, что никогда не переполнится, и вопрос глупый, мягко говоря...:)
← →
Некто (2005-01-25 11:00) [14]Видимо меня неправильно поняли.
Дело не совсем в генераторе (пускай он выдаёт столько, сколько ему угодно), а в поле smallint.
Ведь даже при отмене транзакции, которая вставляет запись, текущее значение генератора увеличивается.
Ну вот есть таблица, в которой, при встевке, частенько случаются эксепшны, транзакция откатывается, а значение генератора увеличивается. Такая таблица, к примеру, содержит 5000-8000 записей, всего лимит записей для таблицы 64К, а текущее значение генератора уже близко к 32767.
← →
Johnmen © (2005-01-25 11:07) [15]Кроме smallint ещё существуют типы integer и bigint.
← →
Danilka © (2005-01-25 11:07) [16][14] Некто (25.01.05 11:00)
А есть какое-нибудь логическое объяснение, почему для этой таблицы в качестве суррогатного ПК выбрали именно СмаллИнт? :)
Думаю, единственный выход - переделать тип поля.
← →
Некто (2005-01-25 11:22) [17]смаллинт - ради экономии ресурсов сервера и дискового пространства.....
господи, ситуация синтетическая и много ограничений в том числе и на то, что нельзя ничего использовать кроме смаллинта...
вроде и таблица сравнительно пустая (5000-8000 записей), ввести ещё ой-ёй-ёй сколько записей можно, но верхний предел (32767) вот-вот наступит
← →
Sergey13 © (2005-01-25 11:28) [18]2[17] Некто (25.01.05 11:22)
>смаллинт - ради экономии ресурсов сервера и дискового пространства.....
Вот и получили экономию. 8-)
А рядом наверное кинох на пару десятков гиг валяется. 8-)
← →
Johnmen © (2005-01-25 11:30) [19]>Некто (25.01.05 11:22) [17]
>смаллинт - ради экономии ресурсов сервера и дискового пространства.....
Извини, это несколько бредово...:)
Если считаешь иначе, расскажи, какие именно "ресурсы сервера" сэкономлены смоллинтом. И сколько конкретно дискового пространства.
Вобщем всё от лукавого..........
← →
Некто (2005-01-25 11:31) [20]Sergey13 © (25.01.05 11:28) [18]
точно))
ну начальник сказал что надо смаллинт и всё-тут!!
← →
Магнит (2005-01-25 11:31) [21]>А рядом наверное кинох на пару десятков гиг валяется. 8-)
ага и ещё архив музыки!! :-)
← →
Danilka © (2005-01-25 11:32) [22][17] Некто (25.01.05 11:22)
> смаллинт - ради экономии ресурсов сервера и дискового пространства.....
Чего-то я не понял.. экономия в чем??? На твоих сегодняшних 8к записей экономится 16килобайт... если вообще экономится. А гемороя зато куча великая. Как это назвать? :))
> много ограничений в том числе и на то, что нельзя ничего
> использовать кроме смаллинта...
Ну, тогда, остается сесть и поплакать. :)
[20] Некто (25.01.05 11:31)
> ну начальник сказал что надо смаллинт и всё-тут!!
Дык, пущщай тогда сам и разгребает, раз так сказал. :)
← →
Johnmen © (2005-01-25 11:32) [23]>Некто (25.01.05 11:31) [20]
>ну начальник сказал что надо смаллинт и всё-тут!!
Ты в армии переслужил, видимо...:)
← →
Некто (2005-01-25 11:35) [24]ну а в скорости работы со смаллинтом и int64 разницы разве нету?
:-))) уже самому смешно
← →
Магнит (2005-01-25 11:37) [25]есть! :-D
← →
Некто (2005-01-25 11:40) [26]Магнит (25.01.05 11:37) [25]
а-ля Anatoly Podgoretsky
сам знаю что есть :-)
← →
sniknik © (2005-01-25 11:41) [27]> но верхний предел (32767) вот-вот наступит
если бы это было бы в access (или mssql, а может и там и там, не помню) то следующим за этим наступило бы -32768 и пошло увеличиваться до 0 а вот только потом, изза уникальности ключа (обычная практика) уже бы была ошибка (на 1 и то если она к тому времени сохранится).
а вот на FB не знаю (и пробовать неохота, хотя это просто), ведь там ты сам присваиваеш значение в генераторе, а сам он 8ми байтный... думаю если предусмотреть поведение аналогично access-овскому, то у тебя будет дополнительных 32768 значений (генератор переписат), если же нет то ошибка "переполнения" типа.
это если не рассматривать нормального решения (смена типа полю) и продолжать экономить на спичках.
← →
Johnmen © (2005-01-25 11:41) [28]>Некто (25.01.05 11:35) [24]
>ну а в скорости работы со смаллинтом и int64 разницы разве нету?
Есть. int64 быстрее.
Страницы: 1 вся ветка
Текущий архив: 2005.02.20;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.037 c