Структура файла данных

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
MaxP
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 21.09.2005 (Ср) 2:04

Структура файла данных

Сообщение MaxP » 14.11.2005 (Пн) 1:28

Подскажите, какую лучше использовать структуру хранения данных в программе. Программа будет работать с чем-то наподобие словарей. Нужно решить как должны храниться данные в этих словарях. Исходные условия следующие: В одном словаре будет храниться теоретически бесконечное количество записей (на практике - 200-1500 записей, реже - до 5000), каждая из которых состоит из следующих частей:
* Уникальный индентификатор (Double)
* Поле Date
* Поле Integer
* 3 поля Byte
* 4 поля String, каждый из которых, теоретически, неограниченной длины (на практике редко будут превышать 500 символов)

Есть два режима, в которых будет работать пользователь:
1) В первом режиме "редактирование" он будет менять текстовые поля записей, а также добавлять или удалять записи целиком. В этом режиме он одновременно будет работать только с одним словарем.
2) Во втором, основном, режиме "проверка" пользователь работает одновременно с несколькими словарями: при запуске программы, он указывает словари, с которыми будет работать. Далее программа, по своему алгоритму отбирает из этих словарей нужные записи (2-20% из каждого словаря; для отбора не используются значения полей типа String), сортирует их и выводит поочереди пользователю. Т.е. записи будут выводиться "в разнабой" из разных словарей. При каждом переходе к другой записи, в ней меняются (перезаписываются) значения всех полей типов Byte, Integer и Date. Поля String в режиме "проверка" меняются редко - только если пользователь обнаружил там ошибку.

С базами данных я практически не работал. Но по давнему опыту помню, что в Access такая БД на пару тысяч записей разраслась бы до нескольких метров, что абсолютно не приемлемо. Требуется, чтобы словари были как можно компактнее.
Сейчас я склоняюсь к варианту разбивки каждого словаря на два файла:
1) В файле произвольного доступа (Random), будут содержаться поля записи с фиксированной длиной (byte, data, Integer)
2) В двоичном файле (Binary) будут содержаться поля string (ну и дублироваться поле ID).
По моему мнению, это позволит сократить до минимума используемое на диске место, а также в режиме работы "проверка", при переходе к следующей записи можно быстро заносить новые значения полей фиксированной длины прямо в файл.

Вопрос, как понимаете, стратегический :D. Лажаться не хотелось бы - потом будет труднее все переделывать.
Подскажите, прав ли я и как можно сделать лучше. Все же не очень хотелось бы делить каждый словарь на два файла.
Заранее спасибо за конструктивные предложения!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.11.2005 (Пн) 9:29

У тебя вполне приемлимый вариант.
Причем второй файл можно архивировать, тогда словари вдобавок еще и компактными будут.
Вариант с одним файлом будет сложнее, тебе придется придумывать структуру файла (вначале должно быть что-то вроде FAT -- таблица разделов, каждый раздел будет оглавлением и помимо разделов будут области данных, с текстом перевода) и самому писать модуль, обрабатывающий этот файл.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Структура файла данных

Сообщение Andrey Fedorov » 14.11.2005 (Пн) 15:24

MaxP писал(а):С базами данных я практически не работал. Но по давнему опыту помню, что в Access такая БД на пару тысяч записей разраслась бы до нескольких метров, что абсолютно не приемлемо. Требуется, чтобы словари были как можно компактнее.


Вообще-то абсурд. MDB-шный формат хранения довольно компактен. В общем, по сравнению с бинарником на большом объеме данных разница будет небольшая (ну индексы мы не учитываем - в некоторых случаях их можно и не создавать). Разве что базу только после активного редактирования паковать надо, но это несложно. И еще - формат после 2000-го Access-a хранит строки в уенкоде. Так что с точки зрения компактности тебе лучше хранить данные в формате 97-го Access-a.

В общем я бы делал в базе, заодно с ней и работать значительно удобней, что совсем немаловажно...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

MaxP
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 21.09.2005 (Ср) 2:04

Re: Структура файла данных

Сообщение MaxP » 14.11.2005 (Пн) 23:57

Andrey Fedorov писал(а):MDB-шный формат хранения довольно компактен. В общем, по сравнению с бинарником на большом объеме данных разница будет небольшая
А если файлы небольшого размера? Например, записей на 50. Если мне не изменяет память, то сразу при создании БД с одной записью, файл весит несколько сотен КБ.

MaxP
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 21.09.2005 (Ср) 2:04

Сообщение MaxP » 15.11.2005 (Вт) 0:40

alibek, а можно упаковывать не файл, а отдельные записи. Т.е. архивировать строковые переменные и потом записывать их в файл.
Тогда не надо будет производить упаковку/распоковку всего файла при его открытии (что может быть достаточно долго при большом размере файла), а только при обращении к конкретной записи.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 15.11.2005 (Вт) 14:35

Мой совет: используй БД. Ибо все то, о чем ты пишешь и чего хочешь, приведет тебя фактически к созданию своего собственного движка БД. Не думаю, что ты именно эту цель перед собой ставишь в данный момент.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Структура файла данных

Сообщение alibek » 15.11.2005 (Вт) 15:09

Andrey Fedorov писал(а):И еще - формат после 2000-го Access-a хранит строки в уенкоде. Так что с точки зрения компактности тебе лучше хранить данные в формате 97-го Access-a.

Не соглашусь.
Если планируется переводчик, то unicode будет очень желателен.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Структура файла данных

Сообщение Andrey Fedorov » 15.11.2005 (Вт) 16:37

alibek писал(а):
Andrey Fedorov писал(а):И еще - формат после 2000-го Access-a хранит строки в уенкоде. Так что с точки зрения компактности тебе лучше хранить данные в формате 97-го Access-a.

Не соглашусь.
Если планируется переводчик, то unicode будет очень желателен.


А это смотря за чем автор гонится... ;) Хотя за несколькими байтами я в его случае бы не гнался. Ибо уенкод для программ работающих с разными кодовыми страницами есть очень хорошо.

Я, в данном случае, не заморачиваясь сделал бы MDB-шку 2003 формата и использовал бы ADO. :lol:

P.S. Win95/98/ME/NT4 в своих программах я уже давно поддержки лишил...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.11.2005 (Вт) 16:42

А NT4 почему? Там полностью поддерживался юникод, там WMI не было, но можно было поставить.
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 15.11.2005 (Вт) 16:45

alibek писал(а):А NT4 почему? Там полностью поддерживался юникод, там WMI не было, но можно было поставить.


А влом ;)

Точнее я не просто не пытаюсь отслеживать поддерживается ли к примеру, применяемая API-шная функция в NT. Конечно, скорей всего все пойдет под всеми версиями - просто не заморачиваюсь проверкой на старье...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 15.11.2005 (Вт) 16:48

Ты крут!
Давай ты в своих программах будешь использовать функции, которые появились только в 2003 server, не отслеживая этот факт?



Если я что-нибудь пишу, это работает везде.
А если нет, я точно знаю почему.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 15.11.2005 (Вт) 16:54

Не - я просто пишу что гарантирую работу программы только с Win2000 и выше. Причем могу это отследить и ругнуться.

А старых машин у моих юзеров уже нет - ведь пишу я в основном не для домашнего пользователя...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot, Yandex-бот и гости: 205

    TopList  
cron