Форум: "Базы";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
ВнизMS Access - поле типа "счетчик" Найти похожие ветки
← →
UnDISCOvery (2005-12-22 15:16) [0]Привет,Мастера!
Подскажите - какое максимальное значение поля "счетчик"?
И что произойдет если кол-во записей превышает это значение?
Нарушиться ли уникальность индекса по этому полю?
← →
DSKalugin © (2005-12-22 15:25) [1]1- большое,
2-этого не произойдет
3- нет
← →
Anatoly Podgoretsky © (2005-12-22 15:28) [2]2. База лопнет
← →
UnDISCOvery (2005-12-22 15:34) [3]Очень конструктивные ответы, спасибо :)
большое - это какое? если он 32 разрядный без знака- то это 4 миллиарда, а если нет?
когда-нибудь это пройзойдет, ничто не вечно под луной :)
лопнувшая база - это пять!!! :)
← →
Anatoly Podgoretsky © (2005-12-22 15:53) [4]UnDISCOvery (22.12.05 15:34) [3]
Выдай информацию по количеству добавлений в секунду на протяжении одного года.
А насчет лопнет это не шутка, есть ограничение на размер базы - 2 гб
← →
Johnmen © (2005-12-22 15:55) [5]>а если нет?
тогда 2 миллиарда
:)
>когда-нибудь это пройзойдет, ничто не вечно под луной :)
Тебя тогда уже не будет на свете...:)
← →
sniknik © (2005-12-22 15:58) [6]> то это 4 миллиарда, а если нет?
то тоже, но со знаком
> когда-нибудь это пройзойдет, ничто не вечно под луной :)
тебя это волновать уже лет сто как не будет... или собираешся жить вечно?
> А насчет лопнет это не шутка, есть ограничение на размер базы - 2 гб
чисто для информации, недавно узнал, новый MSDE 2005 (замена аксессу) бедет/есть поддерживать 4 гб. (на старый с тем же 2 гб. ограничением не слишком активно переходили... ;)
← →
sniknik © (2005-12-22 15:59) [7]> тогда 2 миллиарда
не, оно "переваливает" в минус и дальше считает. специально проверял когдато.
← →
Johnmen © (2005-12-22 16:15) [8]>не, оно "переваливает" в минус и дальше считает. специально проверял когдато.
тогда именно до 2 млрд, а потом минус...
← →
Anatoly Podgoretsky © (2005-12-22 16:24) [9]sniknik © (22.12.05 15:58) [6]
Так и есть, плюс есть ГУИ инструмент, но есть и плохие новости - или GUI или BOL
← →
Anatoly Podgoretsky © (2005-12-22 16:26) [10]sniknik © (22.12.05 15:59) [7]
Оно считает как Cardinal, это просто интерпритация его как Integer
← →
sniknik © (2005-12-22 17:46) [11]> Оно считает как Cardinal, это просто интерпритация его как Integer
;о), ну минус на самом деле есть чистая абстракция, видимость, глюк, "сдвиг" на последнем бите. ;о)
просто в самом аксесе поле счетчика определено именно длинным целым Long Integer (Default) Stores numbers from –2,147,483,648 to 2,147,483,647 (no fractions).
← →
sniknik © (2005-12-22 17:48) [12]> или GUI или BOL
ну... BOL можно и отдельно поставить. надеюсь. как в 2000м было.
← →
Anatoly Podgoretsky © (2005-12-22 17:53) [13]sniknik © (22.12.05 17:48) [12]
Не уверен, пока такой информации нет.
← →
sniknik © (2005-12-22 18:03) [14]вообще уже должно бы "дойти", но нет почемуто, счас почту недавнюю мелкософта глянул... девелопер есть (уже и не бета вроде, бету еще наверное месяца четыре назад присылали, тестил) а ехпрешиона нет.
ну покрайней мере на две машины рядом можно поставить ;о))
← →
UnDISCOvery (2005-12-22 18:20) [15]Anatoly Podgoretsky © (22.12.05 15:53) [4]
Выдай информацию по количеству добавлений в секунду на протяжении одного года.
Выдаю:
- в секунду 50 добавлений
- в минуту 3000
- в час 180.000
- в сутки 4.320.000
- в месяц 129.600.000
- в год 1.576.800.000
3 года работы - всего-то :)
А насчет лопнет это не шутка, есть ограничение на размер базы - 2 гб
и что произойдет при попытке добавить запись в базу размером 2 Гб?
Исключение? Или все повиснет нафиг?
← →
Anatoly Podgoretsky © (2005-12-22 18:26) [16]1.576.800.000 только записей, а они же у тебя не размером в один байт?
← →
UnDISCOvery (2005-12-22 18:35) [17]безусловно :)
я все понял - спасибо!
← →
sniknik © (2005-12-22 21:50) [18]> - в секунду 50 добавлений
не черезчур?... получается (в смысле удается 50 в сек положить)?
4 байта только на ингремент, т.е. год у тебя примерно 6 гигов...одного автоинкрмента ;о)
> и что произойдет при попытке добавить запись в базу размером 2 Гб?
проблемы начнутся немного раньше гдето на 1,7-1,8 гига базы сжатого размера (т.е. смотреть размер сразу после "сжатия - восстановления")
правда я проверял не на одиночных записях, а на "реальной работе" (имитации), начинались тормоза, слеты (AV в обьекте Jet) и вплоть до полного разрушения базы (восстановить не удалось).
но вообще надо это все еше проверять, я проверял на jet sp6, счас уже есть sp8. вышли из положения сделав поддержку архивных баз, т.е. та же самая база но туда нельзя писать только читать, рабочая получается одна для отчетов все найденные, и рекомендуем клиентам сливать все "лишние" данные до достижения критического обьема, который сами "назначили" в 1.5 гиг (с запасом ;).
← →
lost_delpher (2005-12-23 13:40) [19]Я не пойму зачем прикалываться?
вопрос очень актуальный - по крайней мере я обрабатывал большие объемы в АКЦЕССЕ и тогда возможна ситуация превышения счетчиком 2 миллиарда.
Может быть ситуация вставки и удаления большого числа строк
можно смоделировать ситуацию превышения -
создай таблицу - к примеру
код- счетчик
и любое поле
r - integer обзови ее скажем - er
и код в Акцессе
Public Sub errt()
Dim rst As DAO.Recordset, dbs As DAO.Database, i As double
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("er")
For i = 1 To 2147483647 +1
rst.AddNew
rst![r] = i
If i Mod 10000 = 0 Then
Debug.Print rst![kod] " вывод в окно отладки значения счетчика каждые 1000
DoEvents
End If
Next i
End Sub
запусти эту прогу и через пару часов посмотри что произойдет
мне тоже интересно
и база у тебя совсем не вырастет
← →
lost_delpher (2005-12-23 13:51) [20]извиняюсь - надо вместо
rst![r] = i - rst![r] = 1
← →
UnDISCOvery (2005-12-23 13:54) [21]скорей всего база превысит макс. размер - и пойдут ошибки
← →
lost_delpher (2005-12-23 13:58) [22]Возможна ситуация - когда не превысит
← →
UnDISCOvery (2005-12-23 14:07) [23]посчитай ...
sniknik © (22.12.05 21:50) [18]
- просто в самом аксесе поле счетчика определено именно длинным целым Long Integer (Default) Stores numbers from –2,147,483,648 to 2,147,483,647 (no fractions).
-4 байта только на инкремент ...
← →
lost_delpher (2005-12-23 14:15) [24]в том коде - который я привел выше - запись не сохраняется - и размер базы не растет - растет только инкремент
← →
UnDISCOvery (2005-12-23 14:24) [25]Ну и какой тогда смысл? Не пойму :-/
Счетчик просто будет по кругу
← →
sniknik © (2005-12-23 14:28) [26]> в том коде - который я привел выше - запись не сохраняется - и размер базы не растет - растет только инкремент
тогда тебе его размерность вообще пофигу, он цикличный.
← →
lost_delpher (2005-12-23 14:36) [27]Здесь был вопрос о том что будет с инкрементом - я предложил проверить - что значит цикличный - т.е. он сбрасывает счетчик через цикл ?
тогда можно попробовать сохранять одно значение - через скажем - миллион записей и посмотреть что будет...
← →
sniknik © (2005-12-23 14:50) [28]> Здесь был вопрос о том что будет с инкрементом
на который уже был ответ. надо сначала читать ветки прежде чем свое постить.
> я предложил проверить - что значит цикличный - т.е. он сбрасывает счетчик через цикл ?
а самому свое предложение реализовать?
то и значит, добавление без учета переполнения отбрасывая "вылезшую" за предел типа частьCREATE TABLE Tbl (ID INT Identity(1, 1000000000), Name VarChar(30))
INSERT INTO Tbl (Name) VALUES ("1")
....
INSERT INTO Tbl (Name) VALUES ("14")
результат
ID | Name
1 | 1
1000000001 | 2
2000000001 | 3
-1294967295 | 4
-294967295 | 5
705032705 | 6
1705032705 | 7
-1589934591 | 8
-589934591 | 9
410065409 | 10
1410065409 | 11
-1884901887 | 12
-884901887 | 13
115098113 | 14
← →
Anatoly Podgoretsky © (2005-12-23 15:03) [29]lost_delpher (23.12.05 14:15) [24]
В таком смысле в данном коде нет. В базу данные не добавляются, проверка на дубли не работает, для чего ты его привел - для прикола чтоли?
← →
Silver... © (2005-12-23 15:27) [30]
> Тебя тогда уже не будет на свете
Ну, ну
ситуации ведь разные бывают:
Записываются данные много и долго, при этом старые (отработанные, ненужные) удаляются причем может остаться запись под нр. <1> и <1.000.000...> размер базы в "Мб" будет, а щетчк...? :(
Вопрос действительно интересен
← →
Anatoly Podgoretsky © (2005-12-23 15:33) [31]Ты сначала добавь такое количество, потом поговорим, пускай база даже будет из одной таблицы с едидинственным полем счетчик.
← →
lost_delpher (2005-12-23 15:53) [32]Anatoly Podgoretsky
Код я привел человеку чтобы он проверил - и нашел ответ на свой основной вопрос, ответ он кстати так пока и не получил.
>sniknik
и вопрос был что будет с инкременентом после превышения макс. значения - а не с размером базы и проч.
писали - уйдет в минус - а после минуса что ?
CREATE TABLE Tbl (ID INT Identity(1, 1000000000), Name VarChar(30))
такие выражения не прокатят в Акцесс я не помню точно, кажектся инкременет там с 1 начинается
и вообще я предложил способ проверки - за день счетчик может увеличится и на 2 миллиарда - что все накинулись ?
← →
Silver... © (2005-12-23 16:01) [33]
> Ты сначала добавь такое количество
а в чем проблема-то ?
запись показаний какогонибудь датчика ...
... думаю не проблемма
← →
lost_delpher (2005-12-23 16:05) [34]а ситуация вполне реальная и не такая уж невозможная - например при транзакции счетчик в Акцесс увеличивается , и при откатах не уменьшается - так что если вы вставляете несколько миллионов записей и потом откатываете - можете получить ситуацию когда счетчик будет зашкаливать
← →
Anatoly Podgoretsky © (2005-12-23 16:08) [35]lost_delpher (23.12.05 15:53) [32]
Не увеличится ни на одну единицу, записи в базу нет, это локальные игры.
← →
Anatoly Podgoretsky © (2005-12-23 16:10) [36]Silver... © (23.12.05 16:01) [33]
А я думаю ты не понял, размер поля 4 байта, а размер базы всего 2 гб. Даже на заявленой скорости добавления потребуется более года, а она не получится раньше база лопнет, а если удалять и сжимать то о такой скорости говорить не приходится.
← →
lost_delpher (2005-12-23 16:15) [37]>Anatoly Podgoretsky
просто попробуй в акцесс с учетом создания таблицы
я пробовал и счетчик действительно увеличивается
Public Sub sdd()
Dim wrk As Workspace, i As Integer
Set wrk = DBEngine.Workspaces(0)
wrk.BeginTrans
For i = 1 To 20
CurrentDb.Execute ("insert into er (r) values (1) ")
Next i
wrk.Rollback
End Sub
не забыть кстати добавить ссылку на ДАО 3.6 в проекте
← →
Anatoly Podgoretsky © (2005-12-23 16:17) [38]lost_delpher (23.12.05 16:15) [37]
Теперь вместо 20 сделай 4 миллиарда и сообщи на каком номере у тебя загнется база и также сообщи удастся ли тебе ее каким ни будь образом восстановить
← →
sniknik © (2005-12-23 17:14) [39]> и вопрос был что будет с инкременентом после превышения макс. значения - а не с размером базы и проч.
> писали - уйдет в минус - а после минуса что ?
а что бывает с минус еденицей при добавлении еденицы? нулем становится естественно. ;)
> CREATE TABLE Tbl (ID INT Identity(1, 1000000000), Name VarChar(30))
> такие выражения не прокатят в Акцесс я не помню точно, кажектся инкременет там с 1 начинается
> и вообще я предложил способ проверки - за день счетчик может увеличится и на 2 миллиарда - что все накинулись ?
вот когда вспомниш точно, тогда и "накидки" прекратятся, которые на самом деле являются попытками ответить на твои же вопросы.
инкремент там стандартно начинается с 1, при явном указании с той цифры которая указана. (кстати тут указано не начало ;)
← →
Silver... © (2005-12-23 18:08) [40]
> А я думаю ты не понял
да всё я прекрасно понял:
скажем на момент "X" мы имеем ОДНУ запись с ID = Маxимально_Возможное_значение(ID)
Вопрос где загиб БД по лимиту 2(4)ГБ она и 1Мб не наберет :) а вот загиб ID мы получили, потому как скорее всего (не утверждаю) ID продолжится заново с <1> или...
А если у меня есть др. записи с ID=1 то как быть со связями
ПыСы: мне думается это не вопрос тока к Access-у но и к др. СУБД
Страницы: 1 2 вся ветка
Форум: "Базы";
Текущий архив: 2006.02.19;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.045 c