![]() |
|
|
![]()
|
|
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
вот если бы запись была бы фиксированной длины , то перезаписали бы мы часть файла и всё супер, а если перезаписываемая запись длинее старой то мы залезаем на следующую запись и пошло поехало ...
поэтому первая мысль а зачем ? В разные файлы всё, и не волнует их длина , вот только как поведёт себя файловая система в таком случае ? |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 2 Всего: 360 |
Если запись длиннее, то оставляем дырку, а запись вешаем на конец.
Раз в месяц делаем Vacuum А файловая система... как тебе сказать... Я бы такое у себя не ставил 100%! |
|||
|
||||
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
Вот и я засомневался ...потому и спросил...
мда раз в месяц сдавливать её ... мда может и неплохо... только если мы ищем запись то находим её индекс "n" пропускаем "н" байтов читаем , если что в конец её ... а что если выбирать запись надо по каким то параметрам (ну фамилия там) то типо пробегаем по всем индексам ? смотрим запись , и смотрим совпадает запись с фильтром или нет? только каждый раз когда мы смотрим данные по индексам нам надо пролизать (пропустить) файл данных до индекса "n" ? |
|||
|
||||
| vadims |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 305 Регистрация: 8.6.2005 Репутация: нет Всего: 17 |
Я бы делал так как предложил sergej.z,
едиственное что с файлами проще (а чем тупее тем надежнее) реализовать - все функции поиска по ключу(имени файла) берет на себя ОС Что касается файловой системы - все будет нормально если файлы закрывать после добавления-редактирования не забудешь и питание раз в 10 минут лететь не будет - это же не мои фантазии - а из практики, у меня около 10 лет уж пашут без нареканий 2 такие штуки - одна под DOS, вторая по W98 Кстати решения КСС и Пейджлик по пейджинговым системам - на этом принципе - куча продаж была - собственно оттуда идею и взял в свое время -------------------- Cpu not found ! Press any key for software emulation. |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 2 Всего: 360 |
Сортированный индекс для того и делается, чтобы легче было искать
Если индекс не сортированный, то да, придётся пробегать по всёй базе. Иначе ищем в индексах. Для начала бинарным поиском можно воспользоваться. Создаёшь ещё один файл, где указатели просортированы и ищешь например бинарным поиском. PS: Возми SQLite, раяо или поздно всё равно понадобятся все фичи |
|||
|
||||
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
ОК допустим СКУЛит
|
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 2 Всего: 360 |
Эта библиотека не только opensource, но и public domain. Означает - делайте с кодом что угодно, но не говорите потом, что это я так написал.
Написал её австралийский профессор, которому и так денег хватает. Она уже широко распространилась (например PHP5 имеет её уже встроенной) |
|||
|
||||
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
Благая весть ! на сегодня и вообще спасибо !
|
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: нет Всего: 20 |
Так работает СУБД Аксесс и это хорошо при малых обьемах базы... когда же файл базы достигает 40 мегобайт, то время сжатия увеличивается до 10 минут. ЗЫ хотя Аксесс и не предназначен для таких обьемов |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 2 Всего: 360 |
так работает любая СУББД просто некоторые стараются разбиение на файлы ограничить время переписки. вообще DELETE - очень проблематичная функция. |
|||
|
||||
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
Вообще я так подумал , ведь не суть то в одном файле база , или в тысяче , фрагментироватся винт то полюбому будет , если файл меняет свои размеры , туда сюда , он всё равно через некоторое время разрежется на тысячи фрагментов ...
так есть ли смысл одним файлом то писать ? единственный минус это быстродействие поиска файла (findfirst , findnext),но ведь это нужно сделать только один раз ,загружая список всех записей , да и файл можно заранее сделать с названиями , так то вообще быстро будет ? Почему мне всё время кажется что я что то не учитываю ... а насчёт переписи файла ... как то мне это кажется ещё более глупым нежели моё предложение . средний размер базы будет 100-200 МБайт каждый раз перезаписывать ? долговато будет... или раз в час ? |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 2 Всего: 360 |
Это зависит от того, как часто будут удалятся записи. Создай систему, которая считает "пустое место" в файле. Запускай функцию, когдо его будет слишком много. А что, у тебя проблемы с SQLite? Дай пример своего кода, я помогу тебе её туда вставить. |
|||
|
||||
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
зато насчёт вылетания питания , тут так однозначно много файлов рулят ...
пишем сначала пробный файл(бэкап с другим разрешением но тем же индексом) потом сам файл переписываем и затем стираем бэкап. если на каком то этапе рубанёт ли[censored 9]ричество то: 1 не допишется бэкап 2 запишется бэкап но не запишется файл 3 не сотрётся бэкап в любом случае информация целая только либо на бэкапе либо в самом файле, остаётся смотреть файл цел или нет и грузить соответствующий. Добавлено @ 12:59 да пока проблем нет я не смотрел СКУлит ... мне стало интересно почему так никто не делает ? |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 2 Всего: 360 |
Проблем с электричеством при дописывании в файл тоже нет. Создавай доп. файлик где будут записаны обрабатываемые записи. Если свет вырубится, ты легко найдёшь и удалишьне валидные.
Дык делают так почти в любой СУББД. ПС: Ещё тебе придётся реализовывать Begin work и Commit. |
|||
|
||||
| Dubinsky |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 252 Регистрация: 1.6.2005 Репутация: нет Всего: нет |
ладно а что мне надо от СКУлита ?? сорс ? или что они там предлагают ?
|
|||
|
||||
![]()
|
| Правила форума "C++: Базы данных" | |
|
|
Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах. Благодарим за понимание. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Базы данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |