kv75
09:26 18-10-2007 История диска - структура данных
Собственно, текущий выпуск официально (в документации) является уже четвёртым, но вспомнить все детали предыдущих я уже не могу. Не могу даже сказать, сколько именно выпусков было - четыре или пять. Но структура хранения данных претерпела множество кардинальных изменений.

В изначальном варианте диска никакой базы данных вообще не подразумевалось, а данные были выложены непосредственно в формате 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.

По некоторым сведениям, данное издание диска будет последним.
Комментарии:
Гость
15:13 18-10-2007
мы уже поняли, какие вы там все умные...
хотим экземпляр диска с автографами авторов! =))

Кс.
kv75
19:07 18-10-2007
Мы не умные (ты об этом ещё прочитаешь в продолжении), мы просто очень малыми силами делаем значительные продукты. :)

Экземпляр с автографами основных авторов (Яна и меня) я тебе обещаю. ;)
Ryumaster Xellos
01:59 19-10-2007
ого, продолжение о том, что вы не умные - это что-то интересное! =))))

у меня будет Ваш Диск коллекторс едишн! ^^
kv75
09:32 19-10-2007
К сожалению, он будет отличаться от обычного варианта только автографами авторов. Хотя, конечно, мы можем вложить туда ещё и фотографии. :)
Гость
11:37 19-10-2007
=))
Фотографии процесса работы над диском? (и бонус-диск The making of....")

Кс.
kv75
11:42 19-10-2007
Кс. Ага, только ты будешь фотографом!
Гость
15:00 19-10-2007
ну фотографии с презентации диска я уже явно сделать не смрогу... =)

кс.
kv75
10:11 20-10-2007
Кстати, как выяснилось, 25-го будет только пресс-конференция. А презентация будет когда-нибудь потом. :) Может, ещё и успеешь на неё.