Вчера я давал ссылку на ClickHouse в посте, а сегодня ClickHouse отделился в компанию с $50mln инвестиций. Я поистине горд за команду, не буду скрывать, что горд немного и за себя — ClickHouse был одним из проектов в Яндексе, где я отточил навыки, смог хорошо законтрибьютить перформанса и до сих пор время от времени проверяю новинки оптимизаций, тестирования и C++ на нём. ClickHouse сложно оптимизировать, но это делает его ещё более интересным, в какой-то степени привлекательно недоступным. Performance is a feature, и команда Лёши Миловидова показала, что именно это может подкупать людей.



Я помню своё первое впечатление на 4 курсе университета, когда я уронил ClickHouse с 3го запроса — я сразу понял, что это база данных, в которой можно столько всего сделать. Пусть у неё ещё много недостатков, все они исправятся со временем (и уже исправились одним из лучших тестирований open source, которое я знаю), а количество идей (как и размер бинаря 😁) внутри зашкаливает.



Но я ни капли не жалею, что тогда в Яндексе я работал в ядре поиска, а не в ClickHouse, поиск был для меня намного более интересным, и я вынес не только разработку, но и тучу опыта об эксплуатации, процессов.



Список моих любимых оптимизаций в ClickHouse (список до смеха неполный)



1. При старте бинаря делается mlock в памяти только на сам код, но не на дебажные символы. Это позволяет бинарю не разогреваться и не страдать page fault при старте, но и не лочить в память лишние данные.

2. Своя имплементация LZ4, которая адаптивно подстраивается под нужный CPU и данные. Выигрывает 2-5% в разжатии

3. Свой std::vector, который добавляет мусорных 16 байт в конце, чтобы можно было не писать хвостовую обработку на SIMD

4. Отдельная функция для копирования маленьких буфферов памяти.

5. Пересжатие данных в background c более высокими уровнями

6. ClickHouse LowCardinality для типов, где enum нельзя, но мало строк, которых majority, например, города, или имена

7. Использование hyperscan для поиска регулярных выражений

8. SAMPLE BY, очень хорошо для данных огромных мониторингов, когда можно пожертвовать супер точностью

9. Processors Pipeline Execution, ох, тут одним предложением не опишешь, новый движок исполнения запросов



Да их очень много, так любимые и не выберешь. Заметил, что оптимизаций ближе к Linux намного меньше, в команде не хватает любителя Linux :)



Будем наблюдать как сложится судьба дальше.