IMDBOptimizer (OC 2.3) - Оптимизация базы данных

IMDBOptimizer (OC 2.3) - Оптимизация базы данных

IMDBOptimizer - Оптимизация базы данных OpenCart 2.3

Все просто! Бекап базы -> Выбрать таблицы -> Нажать Генерировать -> ВСЕ!!!


подробнее ...
Цена
450р.
Загружен: 02.10.2017
Покупок:  1
devimirochnik Россия портфолио
Товаров: Рейтинг: Продаж:
Название файла Имя файла Дата Действие
IMDBOptimizer(2.3)_1.1.0.zip IMDBOptimizer(2.3)_1.1.0.zip 2017-11-13 11:11:59 Платный файл
* Возможность скачивания появится после покупки

IMDBOptimizer (OC 2.3) - Оптимизация базы данных


Найти версию для OpenCart 1.5 можно тут:

http://shop.opencart-russia.ru/imdboptimizer15

Найти версию для OpenCart 2.0-2.2 можно тут:

http://shop.opencart-russia.ru/imdboptimizer

Оптимизация базы данных интернет-магазина — это весьма непростой вопрос, порой требующий отдельных исследований.
И самое неприятное в этом процессе заключается в том, что сделать хоть какую-то оптимизацию может только тот, кто знает sql-запросы и разбирается в базах данных (БД).

Статьи про модуль или просто полезные материалы

1. Что такое индексы базы данных (для начинающих)?

2. Индексы и немного хитрой математики

3. Тестируем IMDBOptimizer для 2000 и 5500 товаров

Демо модуля

Демо админки (demo/demo)

Есть и еще один неприятный момент. По умолчанию, не считая просто необходимых индексов, в базе данных опенкарта попросту не хватает индексов даже для всех полей с идентификаторами. Хотя это является одной из базовых рекомендаций при проектировании любых БД.


Для тех, кто не совсем представляет в чем суть, приведу простой пример.

Допустим, у вас есть 1000 записей в таблице и вам нужно найти по какому-то полю предпоследнюю запись (при этом каждое значение в поле уникально). В случае, если для этого поля не будет создано индекса в базе данных, то чтобы найти запись mysql придется проверить 999 записей. Если же индекс будет создан, то mysql потребуется не более 10 сравнений.

Если же поле неуникально (то есть у разных записей может встречаться одно и то же значение), то создание индекса так же может сократить время поиска. Допустим, та же самая ситуация - 1000 записей и вам нужно найти предпоследнюю. Так же считаем, что в среднем каждое значение поля повторяется 10 раз. Без индекса — все по прежнему — 999 проверок. С индексом, даже в худшем случае будет 17 сравнений (7 поиск по индексу и 10 поиск среди похожих записей). 

Примечание: Во второй ситуации поиск по индексу происходит быстрее (7 вместо 10), так групп записей всего 100 (1000 разделить на 10). Немного упрощая, максимальное количество сравнений рассчитывается по формуле двоичного логарифма от исходного количества log2 от 100 примерно равно 7.

Модуль уже содержит настройки для проведения базовой оптимизации базы данных, так что с этой задачей справится даже новичок (более подробное описание представлено ниже).

Так, например, в чистом OpenCart 2.3.0.2 было создано 211!!!! индексов. Даже обладая всеми необходимыми знаниями, проверить и создать такое количество индексов — весьма длительная рутинная задача. Что же говорить про остальных?

Кроме того, модуль так же позволяет просматривать все существующие индексы в БД для выбранных таблиц (кнопка «Показать данные таблиц!»), что нередко облегчает анализ и оптимизацию, так как нет необходимости настраивать доступ к phpMyAdmin, создавать пользователей, вручную вводить sql-запросы и прочее.

 

Для тех, кому нужна только базовая оптимизация

Если вы не планируете сами вносить дополнительные индексы (или же оставите это тем, кто в этом разбирается), то, как уже говорил, модуль содержит настройки по умолчанию для базовой оптимизации БД.

Важно! Учтите, что операция весьма длительная и что требуется минимальная нагрузка в базе данных (то есть, желательно, чтобы пользователей сайта вообще не было или их было немного). В крайнем случае, вы можете создавать индексы по одной таблице отдельно, а не все скопом.

1. Сделайте бэкап всей базы данных! Это важно!
2. Откройте модуль
3. Выберите все таблицы (можно щелкнуть по ссылке «Выделить всё»)
4. Чуть ниже, щелкните по кнопке «Генерировать!»
5. Откиньтесь на спинку кресла и наблюдайте как модуль создает индексы

Несколько щелчков мыши и у вас проведена базовая оптимизация базы данных!



Профилактика — создание индексов

Для профилактики, необходимо запускать генерацию после установки любых других модулей, которые создают свои таблицы (не всегда в них имеются все необходимые индексы).

Индексы создаются самые простые без ограничений, так что в таблицах модулей не будет нарушена какая-либо логика (только если модуль не будет в последствии добавлять индексы без проверок, но обычно это редкость).

 

Профилактика — оптимизация таблиц

Базы данных это сложные механизмы, где часть вещей остается на ответственность пользователей. Одной из них является снижение производительности, в связи с частым изменением и модификацией набора записей таблиц. 

Проще говоря, товаров, их атрибутов и прочего. Что особенно актуально для магазинов с частым импортом прайсов или для магазинов, использующих парсеры.

Поэтому для повышения производительности БД рекомендуется периодически выполнять оптимизацию таблиц. В среднем, для OpenCart это, примерно, раз в неделю.

Чтобы провести оптимизацию, достаточно лишь открыть вкладку «Сервис», выбрать таблицы и нажать кнопку «Оптимизировать!».

Учтите, что данная операция может занимать время и блокировать доступ к данным во время своего выполнения. Поэтому лучше всего выполнять ее, когда пользователей либо нет на сайте, либо их минимальное количество.

 

Починка таблиц

Как же неприятно открыть страницу товара и увидеть вместо карточки сообщение вида «PHP … Table is currupted … try to repair it...».

Редко, но такое бывает, что таблицы в БД MySql повреждаются. К счастью, чаще всего для их починки достаточно лишь запустить специальный запрос. Однако, чтобы это сделать необходимо зайти в хостинг, открыть панель phpMyAdmin, найти в интернете как составлять запрос и запустить его (а до этого всего, еще понять что делать с этой ошибкой). Для обычных пользователей или тех, кто только начинает, это весьма непростая задача.

Модуль же позволяет существенно упростить этот процесс. Нужно лишь указать поврежденную таблицу и нажать кнопку «Починить!» во вкладке «Сервис».

Учтите, что ошибки при подсчете не всегда означают ошибки восстановления. Так, например, таблица oc_cart попросту не поддерживает данный вид команды. 



Блок с именами

Для настройки автоматического поиска и создания одиночных индексов, рядом с блоком таблиц есть три поля, где можно указывать конкретные имена полей, их начало или окончание (через запятую). 

Стоит понимать, что они действуют по правилу ИЛИ. То есть если поле таблицы указано среди конкретных полей ИЛИ начинается с одного из указанных префиксов ИЛИ заканчивается на одном из указанных окончаний, то для поля в текущей таблице будет создан индекс. 

Например:

Конкретные поля:
product_id, language_id

Префиксы:
stat, col

Окончания:
_id

При таких настройках, индекс для поля «product_option_value_id» будет создан (если его нет в таблице), так как поле заканчивается на «_id»



Карта индексов

В данном блоке можно составлять конкретные индексы, которые необходимо создать. Важно, что таблица каждого правила должна быть выбрана в списке таблиц. Иначе индекс не будет проверен или создан. 

Правила составляются по следующему принципу: 

Имя таблицы - Поле (, Поле)


Где имя таблицы может быть как указано с общим префиксом БД, так и вместо префикса можно использовать символ #, который будет автоматически заменен на префикс. Чтобы создать индексы из нескольких полей, их необходимо перечислить через запятую.

Например:

#product_description - language_id, product_id


В данном случае будет создан индекс (language_id, product_id) для таблицы oc_product_description (если такового индекса не было в таблице).

 

Удаление индексов

В закладке «Индексы» есть возможность удалять из таблиц индексы, созданные модулем. А именно те, которые имеют префикс «imdbo_». 

Сделано это для того, чтобы исходные индексы или созданные вручную индексы не были случайным образом удалены из базы данных.

 

Подход к генерации имен индексов

Чтобы упростить использование созданных индексов для других авторов и создателей сайтов, в модуле был введен специальный алгоритм генерации имен создаваемых индексов.

Так что если вы будете планировать использовать данные индексы при построении своих sql-запросов (например, с возможностью повторного внедрения в другие интернет-магазины), то сделать это будет весьма просто.

Сам алгоритм подбора

Шаг 1. Составляется имя «imdbo_» + «[поле 1]» + «_[поле 2]» + … + «_[поле N]». Если у таблицы индекса с таким именем нет и его длина не превышает 64 символа (требование БД), то индексу присваивается это название. В противном случае, алгоритм переходит к следующему шагу.

Например, для индекса (product_id) будет использовано имя «imdbo_product_id», а для индекса (product_id, order_id) будет использовано имя «imdbo_product_id_order_id». И так далее.

Шаг 2. Составляется имя «imdbo_» + «[поле 1 — первые буквы слов в столбце]» + «_[поле 2 — первые буквы слов в столбце]» + ...  Если индекса с таким именем нет и его длина не превышает 64 символа (требование БД), то индексу присваивается это название. В противном случае, переход к следующему шагу.

Например, для индекса (order_id, customer_id, store_id, payment_zone_id, currency_id, marketing_id), чья длина больше 64 символов в шаге 1, будет использовано имя «imdbo_oi_ci_si_pzi_ci_mi».

Шаг 3. Практически нереальная ситуация, но сделана для унификации. Составленное имя из шага 2 обрезается до 61 символа (если требуется) и к нему прибавляется приставка «_[номер]», где номер от 1 до 99. 

Например, «imdbo_oi_ci_si_pzi_ci_mi_1», …, «imdbo_oi_ci_si_pzi_ci_mi_25», «imdbo_oi_ci_si_pzi_ci_mi_99».

Если же и это недостижимо, то выполняется следующий шаг.

Шаг 4. Аналогично шагу 3, практически нереальная ситуация, но сделана для 100% унификации. Имя стоится как «imdbo_» + «[время UTC]»  + «_[номер]». Например, «imdbo_1508711578_3».

А теперь, по-простому. При базовой оптимизации будут созданы индексы только шага 1. Шаг 2 это уже настройки из карты индексов (если вручную были указаны сложные составные индексы). Шаг 3  встретится очень редко, но если и встретится такое, то имена с постфиксами будут аналогичными от интернет-магазина к интернет-магазину. Шаг 4 сделан просто для безопасности, но в реальности невозможен (если, конечно, кто-то специально вручную не создал более 100 одинаковых индексов для таблицы).



Особенности и ограничения

1. Важно учитывать, что генерация индексов происходит для каждой таблицы отдельно. То есть для каждой таблицы отдельно посылается AJAX-запрос. Это связано с тем, что для больших таблиц создание одного индекса может быть весьма длительной операцией. Поэтому, если вы запустили генерацию, то просто дождитесь, когда рядом с кнопками появится сообщение, что генерация завершена.

2. Создаются только обычные индексы. 

3.Удаляются только индексы, созданные модулем. А именно те, которые имеют префикс «imdbo_». Сделано для того, чтобы не сломать исходные настройки базы данных и вручную созданные индексы.

4. Если не существует указанных таблиц или полей, то указанные данные будут просто игнорироваться. 

5. В БД проверяются только те таблицы, которые начинаются с префикса копии опенкарта (Сделано для тех, кто использует в одной БД несколько сайтов)

6. Пользователь должен иметь полные права для получения доступа к БД (или достаточные для получения метаданных и создания индексов)

7. Оптимизация производится для БД MySQL

8. Имена создаваемых индексов имеют технические названия (техническое ограничение автоматизации)

9. Если существует идентичный по полям индекс, то ничего не будет происходить.

10. Требуется boostrap и jquery



Установка, следующие версии и использование

1. Распакуйте в корень сайта содержимое (каталоги admin и system)
2. Откройте админку и установите модуль (если это следующая версия, то переустановите)
3. Обновите модификаторы
4. Откройте в админке модуль (редактирование)

 

Лицензия и использование

Сделано для версий OpenCart 2.3.0.2, ocStore 2.3.0.2, 2.3.0.2.1
Лицензия распространяется только для одного сайта. Т.е. 1 домен = 1 оплата.
Купив модуль вы автоматически соглашаетесь с текстом лицензии.
Модуль имеет принцип распространения "as is" ("Как есть").

Ввод лицензионного ключа необходимо осуществить в течение 5 дней после установки модуля. Лицензионный ключ состоит из двух частей.

Ключи необходимо вводить так, как они были присланы, без лишних пробелов и символов.

Запрещается несанкционированное использование, копирование, перепродажа, передача модуля третьим лицам, а также иные способы распространения, в том числе в ознакомительных целях.

Если вы приобрели модуль до введения лицензирования, то вам необходимо написать мне и указать при этом доменное имя сайта и тестовый домен, если таковой имеется (учтите, что тестовый домен должен быть тестовым, то есть поддоменом какого-либо сайта).

Если у вас русский домен, то необходимо указывать то имя, которое указано в config.php в корне сайта.

 

История версий

Версия 1.1.0
- Изменен подход к генерации имен индексов
- Добавлена возможность удалить созданные модулем индексы
- Добавлена вкладка "Сервис"

Версия 1.0.0
- Сам модуль 

IMDBOptimizer (OC 2.3) - Оптимизация базы данных IMDBOptimizer (OC 2.3) - Оптимизация базы данных IMDBOptimizer (OC 2.3) - Оптимизация базы данных

Написать отзыв

* Выполните Вход в свой аккаунт, для получения возможности оставить отзыв о товаре.

Оставить комментарий



Примечание: HTML разметка не поддерживается! Используйте обычный текст.

Введите код, указанный на картинке: