Publish your project for free and start receiving offers from freelance contractors in serveral minutes after publication!

Нужна консультация по переезду с MySQL на ClickHouse

project expired


На проекте используется MySQL, в секунду ~500 инсертов и ~200 селектов.

Некоторые таблицы разрослись до >1 млрд записей, некоторые таблицы в результате неизвестно чего повредились и мускул стал несколько раз в день падать.

Собрав все пролемы в кучу и предположив, что нагрузка будет только расти - мы решили перейти на ClickHouse.


Переписали скрипт, перенесли данные из MySQL и запустили всё на на полную мощь. В итоге сайт начал тормозить, в логах кликхауса появляться ошибки что слишком много запросов идёт на запись (примерно так).


В MySQL у меня были такие же проблемы, когда диск не выдерживал такого объёма записей и всё начинало лагать. Решил это с помощью конфигов:


innodb_flush_method              = O_DIRECT innodb_flush_log_at_trx_commit   = 2


После изучения документации кликхауса я понял, что для решения этой проблемы нужно использовать движок Buffer.

Далее я выполнил такой запрос:


CREATE TABLE `buffer_log` AS `log` ENGINE = Buffer(`default`, `log`, 16, 10, 60, 1000, 10000, 10000000, 100000000);


Далее я все инсерты повесил на таблицу buffer_log, нагрузка на проц и диск упала, но появилась новая проблема.


SELECT запросы у меня идут с небуферизованной таблицы log, а там они соответственно появляются не сразу и появляется задержка около минуты. Меня это не устраивает, нужен полный realtime как был на MySQL.


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


Как это исправить?


Мне нужно решить всего две проблемы:

1) Чтобы данные писались быстро

2) Чтобы данные читались быстро 



Пишите мне в телеграм @rakovskiy28 


Make a proposal!

The Customer does not want to make a prepayment? Payment through Safe will help avoid potential fraud.
  1. proposal concealed by freelancer
  2. 1 day420 ₴
    Олег Леприк
     834   19  1

    Может стоит попробовать для начала ускорить саму запись в MySQL? Что вы слышали про HandlerSocket?
    https://habr.com/ru/post/239637/

    Немного о себе:

    Знаю: PHP, MySQL, JavaScript, jQuery, Angular 2+, HTML5, CSS3, Linux, nginx
    Использую: Smarty, Sphinx, mod_rewrite, memcache, собственная CMS
    Работал с WordPress, PrestaShop, OpenCart, Zend Framework, phpBB3, IP.Board
    Хороший опыт front-end: верстка, анимация и динамические сайты.

    Доступен в онлайне с 12-00 до 23-00
    Оплата по-проектно или почасовая ставка ($15/час)

    Skype: iamleprik
    E-mail: [email protected]
    Телефон: +380674660520

    Ukraine Kyiv | 23 January at 09:21 |
  • Sergey Mironov
    16 January at 15:30 |

    Наверное, стоит начать с кэширования и оптимизации запросов.

  • Андрей Юрьевич — project author
    18 January at 11:43 |

    Можно более конкретно?

  • Инга Ткаченко
    23 January at 02:42 |

    Сергей имел в виду кэширование системами вроде Redis, дабы сократить количество select'ов и уменьшить этим нагрузку.