Подскажите, какую лучше использовать структуру хранения данных в программе. Программа будет работать с чем-то наподобие словарей. Нужно решить как должны храниться данные в этих словарях. Исходные условия следующие: В одном словаре будет храниться теоретически бесконечное количество записей (на практике - 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).
По моему мнению, это позволит сократить до минимума используемое на диске место, а также в режиме работы "проверка", при переходе к следующей записи можно быстро заносить новые значения полей фиксированной длины прямо в файл.
Вопрос, как понимаете, стратегический . Лажаться не хотелось бы - потом будет труднее все переделывать.
Подскажите, прав ли я и как можно сделать лучше. Все же не очень хотелось бы делить каждый словарь на два файла.
Заранее спасибо за конструктивные предложения!