Собственно, текущий выпуск официально (в документации) является уже четвёртым, но вспомнить все детали предыдущих я уже не могу. Не могу даже сказать, сколько именно выпусков было - четыре или пять. Но структура хранения данных претерпела множество кардинальных изменений.
В изначальном варианте диска никакой базы данных вообще не подразумевалось, а данные были выложены непосредственно в формате CSV (который до сих пор используется для редактирования с помощью моей программы – непосредственно в базе ничего не редактируется, только перезаливается при необходимости).
Следующий вариант хранения данных использовал стандартный дельфийский Парадокс со всеми его достоинствами и недостатками. Собственно, недостатков у него два: необходимость инсталлировать BDE на компьютер пользователя и отсутствие типа данных varchar. Второй из этих недостатков в силу специфики нашей базы оказался решающим и вынудил искать альтернативы. Конечно, мы сразу начали выносить многие поля из основной таблицы в подтаблицы, чтобы сэкономить пространство, но это довольно быстро перестало помогать. Для больших БД с обилием текстовых полей варьирующейся длины, по которым надо вести поиск, Парадокс абсолютно непримлем, так как кушает слишком много избыточного места; и даже все его достоинства в виде простоты языка запросов (оператор LIKE прекрасно работает для индексированных полей) и общей надёжности не могут помочь.
Для третьего варианта базы данных был выбран MySQL, имевший тип varchar. Применение MySQL позволило в 2004 году увеличить объём базы до 1,4 млн. человек. К сожалению, на этом все достоинства того издания и закончились. Основная проблема заключалась в том, что в то время была только что выпущена библиотека libmysqld (Embedded Server Library), и я не смог найти приемлемого интерфейса для работы с ней. Для подстройки того, что я нашёл, мне пришлось даже перекомпилировать саму библиотеку. В результате оболочка работала крайне нестабильно. Каждая компиляция программы сопровождалась танцем с бубнами: заработает – не заработает. В свою очередь, это сильно мешало улучшать программу. Как бы то ни было, диск был выпущен с относительно удачной версией оболочки (вылетов было крайне мало). Зато все обратили внимание на черепашью скорость работы. Ну да, я тогда не имел достаточного опыта работы с MySQL и пренебрёг построением полнотекстовых индексов (в Парадоксе, похоже, все индексы могут использоваться в качестве полнотекстовых). Все знакомые с MySQL могут сразу оценить, к какому эффекту это привело. Справедливости ради следует заметить, что при той структуре диска полнотекстовые индексы, вероятно, уже просто не уместились бы на CD.
Новая (и последняя на данный момент) версия диска вышла только через три с половиной года. БД осталась в формате MySQL (точнее, MyISAM), но структура базы претерпела серьёзные изменения. Они были вызваны прежде всего увеличением почти вдвое (до 2,7 млн записей) объёма БД. Чтобы уместить такой объём на одном CD, пришлось прибегать к совершенно ужасным с точки зрения всех правил нормализации мерам. БД была логически (и физически) разбита на две части. Основная таблица объёмом 2,7 млн записей или 480 МБ (со своими индексами) осталась на CD. Собственно, основная проблема с объёмом и быстродействием была именно в ней, так что таблица использует статический формат MyISAM, включая только даты (в нестандартном формате) и ключи для подтаблиц. Все же остальные таблицы вынесены в отдельную базу данных, хранящуюся на CD в зипованном виде и инсталлирующуюся на жёсткий диск. Объём этой части БД в распакованном виде составляет 425 МБ. Основной фокус в том, что ключи для многих полей в основной таблице отсутствуют. Это сделано для тех полей, которые в большинстве (более 2/3) записей отсутствуют. Для таких полей помимо таблицы значений существует также таблица связи с основной таблицей. Запись в таблицу связи заносится только в случае ненулевого значения поля; в результате достигается экономия места. Разумеется, полнотекстовые индексы на этот раз не забыты, а в качестве интерфейса оболочки для работы с БД используются модифицированные мной компоненты ZeosLib.
По некоторым сведениям, данное издание диска будет последним.