#mysql #grails
#mysql #grails
Вопрос:
Я запускаю сайт блога, построенный поверх grails. Со временем база данных mysql растет. База данных имеет имя таблицы ‘post’. Эта таблица содержит почти 1 миллион записей. Запрос этой таблицы становится очень трудоемким.
Теперь я пытаюсь разделить таблицу и хочу архивировать старые записи. Так что сложные запросы к базе данных занимают меньше времени.
То, что я пытаюсь выполнить, выглядит примерно так,
class Post{
//... properties
}
class PostArchive extends Post{
}
Увеличит ли этот подход производительность? Есть ли какой-либо плагин, доступный для выполнения таких задач?
Комментарии:
1. Трудно сказать, повысит ли это производительность, не видя, что работает плохо. Например, ваш вопрос не включает запросы, которые вы пытаетесь оптимизировать. Я думаю, что если вы не предоставите эту информацию, это не даст хорошего ответа.
2. Выполнение любого запроса SELECT в таблице post занимает гораздо больше времени. Объединение запроса с пользовательской таблицей делает ситуацию еще хуже.
3. Вы оптимизировали свою базу данных с помощью индексов и тому подобного? Я бы подумал о том, чтобы начать с этого, прежде чем менять приложение. Причина, по которой я спрашиваю, заключается в том, что у меня есть приложения Grails с сотнями миллионов записей, и я часто выбираю (с несколькими объединениями) из этих таблиц и вижу второстепенные ответы.
4. Я еще не использовал индексацию. Спасибо, что упомянули об этом. Пожалуйста, поделитесь своим опытом реализации. Должен ли я использовать GORM для индексации столбца или индексировать столбцы непосредственно в БД.
5. Это действительно зависит от вас. Любой из них приведет к тому же. Часто проще моделировать сложные индексы в базе данных вместо GORM, но это только мой личный опыт (и отсутствие опыта использования GORM для управления индексами). Я уверен, что это вполне возможно, если вы приложите усилия, чтобы узнать, как это сделать.
Ответ №1:
Мы создаем абстрактный домен с нашей базовой настройкой, а затем расширяем его. Итак, у вас будет
abstract class BasePost {
class Post extends BasePost{
class PostArchive extends BasePost{