ClickHouse/docs/ru/extended_roadmap.md
2019-11-20 03:36:30 +03:00

65 KiB
Raw Blame History

Планы разработки ClickHouse 2020.

Здесь собраны важные задачи на 2020 год. Также многие из них присутствуют в GitHub Issues или (редко) в Яндекс.Трекере, а также (очень редко) в Яндекс.Goals. Мы предпочитаем использовать Яндекс.Трекер только для секретных задач, а все публичные задачи размещать в GitHub Issues для того, чтобы сделать разработку более открытой наружу. В любом случае, для работы над задачами, таск-трекеры уступают в удобстве plaintext файлу.

Классификация задач условная и за её основу взята известная классификация животных.

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 и избежать дублирования данных. В задаче также вводится способ индексации путём обращения функции нескольких аргументов на интервале, что имеет смысл для дальнейшего развития.

Изначально делал Андрей Чулков, ВШЭ, теперь доделывает Ольга Хвостикова, но задача прокрастинирована из-за задачи 25.9. Сейчас оказалось, что задача 25.9 тоже не готова. Будем надеятся на реализацию к концу ноября. Впрочем, Андрей Чулков скоро выйдет на работу стажёром на пол ставки и сможет помочь её доделать.

1.2. Wait-free каталог баз данных.

Делает Александр Токмаков, первый рабочий вариант в декабре 2019. Нужно для DataLens и Яндекс.Метрики.

1.3. Неблокирующие ALTER.

И полностью immutable куски. Делает Александр Сапин. Готов приступить к задаче в конце ноября 2019. Нужно для Яндекс.Метрики.

1.4. Нетранзитивные ALTER столбцов.

Требует 1.3. Будет делать Александр Сапин.

1.5. ALTER RENAME COLUMN.

Требует 1.3. Будет делать Александр Сапин.

1.6. Полиморфные куски данных.

Делает Антон Попов, первый рабочий вариант в декабре. Пререквизит чтобы снизить сложность мелких INSERT, что в свою очередь нужно для 1.12, иначе задача 1.12 не сможет нормально работать. Особенно нужно для Яндекс.Облака.

1.7. Буферизация и WAL в MergeTree.

Требует 1.6.

1.8. Перенос между разделами по TTL.

Делает Владимир Чеботарёв, 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. Делает Николай Кочетов. Нужно для Яндекс.Метрики.

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.

Делает Николай Кочетов. Финальная стадия разработки. Включение по-умолчанию в конце декабря 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. Декларативный парсер запросов.

Низкий приоритет. Задачу хочет сделать Иван Лежанкин в свободное время, но за последний год никаких поползновений не видно.

2.9. Логгировние в format-стиле.

В задаче заинтересован Александр Кузьменков. Нет прогресса.

2.10. Запрашивать у таблиц не столбцы, а срезы.

В очереди.

2.11. Разбирательство и нормализация функциональности для bitmap.

В очереди.

2.12. Декларативные сигнатуры функций.

Задачу делает Алексей Миловидов. Прогресс 50% и разработка временно приостановлена.

2.13. Каждая функция в отдельном файле.

Задачу делает Алексей Миловидов. Прогресс 80%. Потребуется помощь других разработчиков.

2.14. Все функции с состоянием переделать на FunctionBuilder.

Долг Николай Кочетов. Сейчас код находится в переходном состоянии, что неприемлимо.

2.15. Функция subscribe для IStorage.

Для нормализации работы materialized views поверх Merge, Distributed, Kafka.

3. Документация.

Здесь задачи только по инфраструктуре документации.

3.1. Перенос документации по функциям в код.

Требует 2.12 и 2.13.

3.2. Перенос однородных частей документации в код.

Требует 3.1.

3.3. Исправить катастрофически отвратительно неприемлимый поиск по документации.

Иван Блинков - очень хороший человек. Сам сайт документации основан на треш-технологиях, которые трудно исправить.

3.4. Добавить японский язык в документацию.

Эту задачу сделает Иван Блинков, до конца ноября 2019.

4. Сетевое взаимодействие.

4.1. Уменьшение числа потоков при распределённых запросах.

Никита Лапков, весна 2020.

4.2. Спекулятивное выполнение запросов на нескольких репликах.

Никита Лапков, весна 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. Исправления сэмплирующего профайлера запросов.

Никита Лапков, ноябрь 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.

Иван Лежанкин. Добавление в 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 релизы.

Александр Сапин.

7.6. Правильный статистический тест для comparison mode в clickhouse-performance-test.

Задачу начал делать Дмитрий Рубашкин. Сейчас продолжает Александр Кузьменков.

7.7. Доделать тесты под MSan.

Уже есть ASan, TSan, UBSan. Не хватает тестов под MSan. Они уже добавлены в CI, но не проходят. Александр Кузьменков.

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 скрипт. Александр Сапин. Может делегировать эту задачу кому угодно.

7.18.1. Доделать бинарники под Mac.

Уже есть автосборка бинарников под Mac на каждый коммит и PR, но с недостатками. Иван Лежанкин. Требует 7.1, 7.2. Рекомендуется 7.14. Сейчас не хватает по крайней мере SSL и ICU. Нужно для Яндекс.Облака.

7.18. Поместить ссылку на собранные бинарники под Mac на сайт.

Сейчас людям приходится делать несколько кликов, чтобы их скачать. Иван Лежанкин или Александр Сапин.

7.19. Доделать (проверить) автосборку под AArch64.

Проверяем, что работает на Cavium и на Raspberry Pi. Иван Лежанкин.

7.20. Автосборка для FreeBSD x86_64.

Иван Лежанкин.

7.21. Автосборка для Linux ppc64.

Иван Лежанкин.

7.22. Дэшборд для pull requests.

Дарья Петрова, УрФУ.

7.23. Функции для fuzzing.

Андрей Некрашевич, ВШЭ.

7.24. Fuzzing лексера и парсера запросов; кодеков и форматов.

Андрей Некрашевич, ВШЭ.

7.25. Синхронизация релизов в Аркадию.

Изначально занимался Олег Алексеенков. Сейчас он перешёл работать в Яндекс.Морду, но обещает продолжать синхронизацию. Затем, возможно, Иван Лежанкин. Но сейчас приостановлено, так как Максим Ахмедов должен исправить регрессию производительности в анализе индекса.

7.26. Побайтовая идентичность репозитория с Аркадией.

Команда DevTools. Фактически никто ничего не делает.

7.27. Запуск автотестов в Аркадии.

Требует 7.26.

7.29. Опции clickhouse install, stop, start вместо postinst, init.d, systemd скриптов.

Низкий приоритет.

7.30. Возможность переключения бинарных файлов на продакшене без выкладки пакетов.

Низкий приоритет.

7.31. Зеркалирование нагрузки между серверами.

В очереди. Нужно для Яндекс.Метрики.

7.32. Обфускация продакшен запросов.

Роман Ильговский. Нужно для Яндекс.Метрики.

7.33. Выкладывать патч релизы в репозиторий автоматически.

Александр Сапин. Может делегировать эту задачу кому угодно.

7.34. Бэкпортировать bugfix автоматически.

Александр Сапин. Может делегировать эту задачу кому угодно.

7.35. Начальные правила для авто-merge.

Зелёные проверки и два ревью. Александр Сапин. Может делегировать эту задачу кому угодно.

7.36. Понятие доверенных контрибьюторов.

Контрибьюторы, у которых есть 5 померженных PR. Для их новых PR автотесты запускаются сразу. Александр Сапин. Может делегировать эту задачу кому угодно.

7.37. Разобраться с repo.yandex.ru.

Есть жалобы на скорость загрузки. Подозрение, что repo.yandex.ru не является нормальным CDN. Отсутствует простой доступ к мониторингу и логам. Очень редко бывает нужно удалить пакет, но сделать это можно только через одного человека.

8. Интеграция с внешними системами.

8.1. Поддержка ALTER MODIFY SETTING для Kafka.

Иван Лежанкин.

8.2. Поддержка Mongo Atlas URI.

Александр Кузьменков.

8.3. Доработки globs (правильная поддержка диапазонов, уменьшение числа одновременных stream-ов).

Ольга Хвостикова.

8.4. Унификация File, HDFS, S3 под URL.

8.5. Аутентификация в S3.

Владимир Чеботарёв, Altinity.

8.6. Kerberos аутентификация для HDFS и Kafka.

Андрей Коняев, ArenaData.

8.7. Исправление мелочи HDFS на очень старых ядрах Linux.

В ядрах 2.6 отсутствует один системный вызов, который библиотека hdfs3 использует без необходимости. Тривиально, но исполнителя ещё нет.

8.8. Поддержка виртуальных столбцов с именем файла и путём.

Ольга Хвостикова.

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 обладает катастрофически отвратительно неприемлимым поведением и не переживает учения. Нужно для БК и Метрики. Поиск причин - Александр Сапин. Дальшейшее исправление возможно на стороне YT.

10.2. Исправление SIGILL в библиотеке доступа к YT.

Код YT зачем-то использует SIGILL вместо abort. Это, опять же, происходит при учениях. Нужно для БК и Метрики. Поиск причин - Александр Сапин. Дальшейшее исправление возможно на стороне YT.

10.3. Возможность чтения данных из статических таблиц в YT словарях.

Нужно для БК и Метрики.

10.4. Словарь из YDB (KikiMR).

Нужно для Метрики, а делать будет таинственный незнакомец из команды 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.

Виталий Баранов. Финальная стадия разработки, рабочая версия в декабре 2019.

12.2. Управление пользователями и правами доступа с помощью SQL запросов.

Виталий Баранов. Финальная стадия разработки, рабочая версия в декабре 2019.

12.3. Подключение справочника пользователей и прав доступа из LDAP.

Виталий Баранов. Требует 12.1.

12.4. Подключение IDM системы Яндекса как справочника пользователей и прав доступа.

Пока низкий приоритет. Нужно для Метрики. Требует 12.3.

12.5. Pluggable аутентификация с помощью Kerberos (возможно, подключение GSASL).

Виталий Баранов. Требует 12.1.

12.6. Информация о пользователях и квотах в системной таблице.

Виталий Баранов. Требует 12.1.

13. Разделение ресурсов, multi-tenancy.

13.1. Overcommit запросов по памяти и вытеснение.

Требует 2.1. Способ реализации обсуждается.

13.2. Общий конвейер выполнения на сервер.

Требует 2.1. Николай Кочетов.

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. Николай Кочетов.

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. Гео-словари для определения региона по координатам.

Андрей Чулков, Антон Кваша, Артур Петуховский, ВШЭ. Будет основано на коде от Арслана Урташева.

17.2. GIS типы данных и операции.

Алексей Коряков, Алексей Илюхов, ВШЭ, Яндекс.Карты.

17.3. Ускорение greatCircleDistance.

Ольга Хвостикова, основано на коде Андрея Аксёнова, получено разрешение на использование кода.

17.4. Ускорение geohash с помощью библиотеки из Аркадии.

Предположительно, Андрей Чулков. Получено одобрение от руководства.

17.5. Проверки в функции pointInPolygon.

Николай Кочетов. Сейчас функция тихо не работает в случае полигонов с самопересечениями, надо кидать исключение.

18. Машинное обучение и статистика.

18.1. Инкрементальная кластеризация данных.

Александр Кожихов, Максим Кузнецов. Обнаружена фундаментальная проблема в реализации, доделывает предположительно Николай Кочетов. Он может делегировать задачу кому угодно.

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. Параллельный парсинг форматов.

Начинал Олег Ершов, доделывает Никита Михайлов, помогает Александр Кузьменков. Почти всё готово.

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.

21.8. Взаимная интеграция аллокатора и кэша.

Михаил Кот, ВШЭ. Задача сложная и рискованная.

21.8.1. Отдельный аллокатор для кэшей с ASLR.

В прошлом году задачу пытался сделать Данила Кутенин с помощью lfalloc из Аркадии и mimalloc из Microsoft, но оба решения оказались неудачными. Успешная реализация задачи 21.8 отменит необходимость в этой задаче, поэтому холд.

21.9. Исправить push-down выражений с помощью Processors.

Николай Кочетов. Требует 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.

Сейчас смотрит Александр Сапин, но он может делегировать задачу кому угодно. Нужно для Яндекс.Облака.

22.2. Убрать возможность изменить настройки в native протоколе в случае readonly.

Алексей Миловидов или Виталий Баранов.

22.3. Защита от абсурдно заданных пользователем кодеков.

В очереди, скорее всего Ольга Хвостикова.

22.4. Исправление оставшихся deadlocks в табличных RWLock-ах.

Александр Казаков. Нужно для Яндекс.Метрики и Datalens.

22.5. Исправление редких срабатываний TSan в stress тестах в CI.

Александр Казаков.

22.6. Изменение только DEFAULT в ALTER TABLE может поменять тип столбца.

22.7. Row-Level Security не работает в случае наличия в запросе IN подзапросов.

Иван Лежанкин. Нужно для Метрики.

22.8. Исправить десериализацию параметров для параметризованных запросов.

Хотел исправить Василий Немков, Altinity, но есть маленькие затруднения, наверное переделает Алексей Миловидов.

22.9. Разобраться с десериализацией массивов со значениями по-умолчанию в Protobuf формате в случае protobuf 3.

Виталий Баранов. Возможно, это - фундаментальная проблема и следует её только документировать.

22.10. Исправление дрифта при отслеживании потребления памяти запросами.

Требует 6.3., но можно улучшить отдельными хаками. Нужно Метрике и БК.

22.11. Более простая ser/de настроек запросов.

Виталий Баранов, почти всё готово.

22.12. Исправление катастрофически отвратительно неприемлимо низкой производительности чтения из Kafka.

Иван Лежанкин.

22.13. Посмотреть, почему не работают некоторые collations.

Иван Лежанкин, совмещается с 7.1.

22.14. Посмотреть, почему не работает StorageSet для MergeTree таблиц при некоторых условиях.

22.15. Нормализация коммитов в Kafka и идемпотентности операций.

Иван Лежанкин, если он не сдастся.

22.16. Исправление катастрофически отвратительно неприемлимо низкой производительности кодека DoubleDelta.

Василий Немков, Altinity - сейчас старательно динамит эту задачу.

22.17. Консистентно работающий POPULATE для MaterializedView.

22.18. Исправление заметного падения производительности форматов после добавления доменов типов.

Василий Немков, Altinity.

22.19. Одновременное использование SAMPLE и PREWHERE.

Нужно для Метрики. Николай Кочетов, ноябрь 2019.

22.20. Неправильная работа PREWHERE при некоторых условиях.

Николай Кочетов, декабрь 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 при ребалансировке.

Иван Лежанкин, если он не сдастся.

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. Задачу изначально делал Денис Скоробогатов, ВШЭ и Яндекс, затем доделывал Алексей Миловидов, а затем Александр Сапин.

23.6. Включение учёта порядка столбцов в CSV.

Просто аккуратно включить.

23.7. Включение NULL as Default в CSV.

Просто аккуратно включить.

23.8. Включение оптимизации VALUES.

Просто аккуратно включить.

23.9. Включение Processors.

Николай Кочетов.

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 и другие.

Ольга Хвостикова, Иван Лежанкин, Никита Михайлов, Александр Кузьменков. Уже готовые докладчики: Алексей Миловидов, Николай Кочетов, Александр Сапин. Получаем минимум 7 докладчиков в 2020 году.

25.10. Митапы в России и Беларуси: Москва x2 + митап для разработчиков или хакатон, Санкт-Петербург, Минск, Нижний Новгород, Екатеринбург, Новосибирск и/или Академгородок, Иннополис или Казань.

Екатерина Миназова - организация

25.11. Митапы зарубежные: восток США (Нью Йорк, возможно Raleigh), возможно северо-запад (Сиэтл), Китай (Пекин снова, возможно митап для разработчиков или хакатон), Лондон.

Иван Блинков - организация

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 компаниям в дни рядом с мероприятиями.

Иван Блинков - организация

25.23. Новый мерч для ClickHouse.

25.24. Конкурсы bughunter или оптимизации кода на C++.

Проведение конкурсов должно начинаться для сотрудников Яндекса, пока нет согласования.

25.25. Семинары для потенциальных клиентов Яндекс.Облака.

По мере необходимости. Алексей Миловидов, организация - Яндекс.Облако.

25.26. Участие в GSoC.

Андрей Бородин пытается уговорить нас участвовать, но пока загружены задачей 25.17.

25.27. Обновить сайт ClickHouse.

Иван Блинков. Есть риск, что станет хуже.