Как уменьшить операции с диском у БД и какую БД взять под php?

Сразу скажу, что с БД у меня опыта очень мало, использую MySQL из PHP, и не особо понимаю различий между MyISAM и InnoDB.

Использую InnoDB. За два дня выполнил 15 млн запросов INSERT, 30млн запросов UPDATE. В итоге параметр у SSD Wear Level Count вырос на 10% (диску около года). Что как бы не очень хорошо.

Сделаю предположение, что в InnoDB и INSERT и UPDATE делают по 2 операции записи.

Хотелось бы по другому - чтобы БД операции вида INSERT DELAYED кешировала. Ну накопилось там операций INSERT DELAYED в таблицу на 16kb - она этот 16kb блок на диск скинула. Не накопилось, но прошло много времени (допустим 5 сек) - скинула на диск что накопилось.

Операции UPDATE DELAYED хотелось бы, чтобы проводились по другому. В виде трех операций: SELECT, INSERT DElAYED, DELETE DELAYED

DELETE DELAYED - тоже кешировать (накопилось штук 30 операций - разом все на диске обновляется, пока не накопилось, либо не прошло некоторое время, ничего с диском не делается).

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

- и хотелось бы реализовывать все это не на стороне своих скриптов, а средствами БД.

А то как сейчас, бедный SSD изнашивает и TLC и SLC кеш, и наверное ему это нехорошо...
  • Вопрос задан
  • 1555 просмотров
Пригласить эксперта
Ответы на вопрос 3
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
И вот прямо без такой нагрузки не обойтись?
15 млн запросов INSERT, 30млн UPDATE


Если нет, заложите в бюджет SSD и не придумывайте извращенные схемы. В конце концов 10к рублей это примерно 1-4 дня работы.

ПС если база небольшая создайте инстанс смотрящий на RAM DISK. И насилуйте его сколько вашей душе угодно.
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Если запросы идут пачками в рамках одного и того же скрипта, то идеальным решением будет использование транзакций.
Если заворачивать пачку DML запросов в транзакцию, то производительность иннодб становится вровень с майисам. А в данном случае нам важно что достигается эффект отложенной записи, поскольку результат записи нас интересует для всей транзакции, а не для отдельного запроса, а БД достаточно умна чтобы флушить данные на диск пачками. И в итоге все летает и диски не напрягаются даже при дефолтной настройке innodb_flush_log_at_trx_commit
Ответ написан
gbg
@gbg
Любые ответы на любые вопросы
Если так сделать, вы рискуете получить кукиш вместо данных. БД специально так устроена, чтобы даже при выдергивании вилки из розетки, все операции, которые клиент увидел как подтвержденные, были фактически подтверждены.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы