Как вы оптимизируете базу данных MySQL для записи? - PullRequest
3 голосов
/ 22 декабря 2010

У меня приложение с интенсивной записью, работающее на EC2.Любые мысли о том, как его оптимизировать, чтобы иметь возможность делать несколько тысяч одновременных записей в БД MySQL?

1 Ответ

4 голосов
/ 22 декабря 2010

Масштабирование при записи является сложной проблемой.Возможно, секрет масштабирования записи заключается в масштабировании чтения.То есть, кеш читает как можно больше, так что записи получают всю пропускную способность.

Сказав это, можно сделать несколько вещей:

1) Начать смодель данных.Разработайте модель данных, чтобы вы никогда не удаляли и не обновляли таблицу.Единственная операция - это вставка.Используйте дату вступления в силу, последовательность вступления в силу и статус вступления в силу для осуществления операций вставки, обновления и удаления, используя только команду вставки.Эта концепция называется «Только модель добавления».Оформить заказ RethinkDB ..

2) Установите флаг параллельной вставки на 1. Это гарантирует, что таблицы будут продолжать вставляться во время чтения.

3) Когда у вас есть только вставки в хвостеВам могут не понадобиться блокировки на уровне строк.Итак, используйте MyISAM (это ничего не значит от InnoDB, о котором я расскажу позже).

4) Если все это мало что делает, создайте таблицу реплик в Memory Engine.Если у вас есть таблица с именем MY_DATA, создайте таблицу с именем MY_DATA_MEM в таблице памяти.

5) Перенаправьте все вставки в таблицу MEM.Создайте представление, объединяющее обе таблицы, и используйте это представление в качестве источника чтения.

6) Напишите демон, который периодически перемещает содержимое MEM в основную таблицу и удаляет из таблицы Mem.Это может быть идеальным для реализации операции MOVE в качестве триггера удаления в таблице Mem (я надеюсь, что триггеры возможны в Memory Engine, не совсем уверен).

7) Не делайте никаких удалений или обновлений вТаблица MEM (они медленные) также обращают внимание на количество элементов в вашей таблице (HASH против B-Tree: Low Card -> Hash, High Card-> B-Tree)

8) Даже есливсе вышеперечисленное не работает, кювет jdbc / odbc.Перейдите к InnoDB и используйте интерфейс Socket Handler для выполнения прямых вставок (Google для Yoshinori-San MySQL)

Я сам не использовал HS, но тесты впечатляют.В Google Code есть даже проект Java HS.

Надеюсь, это поможет ..

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