# Планы разработки ClickHouse 2020. Здесь собраны важные задачи на 2020 год. Также многие из них присутствуют в GitHub Issues или (редко) в Яндекс.Трекере, а также (очень редко) в Яндекс.Goals. Мы предпочитаем использовать Яндекс.Трекер только для секретных задач, а все публичные задачи размещать в GitHub Issues для того, чтобы сделать разработку более открытой наружу. В любом случае, для работы над задачами, таск-трекеры уступают в удобстве plaintext файлу. Классификация задач условная и за её основу взята известная [классификация животных](https://ru.wikipedia.org/wiki/%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_%D0%B6%D0%B8%D0%B2%D0%BE%D1%82%D0%BD%D1%8B%D1%85_(%D0%91%D0%BE%D1%80%D1%85%D0%B5%D1%81)). ## 1. Хранение данных, индексация. ### 1.1. Индексы по z-Order curve, normalized z-Order curve. Задача также относится к категории "17. Работа с географическими данными", так как geoHash - это частный случай z-Order curve. Также связана с задачей 24.27 для нечёткого поиска полудубликатов строк, так как позволит индексировать min-hash. Задача "normalized z-Order curve" в перспективе может быть полезна для БК и Метрики, так как позволяет смешивать OrderID и PageID и избежать дублирования данных. В задаче также вводится способ индексации путём обращения функции нескольких аргументов на интервале, что имеет смысл для дальнейшего развития. Изначально делал [Андрей Чулков](https://github.com/achulkov2), ВШЭ, теперь доделывает [Ольга Хвостикова](https://github.com/stavrolia), но задача прокрастинирована из-за задачи 25.9. Сейчас оказалось, что задача 25.9 тоже не готова. Будем надеятся на реализацию к концу ноября. Впрочем, [Андрей Чулков](https://github.com/achulkov2) скоро выйдет на работу стажёром на пол ставки и сможет помочь её доделать. ### 1.2. Wait-free каталог баз данных. Делает [Александр Токмаков](https://github.com/tavplubix), первый рабочий вариант в декабре 2019. Нужно для DataLens и Яндекс.Метрики. ### 1.3. Неблокирующие ALTER. И полностью immutable куски. Делает [Александр Сапин](https://github.com/alesapin). Готов приступить к задаче в конце ноября 2019. Нужно для Яндекс.Метрики. ### 1.4. Нетранзитивные ALTER столбцов. Требует 1.3. Будет делать [Александр Сапин](https://github.com/alesapin). ### 1.5. ALTER RENAME COLUMN. Требует 1.3. Будет делать [Александр Сапин](https://github.com/alesapin). ### 1.6. Полиморфные куски данных. Делает [Антон Попов](https://github.com/CurtizJ), первый рабочий вариант в декабре. Пререквизит чтобы снизить сложность мелких INSERT, что в свою очередь нужно для 1.12, иначе задача 1.12 не сможет нормально работать. Особенно нужно для Яндекс.Облака. ### 1.7. Буферизация и WAL в MergeTree. Требует 1.6. ### 1.8. Перенос между разделами по TTL. Делает [Владимир Чеботарёв](https://github.com/excitoon), Altinity. ### 1.9. Использование TTL для прореживания данных. В очереди. ### 1.10. Пережатие старых данных в фоне. Будет делать Кирилл Барухов, ВШЭ, экспериментальная реализация к весне 2020. Нужно для Яндекс.Метрики. ### 1.11. Виртуальная файловая система. Нужно для Яндекс.Облака. Делает Александр Бурмак, Яндекс.Облако, а также Олег Ершов, ВШЭ и Яндекс. ### 1.12. Экспериментальная реализация VFS поверх S3 и HDFS. Нужно для Яндекс.Облака. Требует 1.11. Желательно 1.6 и 1.18. Делает Александр Бурмак, Яндекс.Облако (сначала часть для S3), а также Олег Ершов, ВШЭ и Яндекс. ### 1.13. Ускорение запросов с FINAL. Требует 2.1. Делает [Николай Кочетов](https://github.com/KochetovNicolai). Нужно для Яндекс.Метрики. ### 1.14. Не писать столбцы, полностью состоящие из нулей. В очереди. Простая задача, является небольшим пререквизитом для потенциальной поддержки полуструктурированных данных. ### 1.15. Возможность иметь разный первичный ключ в разных кусках. Сложная задача, только после 1.3. ### 1.16. Несколько физических представлений для одного куска данных. Сложная задача, только после 1.3 и 1.6. Позволяет компенсировать 21.20. ### 1.17. Несколько сортировок для одной таблицы. Сложная задача, только после 1.3 и 1.6. ### 1.18. Отдельное хранение файлов кусков. Требует 1.3 и 1.6. Полная замена hard links на sym links, что будет лучше для 1.12. ## 2. Крупные рефакторинги. Для обоснования необходимости смотрите ссылки в описании других задач. ### 2.1. Переделка конвейера выполнения запросов на Processors. Делает [Николай Кочетов](https://github.com/KochetovNicolai). Финальная стадия разработки. Включение по-умолчанию в конце декабря 2019. Удаление старого кода в начале 2020. ### 2.2. Инфраструктура событий/метрик/ограничений/квот/трассировки. В очереди. https://gist.github.com/alexey-milovidov/d62d73222d83b9319dc519cbb13aeff6 ### 2.3. Перенос столбцового ser/de из DataType в Column. В очереди. ### 2.4. Перевод LowCardinality из DataType в Column. Добавление ColumnSparse. Требует 2.3. ### 2.5. Версионирование состояний агрегатных функций. В очереди. ### 2.6. Правая часть IN как тип данных. Выполнение IN в виде скалярного подзапроса. Требует 2.1. ### 2.7. Нормализация Context. В очереди. ### 2.8. Декларативный парсер запросов. Низкий приоритет. Задачу хочет сделать [Иван Лежанкин](https://github.com/abyss7) в свободное время, но за последний год никаких поползновений не видно. ### 2.9. Логгировние в format-стиле. В задаче заинтересован [Александр Кузьменков](https://github.com/akuzm). Нет прогресса. ### 2.10. Запрашивать у таблиц не столбцы, а срезы. В очереди. ### 2.11. Разбирательство и нормализация функциональности для bitmap. В очереди. ### 2.12. Декларативные сигнатуры функций. Задачу делает Алексей Миловидов. Прогресс 50% и разработка временно приостановлена. ### 2.13. Каждая функция в отдельном файле. Задачу делает Алексей Миловидов. Прогресс 80%. Потребуется помощь других разработчиков. ### 2.14. Все функции с состоянием переделать на FunctionBuilder. Долг [Николай Кочетов](https://github.com/KochetovNicolai). Сейчас код находится в переходном состоянии, что неприемлимо. ### 2.15. Функция subscribe для IStorage. Для нормализации работы materialized views поверх Merge, Distributed, Kafka. ## 3. Документация. Здесь задачи только по инфраструктуре документации. ### 3.1. Перенос документации по функциям в код. Требует 2.12 и 2.13. ### 3.2. Перенос однородных частей документации в код. Требует 3.1. ### 3.3. Исправить катастрофически отвратительно неприемлимый поиск по документации. Не делает [Иван Блинков](https://github.com/blinkov/), и есть подозрения, что он не в состоянии выполнить эту задачу. Сам сайт документации основан на треш-технологиях, которые трудно исправить. ### 3.4. Добавить японский язык в документацию. Эту задачу сделает [Иван Блинков](https://github.com/blinkov/), до конца ноября 2019. ## 4. Сетевое взаимодействие. ### 4.1. Уменьшение числа потоков при распределённых запросах. [Никита Лапков](https://github.com/laplab), весна 2020. ### 4.2. Спекулятивное выполнение запросов на нескольких репликах. [Никита Лапков](https://github.com/laplab), весна 2020. Нужно для Яндекс.Метрики. Требует 4.1. ### 4.3. Ограничение числа одновременных скачиваний с реплик. Изначально делал Олег Алексеенков, но решение оказалось неудачным, хотя там не так уж много доделывать. ### 4.4. Ограничение сетевой полосы при репликации. ### 4.5. Возможность продолжить передачу куска данных при репликации после сбоя. ### 4.6. p2p передача для GLOBAL подзапросов. ### 4.7. Ленивая загрузка множеств для IN и JOIN с помощью k/v запросов. ### 4.8. Разделить background pool для fetch и merge. В очереди. Исправить проблему, что восстанавливающаяся реплика перестаёт мержить. Частично компенсируется 4.3. ## 5. Операции. ### 5.1. Разделение задач на более мелкие куски в clickhouse-copier. Нужно для Метрики, в очереди, но исполнитель не назначен, есть шанс успеть в 2019. ### 5.2. Автонастройка лимита на оперативку и размера кэшей. ### 5.3. Встроенная ручка для Prometheus и, возможно, Solomon. Простая задача. ### 5.4. Opt-in сообщать в клиенте, если вышла новая версия. ### 5.5. LTS релизы. Требует 7.5. Задачу хочет Метрика, Облако, БК, Маркет и Altinity. Задача полностью обречена на провал с практической точки зрения, но пользователям важен сам факт того, что она будет, а мы уважаем чувства пользователей. Первой LTS версией уже стала версия 19.14. ## 6. Инструментирование. ### 6.1. Исправления сэмплирующего профайлера запросов. [Никита Лапков](https://github.com/laplab), ноябрь 2019. Может не сделать, тогда будет делать Алексей Миловидов. ### 6.2. Добавление memory profiler. Сравнительно простая задача, но только для опытных разработчиков. Нужна всем. ### 6.3. Учёт оперативки total расширить не только на запросы. Исправление долгоживущей проблемы с дрифтом учёта оперативки. Нужна для Метрики и БК. ### 6.4. Поддержка perf events как метрик запроса. Делает Андрей Скобцов, ВШЭ. ### 6.5. Эксперименты с LLVM X-Ray. Требует 2.2. ### 6.6. Стек трейс для любых исключений. Сейчас есть стек трейс для почти всех, но не всех исключений. Требует 7.4. ### 6.7. Таблица system.stack_trace. Сравнительно простая задача, но только для опытных разработчиков. ### 6.8. Таблица system.crashes. Сравнительно простая задача, но только для опытных разработчиков. ### 6.9. Отправлять информацию клиенту, если сервер падает по сигналу. ### 6.10. Сбор общих системных метрик. ## 7. Сопровождение разработки. ### 7.1. ICU в submodules. [Иван Лежанкин](https://github.com/abyss7). Добавление в submodules также нужно для Аркадии (7.26). ### 7.2. LLVM в submodules. Уже добавлено, но старой версии, и поэтому не используется. Надо обновить. Георгий Кондратьев. Возможно, он не сможет сделать эту задачу, тогда будет делать Алексей Миловидов. ### 7.3. Обновление Poco. Алексанр Кузьменков. ### 7.4. Включить libc++, libc++-abi при сборке с gcc. Сейчас включено только при сборке с clang, но продакшен сборка использует gcc. Требует 7.2 и, возможно, 7.1 (только в случае новой версии ICU). ### 7.5. Начать публиковать LTS релизы. [Александр Сапин](https://github.com/alesapin). ### 7.6. Правильный статистический тест для comparison mode в clickhouse-performance-test. Задачу начал делать Дмитрий Рубашкин. Сейчас продолжает [Александр Кузьменков](https://github.com/akuzm). ### 7.7. Доделать тесты под MSan. Уже есть ASan, TSan, UBSan. Не хватает тестов под MSan. Они уже добавлены в CI, но не проходят. [Александр Кузьменков](https://github.com/akuzm). ### 7.8. Добавить clang-tidy. Уже есть PVS-Studio, но этого недостаточно. ### 7.9. Проверки на стиль имён с помощью clang-tidy. ### 7.10. Включение UBSan и MSan в интеграционных тестах. UBSan включен в функциональных тестах, но не включен в интеграционных тестах. Требует 7.7. ### 7.11. Включение *San в unit тестах. У нас мало unit тестов по сравнению с функциональными тестами и их использование не обязательно. Но они всё-равно важны и нет причин не запускать их под всеми видами sanitizers. ### 7.12. Показывать тестовое покрытие нового кода в PR. Пока есть просто показ тестового покрытия всего кода. ### 7.13. Включение аналога -Weverything в gcc. Мы используем -Wall -Wextra -Weverything -Werror. При сборке с clang, -Weverything уже включено. Но в gcc есть уникальные warning-и, отсутствующие в clang. Wolf Kreuzerkrieg. Возможно, его уже не интересует эта задача. ### 7.14. Альтернатива для readline и libedit. Тагир Кускаров, ВШЭ. Посмотрим на https://github.com/AmokHuginnsson/replxx ### 7.15. Замена libressl обратно на openssl. Поводом использования libressl послужило желание Константина podshumok Игнатова из QRator и то, что тогда openssl был опозорен и libressl считалась адекватной альтернативой. Но сейчас ситуация изменилась - openssl продолжает развиваться, а libressl не особо, и можно спокойно менять обратно. ### 7.16. tzdata внутри бинарника. Как в Аркадии, но только в качестве fallback. ### 7.17. Доделать tgz пакеты. Уже давно собираются универсальные tgz пакеты, но по нелепой случайности из них исчез install скрипт. [Александр Сапин](https://github.com/alesapin). Может делегировать эту задачу кому угодно. ### 7.18.1. Доделать бинарники под Mac. Уже есть автосборка бинарников под Mac на каждый коммит и PR, но с недостатками. [Иван Лежанкин](https://github.com/abyss7). Требует 7.1, 7.2. Рекомендуется 7.14. Сейчас не хватает по крайней мере SSL и ICU. Нужно для Яндекс.Облака. ### 7.18. Поместить ссылку на собранные бинарники под Mac на сайт. Сейчас людям приходится делать несколько кликов, чтобы их скачать. [Иван Лежанкин](https://github.com/abyss7) или [Александр Сапин](https://github.com/alesapin). ### 7.19. Доделать (проверить) автосборку под AArch64. Проверяем, что работает на Cavium и на Raspberry Pi. [Иван Лежанкин](https://github.com/abyss7). ### 7.20. Автосборка для FreeBSD x86_64. [Иван Лежанкин](https://github.com/abyss7). ### 7.21. Автосборка для Linux ppc64. [Иван Лежанкин](https://github.com/abyss7). ### 7.22. Дэшборд для pull requests. Дарья Петрова, УрФУ. ### 7.23. Функции для fuzzing. Андрей Некрашевич, ВШЭ. ### 7.24. Fuzzing лексера и парсера запросов; кодеков и форматов. Андрей Некрашевич, ВШЭ. ### 7.25. Синхронизация релизов в Аркадию. Изначально занимался Олег Алексеенков. Сейчас он перешёл работать в Яндекс.Морду, но обещает продолжать синхронизацию. Затем, возможно, [Иван Лежанкин](https://github.com/abyss7). Но сейчас приостановлено, так как Максим Ахмедов должен исправить регрессию производительности в анализе индекса. ### 7.26. Побайтовая идентичность репозитория с Аркадией. Дмитрий Копылов, Анастасия Сидоровская, Александр Артамонов, Илья Зубков. Фактически никто ничего не делает. ### 7.27. Запуск автотестов в Аркадии. Требует 7.26. ### 7.29. Опции clickhouse install, stop, start вместо postinst, init.d, systemd скриптов. Низкий приоритет. ### 7.30. Возможность переключения бинарных файлов на продакшене без выкладки пакетов. Низкий приоритет. ### 7.31. Зеркалирование нагрузки между серверами. В очереди. Нужно для Яндекс.Метрики. ### 7.32. Обфускация продакшен запросов. Роман Ильговский. Нужно для Яндекс.Метрики. ### 7.33. Выкладывать патч релизы в репозиторий автоматически. [Александр Сапин](https://github.com/alesapin). Может делегировать эту задачу кому угодно. ### 7.34. Бэкпортировать bugfix автоматически. [Александр Сапин](https://github.com/alesapin). Может делегировать эту задачу кому угодно. ### 7.35. Начальные правила для авто-merge. Зелёные проверки и два ревью. [Александр Сапин](https://github.com/alesapin). Может делегировать эту задачу кому угодно. ### 7.36. Понятие доверенных контрибьюторов. Контрибьюторы, у которых есть 5 померженных PR. Для их новых PR автотесты запускаются сразу. [Александр Сапин](https://github.com/alesapin). Может делегировать эту задачу кому угодно. ### 7.37. Разобраться с repo.yandex.ru. Есть жалобы на скорость загрузки. Подозрение, что repo.yandex.ru не является нормальным CDN. Отсутствует простой доступ к мониторингу и логам. Очень редко бывает нужно удалить пакет, но сделать это можно только через Аркадия Шейна. ## 8. Интеграция с внешними системами. ### 8.1. Поддержка ALTER MODIFY SETTING для Kafka. [Иван Лежанкин](https://github.com/abyss7). ### 8.2. Поддержка Mongo Atlas URI. [Александр Кузьменков](https://github.com/akuzm). ### 8.3. Доработки globs (правильная поддержка диапазонов, уменьшение числа одновременных stream-ов). [Ольга Хвостикова](https://github.com/stavrolia). ### 8.4. Унификация File, HDFS, S3 под URL. ### 8.5. Аутентификация в S3. [Владимир Чеботарёв](https://github.com/excitoon), Altinity. ### 8.6. Kerberos аутентификация для HDFS и Kafka. В очереди, возможно, [Иван Лежанкин](https://github.com/abyss7). ### 8.7. Исправление мелочи HDFS на очень старых ядрах Linux. В ядрах 2.6 отсутствует один системный вызов, который библиотека hdfs3 использует без необходимости. Тривиально, но исполнителя ещё нет. ### 8.8. Поддержка виртуальных столбцов с именем файла и путём. [Ольга Хвостикова](https://github.com/stavrolia). ### 8.9. Поддержка сжатых файлов (gz, bz) на чтение и запись. ### 8.10. Запись в табличную функцию ODBC. ### 8.11. Движок таблиц для чтения из Mongo. ### 8.12. Пропуск столбцов в форматах Parquet, ORC. ### 8.13. Поддержка массивов в Parquet, ORC. ### 8.14. Запись данных в ORC. ### 8.15. Запись данных в CapNProto. ### 8.16. Поддержка формата Avro. Павел Круглов, ВШЭ и Яндекс. ### 8.17. ClickHouse как MySQL реплика. Ильяс Адюгамов, ВШЭ. ### 8.18. ClickHouse как Federated MySQL. ### 8.19. Интеграция с RabbitMQ. Ксения Сумарокова, ВШЭ. ### 8.20. Интеграция с SQS. ### 8.21. Поддержка произвольного количества языков для имён регионов. Нужно для БК. Декабрь 2019. ## 9. Безопасность. ### 9.1. Ограничение на хосты в запросах ко внешним системам. Михаил Коротов. ### 9.2. Преднастроенные именованные соединения к внешним БД. Валерий Батурин, ВШЭ. ### 9.3. Поддержка TLS для ZooKeeper. ## 10. Внешние словари. ### 10.1. Исправление зависания в библиотеке доступа к YT. Библиотека для доступа к YT обладает катастрофически отвратительно неприемлимым поведением и не переживает учения. Нужно для БК и Метрики. Поиск причин - [Александр Сапин](https://github.com/alesapin). Дальшейшее исправление возможно на стороне YT. ### 10.2. Исправление SIGILL в библиотеке доступа к YT. Код YT зачем-то использует SIGILL вместо abort. Это, опять же, происходит при учениях. Нужно для БК и Метрики. Поиск причин - [Александр Сапин](https://github.com/alesapin). Дальшейшее исправление возможно на стороне YT. ### 10.3. Возможность чтения данных из статических таблиц в YT словарях. Нужно для БК и Метрики. ### 10.4. Словарь из YDB (KikiMR). Нужно для Метрики, а делать будет Александр Гололобов. Или он сейчас это прочитает и скажет "я никогда не буду делать эту задачу". ### 10.5. Закрытие соединений и уменьшение числа соединений для MySQL и ODBC. Нужно для Метрики. ### 10.6. Словари из Cassandra и Couchbase. ### 10.7. Поддержка Nullable в словарях. Артём Стрельцов, Николай Дегтеринский, Наталия Михненко, ВШЭ. ### 10.8. Поддержка массивов в словарях. Артём Стрельцов, Николай Дегтеринский, Наталия Михненко, ВШЭ. ### 10.9. Уменьшение блокировок для cache словарей за счёт одновременных запросов одного и того же. Нужно для БК, но на самом деле они так просто думают, а все проблемы из-за низко-качественной библиотеки для доступа в YT. ### 10.10. Возможность использования старых значений из cache словаря пока они перезапрашиваются. Нужно для БК и Метрики. ### 10.11. Возможность исключительно асинхронных запросов в cache словарях. Нужно для БК и Метрики. Требует 10.10. ### 10.12. Layout direct для словарей. Артём Стрельцов, Николай Дегтеринский, Наталия Михненко, ВШЭ. ### 10.13. Использование Join как generic layout для словарей. Артём Стрельцов, Николай Дегтеринский, Наталия Михненко, ВШЭ. ### 10.14. Поддержка всех типов в функции transform. ### 10.15. Использование словарей как специализированного layout для Join. ### 10.16. Словари на локальном SSD. Никита Васильев, ВШЭ и Яндекс. ### 10.17. Локальный дамп состояния словаря для быстрого старта сервера. ### 10.18. Таблица Join или словарь на удалённом сервере как key-value БД для cache словаря. ## 11. Интерфейсы. ### 11.1. Вставка состояний агрегатных функций в виде кортежа аргументов или массива кортежей аргументов. ### 11.2. Возможность использовать движок JDBC из коробки. Нужно разобраться, как упаковывать Java в статический бинарник, возможно AppImage. ### 11.3. Интеграционные тесты ODBC драйвера путём подключения ClickHouse к самому себе через ODBC. Денис Глазачев, Altinity. ### 11.4. Исправление упячек с типами Date и Decimal в clickhouse-cpp. ### 11.5. Поддержка TLS в clickhouse-cpp. Библиотеку clickhouse-cpp разрабатывал Павел Артёмкин в свободное время. ### 11.6. Интеграционные тесты clickhouse-cpp. ### 11.7. Интерактивный режим работы программы clickhouse-local. ### 11.8. Поддержка протокола PostgreSQL. Элбакян Мовсес Андраникович, ВШЭ. ### 11.9. Доработки ODBC драйвера. Денис Глазачев, Altinity. ### 11.10. Преднастроенные HTTP handlers для запросов. zhang2014 ## 12. Управление пользователями и доступом. ### 12.1. Role Based Access Control. [Виталий Баранов](https://github.com/vitlibar). Финальная стадия разработки, рабочая версия в декабре 2019. ### 12.2. Управление пользователями и правами доступа с помощью SQL запросов. [Виталий Баранов](https://github.com/vitlibar). Финальная стадия разработки, рабочая версия в декабре 2019. ### 12.3. Подключение справочника пользователей и прав доступа из LDAP. [Виталий Баранов](https://github.com/vitlibar). Требует 12.1. ### 12.4. Подключение IDM системы Яндекса как справочника пользователей и прав доступа. Пока низкий приоритет. Нужно для Метрики. Требует 12.3. ### 12.5. Pluggable аутентификация с помощью Kerberos (возможно, подключение GSASL). [Виталий Баранов](https://github.com/vitlibar). Требует 12.1. ### 12.6. Информация о пользователях и квотах в системной таблице. [Виталий Баранов](https://github.com/vitlibar). Требует 12.1. ## 13. Разделение ресурсов, multi-tenancy. ### 13.1. Overcommit запросов по памяти и вытеснение. Требует 2.1. Способ реализации обсуждается. ### 13.2. Общий конвейер выполнения на сервер. Требует 2.1. [Николай Кочетов](https://github.com/KochetovNicolai). ### 13.3. Пулы ресурсов. Требует 13.2 или сможем сделать более неудобную реализацию раньше. ## 14. Диалект SQL. ### 14.1. Исправление семантики CAST для Nullable. Нужно для DataLens. А также для внедрения в BI инструмент Looker. ### 14.2. Поддержка WITH для подзапросов. ### 14.3. Поддержка подстановок для множеств в правой части IN. ### 14.4. Поддержка подстановок для идентификаторов (имён) в SQL запросе. zhang2014 ### 14.5. Поддержка задания множества как массива в правой части секции IN. Василий Немков, Altinity, делал эту задачу, но зачем-то забросил её. ### 14.6. Глобальный scope для WITH. ### 14.7. Nullable для WITH ROLLUP, WITH CUBE, WITH TOTALS. Простая задача. ### 14.8. Модификаторы DISTINCT, ORDER BY для агрегатных функций. Софья Борзенкова, ВШЭ. ### 14.9. Поддержка запроса EXPLAIN. Требует 2.1. [Николай Кочетов](https://github.com/KochetovNicolai). ### 14.10. arrayReduce как функция высшего порядка. ### 14.11. Функции для grouping sets. ### 14.12. Функции обработки временных рядов. Сложная задача, так как вводит новый класс функций и требует его обработку в оптимизаторе запросов. ### 14.13. Применимость функций высшего порядка для кортежей и Nested. ### 14.14. Неявные преобразования типов констант. Требует 2.12. ### 14.15. Неявные преобразования типов под настройкой. Требует 2.12. Для внедрения в BI инструмент Looker. ### 14.16. Синонимы для функций из MySQL. ### 14.17. Ввести понятие stateful функций. Для runningDifference, neighbour - их учёт в оптимизаторе запросов. ### 14.18. UNION DISTINCT и возможность включить его по-умолчанию. Для BI систем. ### 14.19. Совместимость парсера типов данных с SQL. Для BI систем. ### 14.20. Позиционные аргументы для GROUP BY и ORDER BY. Тривиально и используется многими системами, но не входит в стандарт SQL. ### 14.21. Приведение типов для IN (подзапрос) и для JOIN. ## 15. Улучшение поддержки JOIN. ### 15.1. Доведение merge JOIN до продакшена. Артём Зуйков. Сейчас merge JOIN включается вручную опцией и всегда замедляет запросы. Хотим, чтобы он замедлял запросы только когда это неизбежно. Кстати, смысл merge JOIN появляется только совместно с 15.2 и 15.3. ### 15.2. Прокидывание условий в OUTER JOIN. Возможно, Артём Зуйков, но задача ещё не продумана до конца. Возможно, требует 2.1. ### 15.3. Логический вывод для цепочек вида ON t1.x = t2.y WHERE t1.x = 10 Возможно, Артём Зуйков. Для полноценной работы 15.2. ### 15.4. Distributed JOIN с помощью перераспределения данных. Артём Зуйков. ### 15.5. Использование ключа таблицы для оптимизации merge JOIN. ### 15.6. SEMI и ANTI JOIN. Артём Зуйков. ## 16. Типы данных и функции. ### 16.1. DateTime64. Василий Немков. ### 16.2. Тип данных для JSON. zhang2014 ### 16.3. Поддержка неконстантных аргументов с регулярными выражениями в функциях. Данила Кутенин, но только после секретного изменения в работе. ### 16.4. Функция rowNumberForKey. ### 16.5. Функции для XML и HTML escape. ### 16.6. Функции нормализации и хэширования SQL запросов. ## 17. Работа с географическими данными. ### 17.1. Гео-словари для определения региона по координатам. [Андрей Чулков](https://github.com/achulkov2), Антон Кваша, Артур Петуховский, ВШЭ. Будет основано на коде от Арслана Урташева. ### 17.2. GIS типы данных и операции. Алексей Коряков, Алексей Илюхов, ВШЭ, Яндекс.Карты. ### 17.3. Ускорение greatCircleDistance. [Ольга Хвостикова](https://github.com/stavrolia), основано на коде Андрея Аксёнова, получено разрешение на использование кода. ### 17.4. Ускорение geohash с помощью библиотеки из Аркадии. Предположительно, [Андрей Чулков](https://github.com/achulkov2). Изначальная реализация в Аркадии - Денис Шапошников. Получено одобрение от руководства. ### 17.5. Проверки в функции pointInPolygon. [Николай Кочетов](https://github.com/KochetovNicolai). Сейчас функция тихо не работает в случае полигонов с самопересечениями, надо кидать исключение. ## 18. Машинное обучение и статистика. ### 18.1. Инкрементальная кластеризация данных. Александр Кожихов, Максим Кузнецов. Обнаружена фундаментальная проблема в реализации, доделывает предположительно [Николай Кочетов](https://github.com/KochetovNicolai). Он может делегировать задачу кому угодно. ### 18.2. Агрегатные функции для статистических тестов. Артём Цыганов, Руденский Константин Игоревич, Семёнов Денис, ВШЭ. ### 18.3. Инфраструктура для тренировки моделей в ClickHouse. В очереди. Возможно, Александр Кожихов. У него сначала идёт задача 24.26. ## 19. Улучшение работы кластера. ### 19.1. Параллельные кворумные вставки без линеаризуемости. Александра Латышева, ВШЭ и Яндекс. ### 19.2. Подключение Etcd или Consul как альтернативы ZooKeeper. Алексей Лёвушкин, ВШЭ и Яндекс. ### 19.3. Подключение YT Cypress или YDB как альтернативы ZooKeeper. Hold. Полезно для Яндекс.Облака и БК, но есть риски, что будет вредно, а не полезно. ### 19.4. internal_replication = 'auto'. ### 19.5. Реплицируемые базы данных. В очереди, возможно Валерий Батурин, ВШЭ. ### 19.6. Одновременный выбор кусков для слияния многими репликами, отказ от leader election в ZK. ### 19.7. Возможность записи данных при недоступности ZK и отказ от линейного порядка кусков в большинстве случаев. ### 19.8. Отказ от хранения в ZK множества кусков для каждой реплики отдельно. ### 19.9. Отказ от хранения в ZK лога вставок и мержей. Обмен данными о кусках напрямую. ### 19.10. Облачные таблицы. Требует 1.6, 19.1, 19.6, 19.7, 19.8, 19.9. ## 20. Мутации данных. Пока все задачи по точечным UPDATE/DELETE имеют низкий приоритет, но ожидаем взять в работу в середине 2020. ### 20.1. Поддержка DELETE путём запоминания множества затронутых кусков и ключей. ### 20.2. Поддержка DELETE путём преобразования множества ключей в множество row_numbers на реплике, столбца флагов и индекса по диапазонам. ### 20.3. Поддержка ленивых DELETE путём запоминания выражений и преобразования к множеству ключей в фоне. ### 20.4. Поддержка UPDATE с помощью преобразования в DELETE и вставок. ## 21. Оптимизации производительности. ### 21.1. Параллельный парсинг форматов. Начинал Олег Ершов, доделывает Никита Михайлов, помогает [Александр Кузьменков](https://github.com/akuzm). Почти всё готово. ### 21.2. Параллельное форматирование форматов. После 21.1, предположительно Никита Михайлов. Задача сильно проще чем 21.1. ### 21.3. Исправление низкой производительности анализа индекса в случае большого множества в секции IN. Нужно всем (Zen, БК, DataLens...) Пока ещё не выбран исполнитель. ### 21.4. Использование ORDER BY ключа для оптимизации GROUP BY и DISTINCT. Дмитрий Рубашкин, ВШЭ. Помогает Антон Попов. ### 21.5. Распараллеливание INSERT при INSERT SELECT, если это необходимо. ### 21.6. Уменьшение числа потоков для SELECT в случае тривиального INSERT SELECT. ### 21.7. Кэш результатов запросов. [Achimbab](https://github.com/achimbab). ### 21.8. Взаимная интеграция аллокатора и кэша. Михаил Кот, ВШЭ. Задача сложная и рискованная. ### 21.8.1. Отдельный аллокатор для кэшей с ASLR. В прошлом году задачу пытался сделать Данила Кутенин с помощью lfalloc из Аркадии и mimalloc из Microsoft, но оба решения оказались неудачными. Успешная реализация задачи 21.8 отменит необходимость в этой задаче, поэтому холд. ### 21.9. Исправить push-down выражений с помощью Processors. [Николай Кочетов](https://github.com/KochetovNicolai). Требует 2.1. ### 21.10. Улучшение эвристики PREWHERE. Amos Bird. ### 21.11. Peephole оптимизации запросов. Руслан Камалов, Михаил Малафеев, Виктор Гришанин, ВШЭ ### 21.12. Алгебраические оптимизации запросов. Руслан Камалов, Михаил Малафеев, Виктор Гришанин, ВШЭ ### 21.13. Fusion агрегатных функций. После или совместно с 21.11. ### 21.14. Оптимизация запросов с помощью constraints. Мария Нефедова, ВШЭ. ### 21.15. Многоступенчатое чтение данных вместо PREWHERE. Требует 2.1 и 21.10. ### 21.16. Оптимизация GROUP BY с большим количеством агрегатных функций путём вычисления в два прохода. Нужно для БК. ### 21.17. Оптимизация GROUP BY при наличии ORDER BY по тем же ключам с LIMIT. Нужно для БК. ### 21.18. Внутренняя параллелизация мержа больших состояний агрегатных функций. ### 21.19. Оптимизация сортировки. Василий Морозов, Арслан Гумеров, Альберт Кидрачев, ВШЭ. В прошлом году задачу начинал делать Евгений Правда, ВШЭ, но почти полностью не сделал её. ### 21.20. Использование материализованных представлений для оптимизации запросов. В ByteDance есть готовая реализация, но они её боятся из-за, возможно, низкого качества кода. ### 21.21. Чтение больших файлов с помощью mmap. Тривиально, почти всё готово. ### 21.22. Userspace page cache. Требует 21.8. ### 21.23. Ускорение работы с вторичными индексами. zhang2014. ## 22. Долги и недоделанные возможности. ### 22.1. Исправление неработающих таймаутов, если используется TLS. Сейчас смотрит [Александр Сапин](https://github.com/alesapin), но он может делегировать задачу кому угодно. Нужно для Яндекс.Облака. ### 22.2. Убрать возможность изменить настройки в native протоколе в случае readonly. Алексей Миловидов или [Виталий Баранов](https://github.com/vitlibar). ### 22.3. Защита от абсурдно заданных пользователем кодеков. В очереди, скорее всего [Ольга Хвостикова](https://github.com/stavrolia). ### 22.4. Исправление оставшихся deadlocks в табличных RWLock-ах. Александр Казаков. Нужно для Яндекс.Метрики и Datalens. ### 22.5. Исправление редких срабатываний TSan в stress тестах в CI. Александр Казаков. ### 22.6. Изменение только DEFAULT в ALTER TABLE может поменять тип столбца. ### 22.7. Row-Level Security не работает в случае наличия в запросе IN подзапросов. [Иван Лежанкин](https://github.com/abyss7). Нужно для Метрики. ### 22.8. Исправить десериализацию параметров для параметризованных запросов. Хотел исправить Василий Немков, Altinity, но есть маленькие затруднения, наверное переделает Алексей Миловидов. ### 22.9. Разобраться с десериализацией массивов со значениями по-умолчанию в Protobuf формате в случае protobuf 3. [Виталий Баранов](https://github.com/vitlibar). Возможно, это - фундаментальная проблема и следует её только документировать. ### 22.10. Исправление дрифта при отслеживании потребления памяти запросами. Требует 6.3., но можно улучшить отдельными хаками. Нужно Метрике и БК. ### 22.11. Более простая ser/de настроек запросов. [Виталий Баранов](https://github.com/vitlibar), почти всё готово. ### 22.12. Исправление катастрофически отвратительно неприемлимо низкой производительности чтения из Kafka. [Иван Лежанкин](https://github.com/abyss7). ### 22.13. Посмотреть, почему не работают некоторые collations. [Иван Лежанкин](https://github.com/abyss7), совмещается с 7.1. ### 22.14. Посмотреть, почему не работает StorageSet для MergeTree таблиц при некоторых условиях. ### 22.15. Нормализация коммитов в Kafka и идемпотентности операций. [Иван Лежанкин](https://github.com/abyss7), если он не сдастся. ### 22.16. Исправление катастрофически отвратительно неприемлимо низкой производительности кодека DoubleDelta. Василий Немков, Altinity - сейчас старательно динамит эту задачу. ### 22.17. Консистентно работающий POPULATE для MaterializedView. ### 22.18. Исправление заметного падения производительности форматов после добавления доменов типов. Василий Немков, Altinity. ### 22.19. Одновременное использование SAMPLE и PREWHERE. Нужно для Метрики. [Николай Кочетов](https://github.com/KochetovNicolai), ноябрь 2019. ### 22.20. Неправильная работа PREWHERE при некоторых условиях. [Николай Кочетов](https://github.com/KochetovNicolai), декабрь 2019. ### 22.21. Неправильное поведение DateTime в районе начала unix epoch. Алексей Миловидов. ### 22.22. Nullable в функции transform и в CASE по множеству значений. После 10.14. ### 22.23. Правильная обработка Nullable в функциях, которые кидают исключение на default значении: modulo, intDiv. ### 22.24. Излишняя фильтрация ODBC connection string. Нужно для Метрики. Алексей Миловидов. ### 22.25. Избавиться от библиотеки btrie. Алексей Миловидов. Низкий приоритет. ### 22.26. Плохая производительность quantileTDigest. Алексей Миловидов или будет переназначено. ### 22.27. Проверить несколько PR, которые были закрыты zhang2014 и sundy-li. Алексей Миловидов. ### 22.28. Изучить и исправить поведение работы с Kafka при ребалансировке. [Иван Лежанкин](https://github.com/abyss7), если он не сдастся. ## 23. Default Festival. ### 23.1. Включение minimalistic_part_header в ZooKeeper. Сильно уменьшает объём данных в ZooKeeper. Уже год в продакшене в Яндекс.Метрике. Алексей Миловидов, ноябрь 2019. ### 23.2. Включение distributed_aggregation_memory_efficient. Есть риски меньшей производительности лёгких запросов, хотя производительность тяжёлых запросов всегда увеличивается. ### 23.3. Включение min_bytes_to_external_sort и min_bytes_to_external_group_by. Желательно 5.2. и 13.1. ### 23.4. Включение синхронной записи в Distributed таблицы по-умолчанию. Есть гипотеза, что плохо работает на очень больших кластерах. ### 23.5. Включение compile_expressions. Требует 7.2. Задачу изначально делал Денис Скоробогатов, ВШЭ и Яндекс, затем доделывал Алексей Миловидов, а затем [Александр Сапин](https://github.com/alesapin). ### 23.6. Включение учёта порядка столбцов в CSV. Просто аккуратно включить. ### 23.7. Включение NULL as Default в CSV. Просто аккуратно включить. ### 23.8. Включение оптимизации VALUES. Просто аккуратно включить. ### 23.9. Включение Processors. [Николай Кочетов](https://github.com/KochetovNicolai). ### 23.10. Включение mlock бинарника. Возможность mlock бинарника сделал Олег Алексеенков. Поможет, когда на серверах кроме ClickHouse работает много треш-программ. ## 24. Экспериментальные задачи. ### 24.1. Веб-интерфейс для просмотра состояния кластера и профилирования запросов. Антон Мамонов, УрФУ, Яндекс. ### 24.2. Экспериментальные алгоритмы сжатия. Анастасия Наумова, ВШЭ. ### 24.3. Экспериментальные кодеки. Вероника Фалчикова, Лада Торчик, ВШЭ. ### 24.4. Шифрование в ClickHouse на уровне кусков данных. Yuchen Dong, ICS. ### 24.5. Поддержка функций шифрования для отдельных значений. Yuchen Dong, ICS. ### 24.6. Userspace RAID. Глеб Новиков, ВШЭ. ### 24.7. Вероятностные структуры данных для фильтрации по подзапросам. Рузель Ибрагимов, ВШЭ и Яндекс. ### 24.8. Специализация векторизованного кода для AVX/AVX2/AVX512 и ARM NEON. Дмитрий Ковальков, ВШЭ и Яндекс. ### 24.9. Общий подход к CPU dispatching в фабрике функций. Дмитрий Ковальков, ВШЭ и Яндекс. ### 24.10. Поддержка типов half/bfloat16/unum. Рустам Гусейн-заде, ВШЭ. ### 24.11. User Defined Functions. Игорь Минеев, ВШЭ. ### 24.12. GPU offloading. Риск состоит в том, что даже известные GPU базы, такие как OmniSci, работают медленнее, чем ClickHouse. Преимущество возможно только на полной сортировке и JOIN. Алексей Соловей, nVidia и Рита Коннова, ВШЭ. ### 24.13. Stream запросы. Пререквизит для ClickHouse как CEP-системы. ### 24.14. Window функции. Требует 2.1. ### 24.15. Поддержка полуструктурированных данных. Требует 1.14 и 2.10. ### 24.16. Улучшение эвристики слияний. В прошлом году исследование по этой задаче сделал Егор Соловьёв, ВШЭ и Яндекс.Такси. Его исследование показало, что алгоритм нельзя существенно улучшить путём изменения параметров. Но исследование лажовое, так как рассмотрен только уже использующийся алгоритм. То есть, задача остаётся открытой. ### 24.17. Экспериментальные способы ускорения параллельного GROUP BY. Максим Серебряков ### 24.18. Не TCP протокол передачи файлов при репликации. ### 24.19. Промежуточное состояние GROUP BY как структура данных для key-value доступа. ### 24.20. Short-circuit вычисления некоторых выражений. Два года назад задачу попробовала сделать Анастасия Царькова, ВШЭ и Яндекс, но реализация получилась слишком неудобной и её удалили. ### 24.21. Реализация в ClickHouse протокола распределённого консенсуса. Имеет смысл только после 19.2. ### 24.22. Вывод типов по блоку данных. Вывод формата данных по примеру. Эльмир Марданов, ВШЭ. ### 24.23. Минимальная поддержка транзакций для множества вставок/чтений. Максим Кузнецов, ВШЭ. ### 24.24. Реализация алгоритмов differential privacy. Артём Вишняков, ВШЭ. ### 24.25. Интеграция в ClickHouse функциональности обработки HTTP User Agent. Есть хороший код в Яндекс.Метрике. Получено согласие от руководства. Михаил Филитов, ВШЭ. ### 24.26. Поддержка open tracing или аналогов. Александр Кожихов, ВШЭ и Яндекс.YT. ### 24.27. Реализация алгоритмов min-hash, sim-hash для нечёткого поиска полудубликатов. ucasFL, ICS. ### 24.28. Другой sketch для квантилей. Похоже на quantileTiming, но с логарифмическими корзинами. ### 24.29. Поддержка Arrow Flight. ### 24.30. ClickHouse как графовая СУБД. Amos Bird, но его решение слишком громоздкое и пока не open-source. ### 24.31. Кореллированные подзапросы. Перепиывание в JOIN. Не раньше 21.11, 21.12, 21.9. Низкий приоритет. ### 24.32. Поддержка GRPC. Мария Конькова, ВШЭ и Яндекс. Также смотрите 24.29. ## 25. DevRel ### 25.1. Перевод инструкции для начинающих разработчиков. Александр Казаков, ноябрь 2019. ### 25.2. Вычитка и выкладка статьи про обфускацию данных на английском. Эми Жанель Кришниевски, Александр Казаков, Алексей Миловидов, ноябрь 2019. ### 25.3. Подготовка статьи "Секреты оптимизации производительности ClickHouse". Алексей Миловидов, Леонид Клюев. ### 25.4. Подготовка статьи "Профайлер запросов: трудный путь". Алексей Миловидов, Леонид Клюев. ### 25.5. Подготовка статьи "Тестирование ClickHouse, которое мы заслужили". ### 25.6. Перевод этих статей на английский. Требует 25.3, 25.4, 25.5. Эми Жанель Кришниевски ### 25.7. Перевод статьи Данилы Кутенина на английский. Эми Жанель Кришниевски ### 25.8. Выступление keynote на BDTC. Алексей Миловидов ### 25.9. Подготовка докладчиков: khvostikao, ilezhankin, nikitamikhailov, akuzm и другие. [Ольга Хвостикова](https://github.com/stavrolia), [Иван Лежанкин](https://github.com/abyss7), Никита Михайлов, [Александр Кузьменков](https://github.com/akuzm). Уже готовые докладчики: Алексей Миловидов, [Николай Кочетов](https://github.com/KochetovNicolai), [Александр Сапин](https://github.com/alesapin). Получаем минимум 7 докладчиков в 2020 году. ### 25.10. Митапы в России: Москва x2 + митап для разработчиков или хакатон, Санкт-Петербург, Минск, Нижний Новгород, Екатеринбург, Новосибирск и/или Академгородок, Иннополис или Казань. Екатерина Миназова - организация ### 25.11. Митапы зарубежные: восток США (Нью Йорк, возможно Raleigh), возможно северо-запад (Сиэтл), Китай (Пекин снова, возможно митап для разработчиков или хакатон), Лондон. [Иван Блинков](https://github.com/blinkov/) - организация ### 25.12. Статья "научная" - про устройство хранения данных и индексов или whitepaper по архитектуре. Есть вариант подать на VLDB. Низкий приоритет. Алексей Миловидов. ### 25.13. Участие во всех мероприятиях Яндекса, которые связаны с разработкой бэкенда, C++ разработкой или с базами данных, возможно участие в DevRel мероприятиях. Алексей Миловидов и все подготовленные докладчики ### 25.14. Конференции в России: все HighLoad, возможно CodeFest, DUMP или UWDC, возможно C++ Russia. Алексей Миловидов и все подготовленные докладчики ### 25.15. Конференции зарубежные: Percona, DataOps, возможно Big Data Warsaw, попытка попасть на более крупные. Алексей Миловидов и все подготовленные докладчики ### 25.16. Сайт play.clickhouse. ### 25.17. Взаимодействие с ВУЗами: ВШЭ, УрФУ, ICS Beijing. Алексей Миловидов и вся группа разработки ### 25.18. Лекция в ШАД. Алексей Миловидов ### 25.19. Участие в курсе разработки на C++ в ШАД. ### 25.20. Ещё одно сравнение производительности аналитических СУБД. Матвей Бубнов, УрФУ ### 25.21. Повторное награждение контрибьюторов в Китае. ### 25.22. On-site помощь с ClickHouse компаниям в дни рядом с мероприятиями. [Иван Блинков](https://github.com/blinkov/) - организация ### 25.23. Новый мерч для ClickHouse. ### 25.24. Конкурсы bughunter или оптимизации кода на C++. Проведение конкурсов должно начинаться для сотрудников Яндекса, пока нет согласования от Лили Надеждиной и Алексея Башкеева. ### 25.25. Семинары для потенциальных клиентов Яндекс.Облака. По мере необходимости. Алексей Миловидов, организация - Всеволод Грабельников. ### 25.26. Участие в GSoC. Андрей Бородин пытается уговорить нас участвовать, но пока загружены задачей 25.17. ### 25.27. Обновить сайт ClickHouse. Иван Блинков. Есть риск, что станет хуже.