Восемь лет спустя
kv75
дневник заведен 05-10-2003
постоянные читатели [82]
закладки:
цитатник:
дневник:
местожительство:
Москва, Россия
интересы [13]
шахматы, грибы, Пратчетт, Иваси, Morrowind, Guild Wars
[1] 08-05-2008 07:37
Альпы

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

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

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

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

Экземпляр с автографами основных авторов (Яна и меня) я тебе обещаю. ;)
Кавайный злодей
ого, продолжение о том, что вы не умные - это что-то интересное! =))))

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

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

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

Ваш комментарий:
Камрад:
Гость []
Комментарий:
[смайлики сайта]
Дополнительно:
Автоматическое распознавание URL
Не преобразовывать смайлики
Cкрыть комментарий
Закрыть