Выгодно ли разделять огромную базу данных MySQL на несколько баз данных для повышения производительности? - PullRequest
1 голос
/ 15 января 2010

Существует значительная база данных MySQL, данные которой весят сотни гигабайт. Это испытывает проблемы с производительностью. Вертикальное и горизонтальное разделение таблиц - это возможные пути повышения производительности.

По вашему мнению, было бы полезно разделить эту базу данных на несколько баз данных для повышения производительности?

Проект основан на Rails

Ответы [ 3 ]

1 голос
/ 19 января 2010

«У него проблемы с производительностью» - это симптом, а не корень. Настало время провести анализ базы данных и выяснить узкие места. Найдите запросы, которые выполняются дольше всего (являются ли они запросами к таблице, двенадцати таблицам, являются ли они обновлениями и т. Д. И т. Д.), И посмотрите, что вам нужно сделать. Насколько вы контролируете базу данных? Это также определит, что вы можете и не можете делать, конечно.

Если к некоторому подмножеству данных обращаются чаще, возможно, вы можете объединить его в теневые таблицы - таблицы меньшего размера, к которым будет более быстрый доступ.

Вы можете индексировать больше / меньше / другие вещи.

Много вариантов! Но что на самом деле не так? :)

1 голос
/ 15 января 2010

Для типа хранения InnoDB вы можете указать, чтобы хранить каждую таблицу в отдельном файле

http://www.electrictoolbox.com/mysql-innodb-one-file-per-table/

Это поможет вашей файловой системе разработать стратегии кэширования для ваших таблиц.

0 голосов
/ 16 января 2010

Возможно, вы захотите взглянуть на тип хранилища. в зависимости от использования вашей базы данных вы можете переключиться на другой механизм хранения. http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html

Вы также можете рассмотреть возможность использования memcached для обслуживания ваших данных из памяти. есть также хорошее объяснение в документации MySQL: http://dev.mysql.com/doc/refman/5.0/en/ha-memcached.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...