Индексы расставлены, сейчас 10 индексов (половина составных).
Когда записи достигли 17-18 млн. (точки Х), сразу работать с таблицей стало невозможно, даже индексные выборы работали очень медленно. Чистка - лишь временное восстановление жизнедеятельности сайта, в ближайшем будущем снова 18 млн, только уже "полезных писем" и выборки снова перестанут адекватно работать.
Это проблема, и я предполагаю, что она из-за огромного объема самой таблицы. Как её решить? Какие есть пути дальнейшего развития?
П.С. MySQL, MyISAM движок. Никакой статики, постоянная динамика и все друг другу пишут письма. Каждый индекс отображает свой функционал для работы с данной таблицей.
Спустя 8 минут, 34 секунды (12.08.2012 - 18:00) m4a1fox написал(а):
На какой бд сайт?
Спустя 2 минуты, 15 секунд (12.08.2012 - 18:02) inpost написал(а):
m4a1fox
Выше подправил. (БД заменил на "Таблица"), думаю одно, пишу другое
Выше подправил. (БД заменил на "Таблица"), думаю одно, пишу другое
Спустя 6 минут, 34 секунды (12.08.2012 - 18:09) m4a1fox написал(а):
а если монго использовать?
Спустя 14 часов, 14 минут, 45 секунд (13.08.2012 - 08:24) sergeiss написал(а):
В Мускуле, также как и в Постгре, есть "Партиции" (partitions). Это - разбиение одной таблицы на несколько таблиц, у каждой из которых свои индексы. При дроблении данных по правильным признакам, все выборки существенно ускоряются. Потому что сначала БД определяет, в какой таблице (партиции) искать, а потом ищет внутри неё. При этом всём ты работаешь как с единой таблицей, совершенно не вникая во внутреннюю структуру. То есть, в запросах указываем только имя "ключевой" таблицы.
В Постгре я использую партиции, как раз по причине большого объема данных. Коих в разных таблицах находится от десятков до сотен миллионов записей. При дроблении на партиции в каждой из частей оказывается не более единиц миллионов.
Так что копай в эту сторону.
PS. Судя по описанию, в Мускуле внутренняя структура партиций вообще скрыта от юзера (в Мускуле я не использовал их, только читал описалово ). В то время как в Постгре имеешь к ним полный доступ - тут я как раз много поработал.
PPS. Когда в Постгре делаю бэкап, то я могу в явном виде указать только те партиции, которые мне нужны в бэкапе. Что очень полезно, например, когда я делаю уменьшенную копию БД для переноса на ноутбук. Указываю все таблицы основной схемы и самые свежие таблицы из той схемы, где я "складирую" партиции. Правда, я потратил на реструктуризацию БД, по разным причинам, не меньше месяца рабочего времени... Включая время на разработку новой структуры, настройку партиций и собственно перепись данных. Но оно того стОило!
PPS^2. inpost - можно еще и "репликации" сделать Это к вопросу о том, как ускорить выборки. Но репликации - это использование разных физических серверов, для супер-большого количества данных. Я думаю, что не твой случай. Но без указания этой фичи мой ответ будет неполным.
В Постгре я использую партиции, как раз по причине большого объема данных. Коих в разных таблицах находится от десятков до сотен миллионов записей. При дроблении на партиции в каждой из частей оказывается не более единиц миллионов.
Так что копай в эту сторону.
PS. Судя по описанию, в Мускуле внутренняя структура партиций вообще скрыта от юзера (в Мускуле я не использовал их, только читал описалово ). В то время как в Постгре имеешь к ним полный доступ - тут я как раз много поработал.
PPS. Когда в Постгре делаю бэкап, то я могу в явном виде указать только те партиции, которые мне нужны в бэкапе. Что очень полезно, например, когда я делаю уменьшенную копию БД для переноса на ноутбук. Указываю все таблицы основной схемы и самые свежие таблицы из той схемы, где я "складирую" партиции. Правда, я потратил на реструктуризацию БД, по разным причинам, не меньше месяца рабочего времени... Включая время на разработку новой структуры, настройку партиций и собственно перепись данных. Но оно того стОило!
PPS^2. inpost - можно еще и "репликации" сделать Это к вопросу о том, как ускорить выборки. Но репликации - это использование разных физических серверов, для супер-большого количества данных. Я думаю, что не твой случай. Но без указания этой фичи мой ответ будет неполным.
Спустя 4 минуты, 49 секунд (13.08.2012 - 08:29) vagrand написал(а):
inpost
Самый простой вариант, который видится мне, это сделать архивацию данных. Т.е. сделать копию данной талицы с приставкой "arc" и переносить туда всю переписку за исклбчением последних N месяцев или дней. Выборка писем насколько я понимаю скорее всего происходить по дате, так что зная за какое время у тебя в какой таблице хранятся данные сможеш выбрать из одной или другой.
Еще такая мысль - если есть поля типа char или text то лучше вынести их в отдельную таблицу и связать 1 к 1. Тогда основная таблица сразу похудеет в весе и возможно это облегчит работ с ней.
Самый простой вариант, который видится мне, это сделать архивацию данных. Т.е. сделать копию данной талицы с приставкой "arc" и переносить туда всю переписку за исклбчением последних N месяцев или дней. Выборка писем насколько я понимаю скорее всего происходить по дате, так что зная за какое время у тебя в какой таблице хранятся данные сможеш выбрать из одной или другой.
Еще такая мысль - если есть поля типа char или text то лучше вынести их в отдельную таблицу и связать 1 к 1. Тогда основная таблица сразу похудеет в весе и возможно это облегчит работ с ней.
Спустя 5 минут, 38 секунд (13.08.2012 - 08:34) sergeiss написал(а):
Цитата (vagrand @ 13.08.2012 - 10:29) |
Выборка писем насколько я понимаю скорее всего происходить по дате, так что зная за какое время у тебя в какой таблице хранятся данные сможеш выбрать из одной или другой. |
При создании "партиций", о коих я написал только что, делается всё то же самое (критерии настраивает программер), только намного проще.
Спустя 5 минут, 11 секунд (13.08.2012 - 08:39) vagrand написал(а):
sergeiss
Увидел твой пост после того как свой написал. Ниразу за партиции не слыхал. Оч интересная тема если оно дествительнот так как ты говориш.
Увидел твой пост после того как свой написал. Ниразу за партиции не слыхал. Оч интересная тема если оно дествительнот так как ты говориш.
Спустя 20 минут, 16 секунд (13.08.2012 - 09:00) vagrand написал(а):
sergeiss
Почитал за партиции. В принципе идея прикольная но как пишут тут все пока далеко не так радужно как хотелось бы + не совсем понятно пока не попробуеш как будут работать составные индексы если одно из их полей является тем, по котоому разбита таблица на партиции.
Почитал за партиции. В принципе идея прикольная но как пишут тут все пока далеко не так радужно как хотелось бы + не совсем понятно пока не попробуеш как будут работать составные индексы если одно из их полей является тем, по котоому разбита таблица на партиции.
Спустя 2 минуты, 31 секунда (13.08.2012 - 09:02) sergeiss написал(а):
vagrand - да, очень интересно и полезно Чтобы понять, что такое партиции, можно провести такую параллель.
Вот есть куча данных (как раз "наш" случай). Дробим их на таблицы, при выборке данные объединяем через UNION. Возможно? Да, вполне рабочий вариант. Выборка будет вестись намного быстрее, чем если бы все данные были в одной большой таблице. Потому что реальная выборка будет только из нескольких таблиц (или вообще из одной), а не из всех.
Так вот. Партиции делаю то же самое, только никакого UNION использвать не нужно. И не нужно даже знать названия всех отдельных частей. У нас есть "точка входа" - имя основной таблицы. Этого более чем достаточно.
Как я уже сказал, в Мускуле не работал с Партициями Только в Постгре. В Постгре всё очень "красиво" получается.
Что касается составных индексов - ну так думать надо, когда их пишешь! При дроблении на партиции указывается критерий дробления. По сути дела, это тоже как индекс.
Вот есть куча данных (как раз "наш" случай). Дробим их на таблицы, при выборке данные объединяем через UNION. Возможно? Да, вполне рабочий вариант. Выборка будет вестись намного быстрее, чем если бы все данные были в одной большой таблице. Потому что реальная выборка будет только из нескольких таблиц (или вообще из одной), а не из всех.
Так вот. Партиции делаю то же самое, только никакого UNION использвать не нужно. И не нужно даже знать названия всех отдельных частей. У нас есть "точка входа" - имя основной таблицы. Этого более чем достаточно.
Как я уже сказал, в Мускуле не работал с Партициями Только в Постгре. В Постгре всё очень "красиво" получается.
Что касается составных индексов - ну так думать надо, когда их пишешь! При дроблении на партиции указывается критерий дробления. По сути дела, это тоже как индекс.
_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).