- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Есть большая база данных, более миллиона записей. Средняя длинна записи 1кб. (база 1 гб)
Почти все запросы происходят по примари ID, но иногда и поиск по всем ячейкам, включая текстовые.
Теперь вопрос, как заставить эту базу не тормазить? :D
Сейчас всё работает на mysql5, сам он вроде как оптимизирован.
Посоветуйте как всё это оптимизировать, запросов много, сервер несправляется.
Какие оптимальные данные сервера должны быть, какую базу лучше использовать, что если один сервер(даже если очень мощный) не справляется, какие могут быть решения?
Всем спасибо за любые ответы!
попробуйте загнать всю базу в оперативку
полнотекстовый поиск использовать, использовать postgres вместо mysql - в 8.3 версии появилась оптимизация для случая последовательного просмотра больших таблиц.
Посоветуйте как всё это оптимизировать, запросов много, сервер несправляется.
Какие оптимальные данные сервера должны быть, какую базу лучше использовать, что если один сервер(даже если очень мощный) не справляется, какие могут быть решения?
Закиньте my.cnf в топик почитать... может в нем причина.
ps. Какая ОС?
Есть большая база данных, более миллиона записей. Средняя длинна записи 1кб. (база 1 гб)
Почти все запросы происходят по примари ID, но иногда и поиск по всем ячейкам, включая текстовые.
Теперь вопрос, как заставить эту базу не тормазить?
Примеры типичных запросов приведите, пожалуйста. И примерную структуру таблиц. Судя по описанному, что-то не так с самой базой. Надо понять, что. Подозреваю классическую сортировку с сохранением промежуточной таблицы на диск из-за наличия text-полей в извлекаемых данных.
http://people.freebsd.org/~kris/scaling/dfly.html , хотя это скорее всего не очень подходит? Зато FreeBSD есть повод поставить.
Есть большая база данных, более миллиона записей. Средняя длинна записи 1кб. (база 1 гб)
Почти все запросы происходят по примари ID, но иногда и поиск по всем ячейкам, включая текстовые.
Теперь вопрос, как заставить эту базу не тормазить? :D
Сейчас всё работает на mysql5, сам он вроде как оптимизирован.
Посоветуйте как всё это оптимизировать, запросов много, сервер несправляется.
Какие оптимальные данные сервера должны быть, какую базу лучше использовать, что если один сервер(даже если очень мощный) не справляется, какие могут быть решения?
Всем спасибо за любые ответы!
попробуйте: http://www.tizag.com/mysqlTutorial/mysql-index.php
если БД обновляется не часто, то это хорошо ускоряет
но вы уверены, что БД тормозит? алгоритм поиска какой используете? может там поиск по штамму или аж морфология. Или просто алгоритм работает не эфективно. При большом кол-ве одновременных запросов дело может быть не столько в БД, сколько в используемом интерпретаторе, но это философия.
ну и комплекс мероприятий тут: http://www.mysql.ru/docs/man/MySQL_Optimisation.html
Спасибо за ответы! Есть пища для размышления)
Насчёт поиска по текстовым полям, впринцепи этих запросов не мало)
Привожу пример таблички и запрос на поиск.. впринцепи это обычная база пользоватей и поиск по ней.
OS Linux Suse
CREATE TABLE IF NOT EXISTS `tb_users` (
`id` int(10) NOT NULL auto_increment,
`email` varchar(100) NOT NULL default '',
`pass` varchar(13) NOT NULL default '',
`sess` varchar(32) NOT NULL default '',
`expire` tinyint(1) NOT NULL default '0',
`last_visit` int(10) NOT NULL default '0',
`last_ip` varchar(15) NOT NULL default '',
`ok` tinyint(1) NOT NULL default '0',
`foto` int(10) NOT NULL default '0',
`name` varchar(30) NOT NULL default '',
`lastname` varchar(30) NOT NULL default '',
`mw` int(1) NOT NULL default '0',
`born` bigint(10) NOT NULL default '0',
`state` int(1) NOT NULL default '0',
`country` int(3) NOT NULL default '0',
`city` varchar(30) NOT NULL default '',
`text` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
select * from `tb_users`where 1 and name LIKE '%тест%' and lastname LIKE '%тест%' and mw='1' and born<'826498800' and state='2' and country='20'
my.cnf скину позже..
Dimanych, плохо написан запрос. У программиста кривые руки. Запрос лучше переписать (думаю, другие тоже):
select * from `tb_users` where and name = 'тест' and lastname = 'тест' and mw='1' and born<'826498800' and state='2' and country='20'
если возможен запрос по неполному имени, то
select * from `tb_users` where name LIKE 'тест%' and lastname LIKE 'тест%' and mw='1' and born<'826498800' and state='2' and country='20'
будет намного быстрее + можно отстроить индексы.
select * from `tb_users`where 1 and name LIKE '%тест%' and lastname LIKE '%тест%' and mw='1' and born<'826498800' and state='2' and country='20'
Попробуйте включить логи долгих запросов. И интересно, а индексы соответствующие прописаны? И не стоит ли все like убрать - что-то мне кажется, что там надо простое сравнение делать, иначе получается полный просмотр базы пользователей всегда.
Судя по структуре индексов конечно нет, только один, да и тот не используется в запросе а автоматически нумерует записи. Поставьте индексы на
mw
born
state
country
на name и lastname тоже, но тип индекса зависит то того, как нужно по ним искать будет