Что лучше выбрать Partitioning или вынос данных в другую базу (таблицу)?
В последнее время довольно распухла база, около 26 гигов, причем есть несколько таблиц, которые занимают 95% места всей БД.
Есть таблица "приемы", где записи создаются по датам.
Поэтому сначала подумал сделать Partitioning допустим по годам, но соль в том, что к таблице приёмы, паровозиком идут еще несколько: файлы и свойства приёма, собственно эти последние две таблицы самые и большие.
Подскажите как лучше поступить? Использовать Partitioning для таблицы "приёмы", понятно по годам, а вот для связанных таблиц файлы и свойства приёма, что лучше делать?
Или уже дописывать логику и выносить физически старые приёмы а соответственно с ними файлы и свойства в отдельную базу (чтобы удобнее работать с дампами и тд) или делать доп. таблицы по годам, и уже обрабатывать данную логику в коде? (честно переписывать конечно не очень хочется).
к таблице приёмы, паровозиком идут еще несколько: файлы и свойства приёма
Не понял... файлы в БД хранятся? ну ССЗБ, что ещё сказать...
Использовать Partitioning для таблицы "приёмы", понятно по годам, а вот для связанных таблиц файлы и свойства приёма, что лучше делать?
А уже ничего - партиционированные таблицы и внешние ключи несовместимы.
подумал сделать Partitioning допустим по годам
Ну вообще-то БСК. Партиционирование преследует несколько целей, но вот уменьшение объёма на диске среди них не встречается.
есть несколько таблиц, которые занимают 95% места всей БД.
Начните с установки innodb_file_per_table и вынесения таблиц в отдельные файлы.
Далее - внимательно просмотрите операции по каждой отдельной таблице, возможно, какие-то из них не нуждаются в поддержке транзакций.
И совершенно обязательно рассмотрите перемещение файлов в файловую систему.
innodb_file_per_table и так стоит
Задача снизить нагрузку, потому что есть таблицы совсем неприличного размера, типа файлы, но там файлы явно используются довольно редко (скорее всего в зависимости от даты приёма)
Как всегда, человек выстрелил себе в ногу, но ищет почему-то партитуру Маленькой ночной серенады Моцарта.
Казалось бы, при чем здесь партиционирование, если проблема в том, что в БД хранятся файлы?
Ну вот как можно быть настолько слепым, и не видеть реальной проблемы, а уноситься фантазиями в какие-то совершенно голубые дали, вообще никак не связанные с реальностью?
Партиционирование применяется, когда в БД много строк.
А физический размер БД не имеет значения.
Надо во-первых, выкинуть файлы из БД
А во-вторых, решать только реальные проблемы, а не "что-то у меня база растолстела"
"строк реально много" это не постановка задачи, а просто поболтать .
вопросы надо задавать конкретные, с цифрами
и в первую очередь - с описанием конкретной проблемы, которую надо решить
"таблица большая" - это не проблема, а досужие фантазии
пока ты остаешься в пределах одной базы, у тебя работают например транзакции, т.е. операции записи будут атомарными, даже если будут задевать в пределах этой транзакции несколько партиций, а если раскидаешь таблицу по нескольким базам, транзакции уже работать не будут.
а вот ускорить работу партиций так же как это сделала бы дополнительная база - можно, разместив файлы таблиц на физически другом диске (особенно это актуально если у тебя hdd)