В blob у меня хранится строка, длинною в 256 символов (вернее, цифр) и ужатая COMPRESS(). Если буду хранить ее несжатой, то таблица увеличится в 2,5 раза.
Разнести все по разным таблицам - это светлая идея, на мой взгляд.
Только 2.5 млн записей - это легкий тест. В продакшен будет намного больше. Если дойдет до этого... Так что хочу сделать все, чтобы максимально оптимизировать все.
База данных лежит на USB-HDD. На скрине его параметры. Основной жесткий диск примерно 2 раза быстрее. И производительность базы на нем тоже примерно 2 раза лучше (как понимаете, это не погоды не делает).
Я через phpmyadmin порой смотрю время выполнения запросов. Он пошуршит венчестером секунды 3, а потом родит "время выполнения запроса 0,25 секунд". Вот поэтому и смотрю реальное время.
Надо сказать, OPTIMIZE TABLE дал эффект. Выборки стали раз в 5-10 быстрее. Но при больших выборках все ровно более 1 сек...
Единственное, что "недоговорил", это то, что время выполнения запросов измеряю через PHP скрипт (записал текущее время, запустил запрос, сравнил время).
Виртуалка - VirtualBox с Debian и сетевым интерфейсом типа мост, запущенный на хостовой Windows7.
Ничего там в IO не упирается. Запускал весь проект на сервере (просто ставил debian на свой комп "нативно"), все работает примерно так же. Криво спроектирована БД - не исключено, не эксперт я...
1. Ok. попробую запустить и почитаю что это делает
2. Пользователь пока что один (запросы идет по одному). Но потом сделаю InnoDB
3. Не получится в MEMORY, есть поле BLOB с бинарными данными 90-150 байт. Но на RAM диске работало очень быстро (проект будет расти, в памяти держать не выйдет)
4. Кеш запросов не поможет. Каждый раз ID разные.
kxk
Про сфинкс почитаю. Хотя мне кажется это не мой случай. Тут не поиск, в просто выборка по ID.
primari key - это уже индекс, как я понимаю. Другой индекс по этому полю строить по идеи не нужно.
По category_id не понял. Видимо, это не мой случай. Все записи в таблице относятся к одной категории, так сказать. Их нельзя разделить по какому-то признаку, облегчающему выборку.
Кешируется 1 раз на сессию. Если закрыть и открыть браузер снова, то картинка начнет грузиться по-новой.
Интегрировать через "data:" не выйдет, картинку пользователь выбирает сам. Если бы это было возможно, то я бы разместил файл в каталоге расширения и не парился с выгрузкой из сети.
Ladycharm
В blob у меня хранится строка, длинною в 256 символов (вернее, цифр) и ужатая COMPRESS(). Если буду хранить ее несжатой, то таблица увеличится в 2,5 раза.
Разнести все по разным таблицам - это светлая идея, на мой взгляд.
Только 2.5 млн записей - это легкий тест. В продакшен будет намного больше. Если дойдет до этого... Так что хочу сделать все, чтобы максимально оптимизировать все.
ID в запросах менял, чтобы не попасть на кешированный.
Такой запрос выполняется за 0,5...2 сек.
База данных лежит на USB-HDD. На скрине его параметры. Основной жесткий диск примерно 2 раза быстрее. И производительность базы на нем тоже примерно 2 раза лучше (как понимаете, это не погоды не делает).
Читайте внимательно:
Этот HDD там могут 100 сайтов других раздирать по полной. Отсюда и тормоза.
Один сайт на virtualbox. HDD ничем не занят, идет только 1 запрос.
Я через phpmyadmin порой смотрю время выполнения запросов. Он пошуршит венчестером секунды 3, а потом родит "время выполнения запроса 0,25 секунд". Вот поэтому и смотрю реальное время.
Надо сказать, OPTIMIZE TABLE дал эффект. Выборки стали раз в 5-10 быстрее. Но при больших выборках все ровно более 1 сек...
Единственное, что "недоговорил", это то, что время выполнения запросов измеряю через PHP скрипт (записал текущее время, запустил запрос, сравнил время).
Виртуалка - VirtualBox с Debian и сетевым интерфейсом типа мост, запущенный на хостовой Windows7.
Ничего там в IO не упирается. Запускал весь проект на сервере (просто ставил debian на свой комп "нативно"), все работает примерно так же. Криво спроектирована БД - не исключено, не эксперт я...
i4e
Может база лежит на SSD? Моя на HDD
Dinozavr
Все на виртуалке крутится пока что. Дело до паблика еще не дошло.
- 2Гб оперативной памяти
- 1 ядро от Intell Core i5 3700 МГц
- Debian + apache2 + .....
LEOnidUKG
1. Ok. попробую запустить и почитаю что это делает
2. Пользователь пока что один (запросы идет по одному). Но потом сделаю InnoDB
3. Не получится в MEMORY, есть поле BLOB с бинарными данными 90-150 байт. Но на RAM диске работало очень быстро (проект будет расти, в памяти держать не выйдет)
4. Кеш запросов не поможет. Каждый раз ID разные.
kxk
Про сфинкс почитаю. Хотя мне кажется это не мой случай. Тут не поиск, в просто выборка по ID.
primari key - это уже индекс, как я понимаю. Другой индекс по этому полю строить по идеи не нужно.
По category_id не понял. Видимо, это не мой случай. Все записи в таблице относятся к одной категории, так сказать. Их нельзя разделить по какому-то признаку, облегчающему выборку.
vkusnoserver, А для него нужен выделенный сервер со специальным демоном?
Или на PHP хостинг ставится?
Кешируется 1 раз на сессию. Если закрыть и открыть браузер снова, то картинка начнет грузиться по-новой.
Интегрировать через "data:" не выйдет, картинку пользователь выбирает сам. Если бы это было возможно, то я бы разместил файл в каталоге расширения и не парился с выгрузкой из сети.
Про кеширование прочту, спасибо