|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.11.2015, 19:21 | #1 |
Форумчанин
Регистрация: 08.11.2010
Сообщений: 593
|
Шардинг БД
Добрый день, не уверен, что точно дал опеределение тому вопросу, который меня интересует.
Но суть вот в чем, есть таблица в mysql, назовем ее logs таблица весит 115 ГБ, операции поиска и выборки стали занимать уйму времени и насиловать мускул, собственно логичное решение или дропнуть часть данных (что непозволительно) или разибить ее на две и более таблиц, теперь у меня собственно к вам вопрос, есть ли в mysql какой либо механизм. который позволяет разбивать таблицы без правки запросов. предположим, что в таблица 1 000 000 000 строк, и я решил разбить ее на 10 таблиц, при этом насколько я понимаю, если я делаю тот же поиск мне придется переделывать запрос на все 10 таблиц? т.е. предположим был такой запрос Код:
Надеюсь объяснил понятно, голова уже не варит. |
12.11.2015, 20:16 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Индексация таблицы не рассматривается?
I'm learning to live...
|
12.11.2015, 20:49 | #3 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
12.11.2015, 22:51 | #4 |
Форумчанин
Регистрация: 08.11.2010
Сообщений: 593
|
Собственно с индексами сейчас работаю и пересоздаю, просто было интересно, возможно ли это. А вообще как вы решаете вопрос как раз с такими данными? при этом они должны быть, т.е. удалять их нельзя, на nosql переводите?
|
13.11.2015, 00:13 | #5 | |
Старожил
Регистрация: 31.05.2010
Сообщений: 3,301
|
Цитата:
Соответственно, поиск по таким разделенным данным происходит каскадно, до получения нужных результатов, или же по каким-либо другим ограничительным признакам. На практике – это всё очень зависит от специфики данных, и угадать оптимальный вариант здесь сложно. И noSQL в таких вопросах далеко не всегда есть панацея, увы. Там тоже не всё так радужно на больших объёмах данных. |
|
13.11.2015, 01:36 | #6 |
Новичок
Джуниор
Регистрация: 11.11.2015
Сообщений: 2
|
Уйму времени - это больше одной секунды?
Запрос, который Вы показали очень легкий и 115гб не так уж много для него. Если Вы хотите решить Вашу проблему, то найдите причину, почему Ваш запрос работает медленно. Сейчас Ваш запрос может тормозить по причине забитости сети (LIMIT 1000 может долго передаваться по сети). Вы не указали тип таблиц. В MySQL есть несколько типов таблиц и некоторые из них делают блокировки. Так же может быть проблема с индексами. Еще стоит обратить внимание, что MySQL обладает скудным функционалом и не дает администратору базы такие инструменты как vacuum или cluster. Возможно, если Вы перейдете на PostgreSQL и настроите vacuum, то производительность увеличится в десятки раз. А если модель данных позволяет сделать cluster столбец в PostgreSQL, то этот запрос будет обрабатываться еще быстрее. Если же нет возможности поменять базу, а данные упираются именно в MySQL, а не сеть, то посмотрите форки MySQL. Например, MariaDB. И уже на новой базе поэксперементируйте с типом таблиц (движок хранилища). Стоит упомянуть о возможности прозрачного перехода с MySQL на MariaDB. |
13.11.2015, 08:08 | #7 |
Старожил
Регистрация: 25.02.2007
Сообщений: 4,177
|
ну почему же, Партицирование есть в мускуле
http://habrahabr.ru/post/66151/ |
13.11.2015, 13:30 | #8 | |
Форумчанин
Регистрация: 08.11.2010
Сообщений: 593
|
Цитата:
на PostgreSQL переезд будет позднее, сейчас как раз и стоит mariadb тут я предполагаю что как раз проблемы вызваны производительностью самой фс, по-этому и решил разбить на несколько таблицы |
|
13.11.2015, 13:30 | #9 | |
Форумчанин
Регистрация: 08.11.2010
Сообщений: 593
|
Цитата:
|
|