Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Вниз

Базы данных: удаление записи   Найти похожие ветки 

 
DiX ©   (2006-09-10 23:04) [0]

Есть база данных (TClientDataSet) в ней к примеру содержится 100 записей, занимает 80kb. После удаления любого количества записей база данных как занимала 80kb так и занимает. Если после удаления добавить записи то размер базы данных увеличится. Как сделать нормальное удаление?


 
VitGun ©   (2006-09-10 23:12) [1]

Сделать сжатие базы...либо программно либо средствами СУБД.

TClientDataSet - это компонент для работы с набором данных, а не база данных. Какую СУБД ты используешь? Paradox, Access, MS SQL?


 
atruhin ©   (2006-09-11 06:03) [2]

> TClientDataSet - это компонент для работы с набором данных

Не только! Ты будешь удивлен узнав о его функциональности.
Автору:
Дело в том, что TClientDataSet поддерживает цепочку:
1. Подключиться к БД, загрузить данные, отключится
2. Работаем с данными, сохраняем и т.д.
3. Подключаемся, реплицируем изменения, отключаемся.
Вот для реализации последнего он всего лишь помечает данные как удаленные. А для удаления, если способ хранения XML просто записывай файл заново, и все.


 
Ega23 ©   (2006-09-11 09:31) [3]


> Не только! Ты будешь удивлен узнав о его функциональности.


Всё, что ты перечислил, это и есть работа с набором данных.
К СУБД это не имеет никакого отношения.


 
Desdechado ©   (2006-09-11 10:39) [4]

Ega23 ©   (11.09.06 09:31) [3]
CDS может работать и без БД вообще. Со своим собственным форматом, в котором хранит данные.


 
Ega23 ©   (2006-09-11 10:44) [5]

Может. Но "Не набором данных" это не станет, согласись...


 
stone ©   (2006-09-11 11:15) [6]


> Если после удаления добавить записи то размер базы данных
> увеличится. Как сделать нормальное удаление?

При удалении записи в любой СУБД, место физически не освобождается. По сути запись остается, просто метится как удаленная. Чтобы физически удалить запись и освободить место нужно "упаковать" базу. Способ "упаковки" зависит от СУБД.


 
MsGuns ©   (2006-09-11 12:30) [7]

>Ega23 ©   (11.09.06 10:44) [5]
>Может. Но "Не набором данных" это не станет, согласись...

TClientDataSet. Согласиться не могу ;)

CDS "прелестен" тем, что позволяет работать с набором данных произвольно, в отрыве или вовсе без источника (в качестве которого могут использоваться объекты доступа к БД, файлы, сокеты и вообще что угодно, откуда может поступать внешняя информация), в том числе сохранять его как файл на диске для последующего использования. На нем можно вполне удачно построить простейшие автономные "базаданные" приложения, например, телефонный справочник.
Мне еще сильно импонирует компактность cds-файлов, особенно по сравнению с акцешными или "серверными". А также то, что работа приложения в этом режиме системонезависима, т.е. для работы приложения не требуется никаких дополнительных инсталляций

Упаковывать физический файл после его сохранения вовсе не обязательно.
Часто простое пересоздание файла занимает существенно меньше времени.
Это если не надо сохранять информацию о статусе записей предыдущей корректировки (что необходимо, например, для нормального функционирования клиента SQL-сервера)


 
atruhin ©   (2006-09-11 15:47) [8]

Кстати когда то обнаружил такой баг TClientDataSet, при работе с cds файлом, если происходит сбой например питания, файл становится 0 длинны, т.е. информация стирается.


 
DiX ©   (2006-09-12 18:17) [9]

А как в ClientDataSet можно использовать упаковку данных?


 
ANB ©   (2006-09-12 18:26) [10]


> например, телефонный справочник

имхо : мне думается, если забить туда хотя бы телефоны Москвы, то справочнику сильно поплохеет.


 
ANB ©   (2006-09-12 18:26) [11]


> DiX ©   (12.09.06 18:17) [9]

1) Записать/прочитать в файл
2) Переписать в пустой CDS


 
MsGuns ©   (2006-09-13 09:34) [12]

>atruhin ©   (11.09.06 15:47) [8]
>Кстати когда то обнаружил такой баг TClientDataSet, при работе с cds файлом, если происходит сбой например питания, файл становится 0 длинны, т.е. информация стирается.

При наличии 2-х факторов:

1. ФС Fat32
2. Приложение "держит" датасет в режиме кэширования

>ANB ©   (12.09.06 18:26) [10]

Миллион записей для CDS вовсе не предел. В мире существует еще несколько городов, кроме Москвы. В некоторых из них население несколько меньше Московского, а среди них имеются такие, где есть телефонные станции.

Не надо весь мир мерить "уракакальными" мерками ;)))


 
Romkin ©   (2006-09-13 10:49) [13]

atruhin ©   (11.09.06 15:47) [8] Это не баг :) Если происходит работа с файлом, он берется в память полностью. И работа с таблицей происходит полностью в памяти. Запись на диск происходит только по вызову метода либо при закрытии набора данных.
Размер файла растет по простой причине, в нем запоминаются не только актуальные данные, и даже не только остаются удаленные записи, как в dBase например. Запоминатеся весь ход редактирования, можно сделать undo на любое количество шагов :)
Чтобы этого не происходило, достаточно указать перед редактированием LogChanhes := False или вызвать MergeChangeLog перед записью в файл и закрытием датасета.
И еще: называть таблицу Базой Данных - имхо, зазнайство ;)


 
Дед Маздай ©   (2006-09-13 11:01) [14]


> Если происходит работа с файлом, он берется в память полностью.

Хе. Вот я не понял. У меня файл базы данных размером 1.2 ТБ, а оперативки всего 512 МБ, файл подкачки около 700 МБ. Куда ж он берётся?


 
Romkin ©   (2006-09-13 11:02) [15]

Дед Маздай ©   (13.09.06 11:01) [14] Это у тебя cds такой?! Не верю :)


 
Дед Маздай ©   (2006-09-13 11:16) [16]

А речь про cds? Тогда я что-то упустил))


 
atruhin ©   (2006-09-13 14:40) [17]

> При наличии 2-х факторов:
> 1. ФС Fat32
> 2. Приложение "держит" датасет в режиме кэширования

1. Нет NTFS.
2. Да, а как иначе правильно? Не работал с ним, один раз сталкивался.

> Запись на диск происходит только по вызову метода либо при
> закрытии набора данных.

Это хорошо, но не так. Если просто открыть файл, загрузить из него данные и вызвать перезагрузку (даже оставив файл открытым), такого эффекта не будет.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.075 c
2-1161860846
silversmith
2006-10-26 15:07
2006.11.12
Watch показывает неверные значения переменных


2-1161991908
Jus
2006-10-28 03:31
2006.11.12
Забыл как переименовать Unit1


4-1150840652
Ain
2006-06-21 01:57
2006.11.12
Работа с видеокартой


3-1157979564
kaif
2006-09-11 16:59
2006.11.12
Как ограничить запрашиваемый SQL-набор в ADO


1-1159532237
Ангела
2006-09-29 16:17
2006.11.12
Проблема с реестром.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский