Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день
Есть задача, обновлять прайсы, все прайсовые строки находятся в одной таблице, обновляются часто, но не так часто как хотелось бы, сейчас стоит master->slave replication, на мастере апдейты, на слейве селекты для сайта, и там и там myisam. Таблица с каждым днем всё больше растет, скоро должно быть от 5 млн записей в ней.. На мастере 90% - это апдейты, 10% - инсерты (селектов нету вообще). В идеале нужно быстро выполнять селекты на слейвах, а на мастере делать апдейты/инсерты постоянно, но как можно быстрее, чтоб прогонять все записи по 3-4 раза в сутки на предмет изменений, сейчас только 1 раз прогоняется, но не постоянно обновляются данные, а по графику и в рабочее время..
Какую бы схему выбрать посоветовать кто может? Я думаю над иннодб на мастере, myisam на слейвах, и disable keys на мастере, но решил что лучше спросить тех кто может сталкивался с такими задачами массовых апдейтов
Думал еще насчет таблиц в памяти, но пугает то что если на хостинге сервер вырубится то после перезагрузки ничего не останется.. как бы вы решали задачу очень массовых апдейтов/инсертов? может и не через mysql, и не через реляционную бд держать все данные, а туда только сливать, не знаю, идей нету
Спасибо
Неактивен
еще одно уточнение, под мастер есть 2 сервера: на одной рейд но ДДР, на другом 10к диск но ДДР2..
Неактивен
Честно говоря, не понимаю, что Вас пугает - мастер не справляется с нагрузкой? Или что?
Ключи могут быть на мастере и слейвах разные, но это тяжело поддерживать, т.к. любое
изменение ключей на мастере доедет и до слейвов, если специально об этом не позаботиться
2 сервера под мастер - излишне, мастер может быть запущен только на одном из них (ну или
на 3+, если рассматривать кластер).
InnoDB на мастере будет быстрее только, если на мастер пишет одновременно большое
количество потоков. В случае однопоточного импорта - MyISAM не медленнее.
Неактивен
paulus написал:
Честно говоря, не понимаю, что Вас пугает - мастер не справляется с нагрузкой? Или что?
Ключи могут быть на мастере и слейвах разные, но это тяжело поддерживать, т.к. любое
изменение ключей на мастере доедет и до слейвов, если специально об этом не позаботиться
2 сервера под мастер - излишне, мастер может быть запущен только на одном из них (ну или
на 3+, если рассматривать кластер).
InnoDB на мастере будет быстрее только, если на мастер пишет одновременно большое
количество потоков. В случае однопоточного импорта - MyISAM не медленнее.
ненене, не 2 сервера под мастер, просто 2 сервера, на одном рейд и ддр, на другом один винт и ддр2, просто надо выбрать какой из них взять под мастер, слейвы с селектами справляются, а мастер делает апдейты/инсерты и мне хочется сделать максимально быстрые апдейты/инсерты, вот с ключами как поступить чтоб выключить только на мастере их и слейвы не подхватили disable? или лучше вообще на мастере удалять все ключи из таблицы, а оставлять только на слейвах?
насчет паралельных потоков - иногда в 2-3, иногда в 5 паралельных потоков идут апдейты, и думаю может memory table поставить на мастере, на сервере с ддр2 и в случае падения сливать то что если на слейве на текущий момент? будет быстрее?
Неактивен
Преждевременная оптимизация - корень зла (C)
Определитесь для себя, что Вам нужно - устойчивое хранилище или быстрое хранилище.
Если Вы готовы терять несколько часов при потере данных в MEMORY-таблицах, то рейд Вам
тогда не нужен, конечно С другой стороны, если Вы не хотите заниматься бесполезной
работой, то рейд полезен.
Попробуйте сначала сделать нужную Вам нагрузку и убедитесь, что мастер не справляется.
Если он не будет справляться - уберите на нем все ключи, кроме уникальных (чтобы сохранить
целостность), оставив их на слейвах. Добавьте памяти в буферы индексов и попробуйте еще раз.
Неактивен
а как убрать на мастере чтоб не убрались на слейвах? как-то вообще можно сделать чтоб alter не реплицировались на слейвы?
Неактивен
Ну, например, можете воспользоваться переменной sql_log_bin.
Неактивен