RecordCount
Модератор: kdv
-
- Сообщения: 19
- Зарегистрирован: 30 ноя 2005, 17:48
Да понятно что select count будет разным... Кто ж против. Но в определенный момент времени, количество записей в таблице будет вполне ясным (на физическом уровне)Даже если предположить, что внутри сервера для каждой транзакции можно сделать счетчик записей (с учетом insert и delete внутри этой транзакции), все равно невозможно предсказать результат select count(*) после commit или rollback конкурирующих транзакций. Именно поэтому для подобных запросов возможно узнать результат только при помощи перебора записей на диске
100
95 (транзакция 2 удалила 5)
95 (транзакция 2 commit)
99 (транзакция 1 добавила 4)
95 (транзакция 1 rollback)
какая разница, что возвратит select count в контексте отдельной транзакции... мне интересно, почему нельзя быстро выяснить физическое количество записей таблицы в файле. Зачем их все перебирать? 100, 95, 95, 99 - вот она, информация. Пусть она 100 раз изменится к моменту, когда произойдёт выход из ф-ции, её выясняющей. Но это же можно сделать быстро.
(предчувствую гнев а-ля "ламерьё достало". Про MGA архитектуру и невозможность этого еще не прочитал-то

-
- Сообщения: 19
- Зарегистрирован: 30 ноя 2005, 17:48
Я про реальный мир. А не про философические рассуждения общего плана.

В моем случае - интервал времени, за который 80 тыс записей, общим объемом полезной информации ~12 Мб, вычитаются из БД, претерпят некоторое преобразование(расшифровку) и займут место в ОЗУ ПК, для дальнейшей работы. БД по окончании операции будет закрыта и забыта до следующего старта программы или редкого обновления данных.Что есть вычислительная операция? Интервал времени между передачей запроса серверу и началом поступления на клиент данных?
Еще раз повторю, лично я считаю (и Вам свое мнение не навязываю), что для длительного вычислительного процесса, который в условиях неопределенных вычислительных мощностей нельзя регламентировать 10, 20, или 30 секундами, необходимо отображать ход этого самого процесса во времени.
здрасьте. откуда ж будет 95, когда будет 105 версий!!!Но в определенный момент времени, количество записей в таблице будет вполне ясным (на физическом уровне)
100
95 (транзакция 2 удалила 5)
это count даст 95. А у 5-ти записей будет по 2 версии.
потому что это не записи, это версии. И каждая транзакция имеет право видеть только какие то определенные версии. Общее число записей и версий на конкретный момент можно получить, только опять же, это будет лишь приблизительная информация.мне интересно, почему нельзя быстро выяснить физическое количество записей таблицы в файле.
Кроме того, версии (записи) хранятся в сжатом виде. То есть, нельзя взять число страниц таблицы и поделить на n, где n - размер записи.
Это понятно, или так и не понятно? www.ibase.ru/devinfo/mga.htm ?
Вот тебе еще один пример.
1 транзакция видит 10К записей в таблице (через select count)
2-я транзакция удалила ВСЕ эти записи.
ни первая ни вторая транзакция еще не завершены по commit/rollback.
Сколько на диске версий? Правильно, 20 ТЫСЯЧ. При этом count в первой транзакции выдаст все равно 10 тысяч, а count во второй - 0.
При этом будет просмотрено 20 тысяч версий записей.
В Windows при копировании файла что выводится? правильно, авишка, и ОТНОСИТЕЛЬНЫЙ прогресс-бар.что для длительного вычислительного процесса, который в условиях неопределенных вычислительных мощностей нельзя регламентировать 10, 20, или 30 секундами, необходимо отображать ход этого самого процесса во времени.
Тебе вообще, с твоей постановкой задачи, я бы даже сказал, что стыдно спрашивать про такую муру. Если ты ХОТЬ РАЗ читаешь ВСЕ записи в память, неужели нельзя где-нибудь сохранить их количество, и ПОТОМ, при последующем чтении, использовать это число как приблизительное для того же самого прогресс-бара?
-
- Сообщения: 19
- Зарегистрирован: 30 ноя 2005, 17:48
-
- Сообщения: 19
- Зарегистрирован: 30 ноя 2005, 17:48
Размер прогрессбара устанавливается какой-нибудь ф-цией аля GetFileSize(), которая отрабатывает за ничтожный интервал времени.В Windows при копировании файла что выводится? правильно, авишка, и ОТНОСИТЕЛЬНЫЙ прогресс-бар.
И в случае с например FAT для выяснения информации о размере файла не нужно бегать по всем секторам диска, в которых находится этот файл. Его размер выясняется элементарно.
Еще раз всем спасибо.