Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.53 MB
Время: 0.041 c
1-1107362729
Mr_JACK
2005-02-02 19:45
2005.02.20
работа с OLE


6-1102328286
DelphiN!
2004-12-06 13:18
2005.02.20
Получение исход. вход. трафика из компонента TidMappedPortTCP


9-1100888096
FRick
2004-11-19 21:14
2005.02.20
Зеркала в GLScene!


14-1106646395
M234
2005-01-25 12:46
2005.02.20
C# и Java


14-1106744167
Cosinus
2005-01-26 15:56
2005.02.20
Вылетел комп с синим экраном и каким то непонятным сообщением...