ClickHouse/docs/ru/extended_roadmap.md

1317 lines
65 KiB
Markdown
Raw Normal View History

2019-11-18 19:10:48 +00:00
# Планы разработки 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). Сейчас код находится в переходном состоянии, что неприемлимо.
## 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.
## 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 с помощью перераспределения данных.
Артём Зуйков.
## 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.
Иван Блинков. Есть риск, что станет хуже.