Документация по запросам и структуре Текдок - версия 2
Инструкция по установке и работе с базой TecDoc в MySQL =======================================================
Дополнительные страницы:
- ART_LOOKUP.sql
- ART_LOOKUP2.sql
- ARTICLES.sql
- ARTICLES_SEARCH.sql
- COUNTRIES.sql
- FUNCTIONS.sql
- KEYS.sql
- MANUFACTURERS.sql
- MODELS.sql
- SEARCH_TREE.sql
- SEARCH_TREE2.sql
- SEARCH_TREE3.sql
- SEARCH_TREE4.sql
- SUPPLIER_COUNTRIES.sql
- TYPE_NUMBERS.sql
- TYPES.sql
- Файл:Filter Country Language 1-Functions Procedures.sql
- Файл:Filter Country Language 2-Filter Country.sql
- Файл:Filter Country Language 3-Filter Language.sql
- Filter_Country_Language info.txt
ВНИМАНИЕ: Перед загрузкой в MySQL базы данных такого большого размера обязательно оптимизируйте настройки
MySQL - в некоторых случаях это позволяет уменьшить время загрузки с нескольких суток до нескольких часов! См. ниже раздел "Оптимизация MySQL".
Структура папок и файлов ------------------------ base.full/ - SQL-дамп полной базы (для всех стран и на всех языках) base.noctm/ - SQL-дамп полной базы (для всех стран и на всех языках) без колонки поставляемости запчастей в разные страны - по объёму после загрузки в MySQL в 4 раза меньше базы base.full! base.europe/ - SQL-дамп базы, отфильтрованной по группе стран "Европа" (код 248) на всех языках - по объёму после загрузки в MySQL в 4 раза меньше базы base.full! base.russia/ - SQL-дамп базы, отфильтрованной по группе стран "Страны бывшего СССР" (код 204) и русскому языку (код 16) - по объёму после загрузки в MySQL в 5 раз меньше базы base.full! distributive/ - дистрибутив каталога TecDoc (в виде образов DVD-дисков), из которого выгружались данные, таблетка к нему нормально работает под Windows XP/Vista/7/2003/2008/2008 R2. queries/ - примеры SQL-запросов к базе MySQL queries/Filter_Country_Language/ - Скрипт для уменьшения размера базы данных: фильтрует данные по стране и/или языку. Позволяет получить из базы base.full свой аналог базы base.russia по любой комбинации страны/языка. addons/count_rows - количество строк в каждой таблице всех версий базы данных (можно использовать для проверки: всё ли залилось?) addons/models.php - PHP-пример вывода всех моделей автомобилей марки ALFA ROMEO (на основе примера SQL-запроса MODELS.sql) addons/SEARCH_TREE4.xlsx - таблица с деревом категорий всех запчастей addons/tecdoc_schema.png - графическая схема связей между основными таблицами Текдока tecdoc_tables.txt - описание основных таблиц TecDoc'а useful_tables.txt - список таблиц, использованных в моих примерах SQL-запросах - позволит вам не загружать в базу данных ненужные таблицы.
Порядок действий для загрузки базы в MySQL ------------------------------------------
1. Скачиваете нужные файлы 2. Проверяете целостность архивов по контрольным суммам MD5 3. Настраиваете и перезапускаете MySQL 4. Создаёте пустую базу данных 5. Создаёте пустые таблицы SQL-скриптом создания таблиц 6. Распаковываете и загружаете данные таблиц из SQL-дампа
Загрузка SQL-дампов в MySQL --------------------------- Структура таблиц и сами данные находятся в разных файлах. Данные тоже разделены на несколько
файлов - в соответствии с таблицами, в которые они загружаются:
tecdoc.Версия.ТипБазы.structure.mysql.ТипХранилища.sql - SQL-скрипты создания структуры всех таблиц
со всеми индексами, необходимыми для быстрого выполнения примеров SQL-запросов.
tecdoc.Версия.ТипБазы.structure.mysql.ТипХранилища.nokeys.sql - SQL-скрипты создания структуры
всех таблиц с минимальным набором индексов.
data/tecdoc.Версия.ТипБазы.data.ИмяТаблицы.7z - Архивы, содержащие данные таблиц. Здесь ТипХранилища - это InnoDB или MyISAM (подробнее они описаны ниже).
Не пытайтесь загружать SQL-дампы такого размера через phpmyadmin - бесполезное занятие.
Используйте родную консольную утилиту mysql (или mysql.exe под Windows) - идёт в комплекте с СУБД MySQL. Под Windows работает в командной строке, под UNIX - в SSH-консоли. Если у вас нет SSH-доступа к хостингу, попробуйте PHP-скрипт bigdump: http://www.ozerov.de/bigdump/ (хотя через консольный mysql-клиент всё равно гораздо быстрее)
Чтобы создать пустые таблицы, выполните в папке с SQL-скриптом команду:
mysql -uЛогин -pПароль ИмяБазы <tecdoc.Версия.ТипБазы.structure.mysql.ТипХранилища.sql
Чтобы загрузить все .sql-файлы с дампом из текущей папки, выполните в этой папке команду:
Под UNIX: cat *.sql | mysql -uЛогин -pПароль ИмяБазы Под Windows: type *.sql | mysql -uЛогин -pПароль ИмяБазы
Если хотите загрузить в MySQL не все, а только некоторые таблицы, можете не скачивать
все архивы с данными, а выбрать только нужные вам. В SQL-скрипте создания таблиц также уберите ненужные таблицы, либо выполните его целиком и затем удалите ненужные пустые таблицы из MySQL.
Вам точно не понадобятся ВСЕ таблицы Текдока. Так для выполнения всех моих примеров
SQL-запросов достаточно 30 таблиц, перечисленных в файле useful_tables.txt, а всего в Текдоке их 77! Кроме того, если будете использовать не все примеры SQL-запросов, можете даже из этих 30 таблиц выбрать ещё меньший набор, глянув их краткие описания всё в том же файле useful_tables.txt.
Если вам нужны из Текдока только кроссы (поиск аналогов запчастей), то вам будет достаточно таблиц:
ART_LOOKUP ARTICLES BRANDS DES_TEXTS DESIGNATIONS SUPPLIERS
А из примеров SQL-запросов будет достаточно этих:
ART_LOOKUP.sql ART_LOOKUP2.sql
Распаковка архивов ------------------ База упакована архиватором 7-Zip. Скачать его можно тут:
Под Windows: http://7-zip.org/download.html (с графическим интерфейсом + консольный вариант) Под Linux/UNIX (p7zip): http://sourceforge.net/projects/p7zip/files/ (только консольный вариант)
p7zip есть и в скомпилированном варианте (под Linux x86: p7zip_*_x86_linux_bin.tar.bz2),
и в виде исходников (p7zip_*_src_all.tar.bz2), которые можно скомпилировать под любую другую платформу. В стандартных пакетах большинства дистрибутивов операционных систем есть уже скомпилированный p7zip под конкретно эту ОС. Пакет обычно называется p7zip или p7zip-full (для распаковки архивов .7z достаточно любого).
В некоторых Linux-системах вместо имени 7z нужно использовать 7za - учтите это во всех примерах,
приведённых ниже.
Если будете распаковывать p7zip'ом не только SQL-дамп базы, но и картинки, советую использовать только
версии 4.58-4.65, т.к. они распаковывают большое количество мелких файлов значительно быстрее всех остальных версий (включая последние бета-версии 9.xx) - разница по скорости до 5 раз! В 7-Zip под Windows разные версии по скорости распаковки не отличаются.
Распаковывать из командной строки так:
7z x ИмяАрхива (или имя первой части архива - с расширением .001)
Загружать SQL-дампы в MySQL можно с распаковкой из 7-Zip "на лету" - советую делать именно так, ибо
это быстрее и требует меньше свободного места на диске. Для загрузки данных в MySQL сразу из всех скачанных архивов в текущей папке используйте команду: 7z x -so "*.7z" | mysql -uЛогин -pПароль ИмяБазы
Под Windows во всех командах нужно указать полные пути до файлов 7z.exe и mysql.exe, заключая их
в "двойные кавычки", если пути содержат пробелы.
Таблицы загружаются в MySQL в кодировке UTF-8. Загрузка всех таблиц занимает 3-12 часов с минимальным набором индексов и 6-24 часов с полным
набором индексов. Если выберете минимальный вариант, то все дополнительные индексы, необходимые для быстрого выполнения примеров SQL-запросов, можете потом добавить из файла queries/KEYS.sql, хотя в этом случае создание дополнительных индексов займёт те же 5 часов, что вы сэкономите изначально на загрузке таблиц.
Проверка целостности архивов (MD5) ---------------------------------- Поскольку архивы крупные и распаковываться будут достаточно долго (особенно если при распаковке сразу
заливать данные в базу MySQL), чтобы не наткнуться на ошибку где-нибудь посреди этого процесса, советую предварительно проверить целостность скачанных файлов с помощью файла dir.md5. Там контрольные суммы MD5 для всех архивов.
Проверить MD5 можно:
1. Встроенными средствами Total Commander'а (под Windows) 2. Утилитой md5sum, работающей из командной строки.
md5sum под Windows можно скачать тут: http://etree.org/cgi-bin/counter.cgi/software/md5sum.exe md5sum под Linux/UNIX входит в набор GNU Coreutils: http://www.gnu.org/software/coreutils/
который есть изначально во всех дистрибутивах Linux/UNIX.
Запускать так:
md5sum.exe -c dir.md5 & pause
Если после запуска в конце не выдало строчку WARNING, значит всё OK.
Оптимизация MySQL ----------------- Рекомендую использовать хранилище InnoDB, т.к. оно позволяет кэшировать в памяти не только индексы,
но и данные таблиц. При желании вы можете загрузить всё и в MyISAM, воспользовавшись соответствующим SQL-скриптом создания структуры таблиц.
Все перечисленные ниже параметры указываются в разделе [mysqld] файла:
my.cnf (под Linux/UNIX) my.ini (под Windows) После изменения параметров в этом файле нужно перезапустить MySQL.
Оптимизация хранилища InnoDB ---------------------------- Если заливаете в хранилище InnoDB, основная настройка, влияющая на скорость заливки (да и работы
базы потом тоже): innodb_buffer_pool_size = 1024M Выделяет 1024 МБ под общий кэш на данные и индексы в InnoDB - в т.ч. под операции создания индексов. Всего MySQL в этом случае съедает около 1.5 ГБ оперативной памяти. Если памяти мало, выделите под этот параметр хотя бы 512 МБ.
Также очень полезно в случае InnoDB добавить параметр: innodb_file_per_table = 1
Он заставляет MySQL хранить каждую таблицу хранилища InnoDB в отдельном файле с названием вида
"ИмяБазы/ИмяТаблицы.ibd". Иначе все таблицы размещаются в общем файле "ibdata1", который только увеличивается и никогда не уменьшается - даже при удалении таблиц и баз данных!
MySQL после изменения настроек нужно перезапустить. Если до этого у вас в MySQL уже были таблицы формата InnoDB, после изменения параметра
они останутся в файле "ibdata1" - в отдельные файлы попадут только таблицы, созданные позже. Если хотите также переместить старые таблицы InnoDB в отдельные файлы, примените SQL-команду: ALTER TABLE ИмяБазы.ИмяТаблицы ENGINE=InnoDB; для каждой из своих старых таблиц. После этого можно завершить работу MySQL, удалить файл "ibdata1", и при очередном запуске MySQL создаст стандартный пустой файл "ibdata1" размером 10 МБ, а все таблицы окажутся в отдельных файлах.
Оптимизация хранилища MyISAM ---------------------------- Если заливаете в хранилище MyISAM, используйте такие настройки:
Кэш индексов - возможно и не используется при создании индексов, но точно используется при дальнейшей
работе с таблицами: key_buffer_size = 128M
Буфер в оперативной памяти под операции создания индексов:
myisam_sort_buffer_size = 512M
Максимальный размер временного файла НА ВИНТЕ для создания индекса, лучше ставить довольно большим,
иначе индексы делаются как-то совсем медленно через keycache: myisam_max_sort_file_size = 10G
Разрыв SSH-соединения при загрузке данных под Linux/UNIX --------------------------------------------------------
Есть 2 способа решения этой проблемы:
1. Можно запускать команды SSH в фоновом режиме, добавив в конце: >/dev/null 2>&1 & Например: 7za x "*.7z" >/dev/null 2>&1 & Затем можно отделить этот фоновый процесс от текущего сеанса работы с SSH командой: disown %1 Подробнее управление фоновыми процессами из консоли Linux описано тут: http://clinuxworld.com/ubuntu/36-administration/278-running-processes-in-the-background-and-foreground
2. Есть в Linux'е такая консольная утилита: screen Она создаёт свой виртуальный сеанс работы с операционной системы отдельно от текущего сеанса SSH-подключения. А также позволяет создать много таких сеансов и переключаться между ними как между окнами. При этом если SSH-сеанс разрывается, все ваши обычные процессы продолжают выполняться под screen'ом. При следующем SSH-подключении вы можете вернуться к любому из открытых ранее сеансов и контролировать ход их работы, прерывать выполнение процессов и т.д. Главное не забывать про свои открытые screen-сеансы и закрывать их, когда они уже не нужны, командой exit. Если screen не установлен в вашей ОС, во всех дистрибутивах ОС его можно установить из стандартного комплекта "пакетов" или "портов". Подробнее эта утилита описана тут: http://help.ubuntu.ru/wiki/screen
Выбор хостинга -------------- Рекомендую использовать под базу данных либо выделенный сервер, либо виртуальный выделенный сервер (VPS),
т.к. она сильно нагружает хостинг при заливке и обновлении данных, а также требует дополнительной настройки MySQL.
Наиболее критично количество оперативной памяти.
Рекомендую: 2 ГБ памяти, из которых 1.5 ГБ выделить под MySQL. Минимальный вариант: 1 ГБ памяти, из которых 700 МБ под MySQL. Работать будет, но долго заливать/обновлять данные.
Либо можете использовать базу данных удалённо с моего сервера MySQL - в этом случае упрощается процесс
первоначальной загрузки, будущих обновлений и уменьшаются требования к вашему хостингу: в большинстве случаев под сайт будет достаточно дешёвого виртуального хостинга на 1-5 ГБ.
Примеры SQL-запросов -------------------- Если непонятно, как работают какие-то SQL-запросы из примеров, добавьте слово EXPLAIN перед ним, например:
EXPLAIN SELECT * FROM LANGUAGES; Это часто помогает разобраться в структуре сложного запроса: как таблицы связываются друг с другом и как именно MySQL этот запрос обрабатывает. Из этой же расшифровки запроса обычно видно, какими дополнительными индексами можно ускорить запрос, если он выполняется долго.
Примеры 22 популярных запросов к полученной базе MySQL с подробными комментариями можно посмотреть в
папке queries:
ART_LOOKUP.sql - Поиск изделия (от любых производителей) по заданному оригинальному/неоригинальному/торговому номеру
Используется для уточнения производителя, чтобы дальше искать аналоги уже по конкретному сочетанию: Номер + Производитель
ART_LOOKUP2.sql - Поиск аналогов (оригинальных/неоригинальных/торговых) к любому заданному номеру (оригинальному/неоригинальному/торговому) ARTICLES.sql - Вывод детальной информации по заданному неоригинальному изделию (ART_ID):
Общая информация об изделии Критерии (характеристики) Дополнительная информация об изделии Номера аналогов (оригинальных/неоригинальных/торговых) Пути к файлам картинок Пути к файлам логотипов поставщика изделия Пути к PDF-файлам Применимость к автомобилям Рекомендуемые цены
ARTICLES_SEARCH.sql - Поиск неоригинальных изделий из категории с заданным текстом в названии, подходящих для заданного автомобиля (TYP_ID) COUNTRIES.sql - Вывод списка всех стран и групп стран TecDoc'а MANUFACTURERS.sql - Вывод всех марок автомобилей (брэндов) MODELS.sql - Вывод списка моделей по заданной марке автомобиля (MFA_ID) SEARCH_TREE.sql - Построение дерева категорий изделий для заданного типа автомобиля (TYP_ID) SEARCH_TREE2.sql - Вывод списка неоригинальных изделий для заданного типа автомобиля (TYP_ID) и категории (STR_ID) SEARCH_TREE3.sql - Вывод списка неоригинальных изделий для заданной категории (STR_ID) SEARCH_TREE4.sql - Вывод полного дерева категорий всех запчастей SEARCH_TREE4.xlsx - Таблица с результатом выполнения одноимённого запроса для текущей версии TecDoc SUPPLIER_COUNTRIES.sql - Вывод страны заданного неоригинального производителя (SUP_ID) TYPE_NUMBERS.sql - Вывод списка типов автомобилей по заданному KBA-номеру (используется в Германии) TYPES.sql - Вывод списка типов автомобилей по заданной модели (MOD_ID)
В некоторых примерах стоит ограничение LIMIT 100, чтобы показывать только первые 100 найденных
строк. Если хотите увидеть все строки - уберите это ограничение.
Чаще всего эти примеры запросов используют по цепочке, подставляя значения, полученные на каждом предыдущем
шаге, в исходные данные следующего:
1. Выбор через дерево автомобилей и категорий запчастей:
MANUFACTURERS.sql -> MODELS.sql -> TYPES.sql -> SEARCH_TREE.sql (несколько раз) -> SEARCH_TREE2.sql -> ARTICLES.sql
2. Прямой поиск артикула (в т.ч. по номеру аналога):
ART_LOOKUP.sql -> ART_LOOKUP2.sql -> ARTICLES.sql
Дополнения:
FUNCTIONS.sql - Дополнительные MySQL-функции и примеры их использования KEYS.sql - Добавление дополнительных индексов в таблицы для ускорения запросов из примеров.
Понадобится только в том случае, если изначально загружали таблицы с минимальным набором индексов.
- Подробнее о ценах ПО Ирбис на базе текдок от нашей компании: http://www.mstarproject.com/?action=tecdoc_mysql_site
- Вся текстовая информация в одном архиве: http://manual.mstarproject.com/images/tecdoc_autobase_original.zip