[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Комбинация PHP, MySQL, C
Alecs
Здраствуйте.
Передомной была поставлена задача: уменьшить время отклика с сайта. Причем борьба идет не за секунды, а за десятые и даже сотые доли секунды. Все что можно было отладить на сервере сделано. И все равно время ожидания слишком велико. Тормозит MySQL, в базе более 500000 записей. Отбор ведется по текстовому полю.
Частично этот вопрос я решил, через хеширование БД. Время отклика стало приемлемым, но размер хеша(хешей) очень большой. Сохранение и восстановление массива занимают времени на много больше чем простая выборка из базы данных. Сейчас хочу попробовать этот скрипт написать на С. Однако все полностью писать на С мне в лом (тем более я ранее никогда не писал CGI, тем более на С), может быть кто нибудь подскажет способ связки PHP --> C --> MySQL --> ( C ) --> PHP.
Всем другим советам тоже буду рад.
За ранее спасибо.



Спустя 5 минут, 43 секунды (18.05.2007 - 13:25) Ghost написал(а):
хм, самое слабое звено - база, скорость самого скрипта большой погоды не сделает имхою Хоть на си, хоть на басике, от того что к базе обращается, быстрее она работать не станет, к сожалению.
поработайте с базой, может структуру переделать, может индыксы какие..
Цитата
Отбор ведется по текстовому полю.

подробней плиз

Спустя 16 минут, 16 секунд (18.05.2007 - 13:41) Alecs написал(а):
Цитата(Ghost @ 18.5.2007, 10:25) [snapback]20744[/snapback]
хм, самое слабое звено - база, скорость самого скрипта большой погоды не сделает имхою Хоть на си, хоть на басике, от того что к базе обращается, быстрее она работать не станет, к сожалению.
поработайте с базой, может структуру переделать, может индыксы какие..
Цитата
Отбор ведется по текстовому полю.

подробней плиз


С база проиндексирована. Это не дает результатов.

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

Как я говорил ранее я получил приемлемый результат с помощью индексации БД с помощью хешей, но эти хеши создаются в течении 16часов. Сохранял я его через серелизацию. Загрузка этого хеша происходит так долго что не пользоваться с ним уже не имеет смысла. Делил его на более мелкие чтоб грузить частями, все равно это долго.

Я очень надеюсь на то что прога написаная на С, хэш будет загружать быстрее.

Спустя 44 минуты, 59 секунд (18.05.2007 - 14:26) Alecs написал(а):
Еще уточняю. С помощью хешей я получаю первичные ключи записей и указываю их в SQLзапросе.

Спустя 6 минут, 59 секунд (18.05.2007 - 14:33) vasa_c написал(а):
Alecs, структуру соответствующей таблицы можно и пример запроса?

Спустя 1 час, 50 минут, 37 секунд (18.05.2007 - 16:24) Alecs написал(а):
Таблица:

Поле.............Тип.......................Сравнение...........Дополнительно
id...............mediumint(7).....................................auto_increment
ename.........varchar(100)..........utf8_general_ci
sire.............varchar(100)...........utf8_general_ci
notice..........varchar(100)..........utf8_general_ci
price............varchar(100)........utf8_general_ci
currency.......varchar(100).........utf8_general_ci
fname..........varchar(100)...........utf8_general_ci
flag..............int(11)


Запрос:
Код
$result=mysql_query("SELECT * FROM site_base WHERE fname LIKE '%$find%' LIMIT '50'");

Спустя 27 минут, 23 секунды (18.05.2007 - 16:51) vasa_c написал(а):
Как используются хеши?

Спустя 1 день, 2 часа, 36 минут, 11 секунд (19.05.2007 - 19:28) superman написал(а):
А URL сайта можно узнать?

Спустя 16 часов, 26 минут, 4 секунды (20.05.2007 - 11:54) Patrick написал(а):
Alecs, Жесть! Ты можешь во первых нормально оформлить структуру таблицы. И сделай вывод EXPLANE для запроса.
2) какие данные тебе надо выбрать?
3) можно посмотреть в стоону memcache, хотя думаю рановато...

P.S. Писать на C модуль это вообще бред! писать надо или на Си или на php! smile.gif

Ghost, не всегда лично у меня в проекте самое слабое звено, это сам скрипт! а точней парвинг фидов! smile.gif

Спустя 5 часов, 31 минута, 47 секунд (20.05.2007 - 17:25) Ghost написал(а):
Patrick да, не всегда, но судя по описанию траблы в даном случае оно вроде так

Спустя 16 часов, 20 минут, 18 секунд (21.05.2007 - 09:46) Alecs написал(а):
Цитата(superman @ 19.5.2007, 16:28) [snapback]20832[/snapback]
А URL сайта можно узнать?


Нет. Он работает в интранете, для выхода в Интернет используется VPN-канал.

Спустя 5 минут, 12 секунд (21.05.2007 - 09:51) Alecs написал(а):
Цитата(vasa_c @ 18.5.2007, 13:51) [snapback]20779[/snapback]
Как используются хеши?


Смотри выше.

Спустя 5 минут, 58 секунд (21.05.2007 - 09:57) Alecs написал(а):
Цитата(Patrick @ 20.5.2007, 8:54) [snapback]20845[/snapback]
Alecs, Жесть! Ты можешь во первых нормально оформлить структуру таблицы. И сделай вывод EXPLANE для запроса.
2) какие данные тебе надо выбрать?
3) можно посмотреть в стоону memcache, хотя думаю рановато...

P.S. Писать на C модуль это вообще бред! писать надо или на Си или на php! smile.gif

Ghost, не всегда лично у меня в проекте самое слабое звено, это сам скрипт! а точней парвинг фидов! smile.gif


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

Спустя 2 часа, 17 минут, 2 секунды (21.05.2007 - 12:14) Patrick написал(а):
Alecs можешь ответитьь на мой первый и второй пункт?

Спустя 30 минут, 43 секунды (21.05.2007 - 12:45) Alecs написал(а):
Цитата(Patrick @ 21.5.2007, 9:14) [snapback]20877[/snapback]
Alecs можешь ответитьь на мой первый и второй пункт?


1. Да. Я в первую очередь занялся оптимизацией БД. Если необходимо могу дать результат EXPLANE.
2. Вообще то нужны все эти поля, но главные из них id (идентификатор), ename (человеческое название товара). fname служит только для поиска, из него удалены все пробелы и другие не алфавитные символы.

Эта таблица сводная и дублирует остальную БД. Сделана она мной только для ускорения поиска в БД. Да, еще... в поле fname все данные отсортированы по алфавиту. Вернее таблица отсортирована по полю fname smile.gif .

Спустя 49 минут, 59 секунд (21.05.2007 - 13:35) Patrick написал(а):
если надо только 2 поля и выбирать надо 2, а не все!
Цитата
а, еще... в поле fname все данные отсортированы по алфавиту. Вернее таблица отсортирована по полю fname .
- это как? имеет смысл сделать индекс по fname. Думаю еще и в настройках сервера можно поковыряться....

Спустя 6 часов, 8 минут, 20 секунд (21.05.2007 - 19:43) Ghost написал(а):

Спустя 13 часов, 22 минуты, 34 секунды (22.05.2007 - 09:06) Alecs написал(а):
Fulltext используется. Не пробовал только перекомпиляцию для тонкой настройки. Не рискую эксперементировать на рабочем сервере.

Цитата
Цитата

а, еще... в поле fname все данные отсортированы по алфавиту. Вернее таблица отсортирована по полю fname .

- это как?


В начале aaaaaaa (латиница) в конце яяяяяяя.

Спустя 8 минут, 38 секунд (22.05.2007 - 09:14) Patrick написал(а):
кто просит делать это на рабочем сервере, поставь сначала на локаль. А тип таблицы какой?

Спустя 1 час, 6 минут, 28 секунд (22.05.2007 - 10:21) Alecs написал(а):
Таблиц типа MyISAM.

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

Спустя 3 месяца, 13 дней, 3 часа, 52 минуты, 42 секунды (5.09.2007 - 14:13) SirJay написал(а):
Не мне кажется это полный разврат...С+PHP... если честно никогда бы не додумался....хотя то же программирую и на С и С++...Используй тбл innodDB...Жsmile.gif

Спустя 41 минута, 35 секунд (5.09.2007 - 14:55) Dagdamor написал(а):
Alecs, ваш запрос просто вопит об использовании полнотекстового поиска smile.gif
Поставьте fulltext индекс на поле fname и измените запрос (не LIKE, а MATCH...AGAINST). Выборка по индексированному полю должна быть не 3 секунды и не 0,1 секунды, а сотые и тысячные доли секунды. Если время велико - вы где-то допустили ошибку, и индекс не используется.

EDIT: Мля, вопросу полгода... SirJay, смотри на дату последнего ответа, прежде чем темы поднимать :/


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.