ClickHouse/docs/ru/development/contrib.md
2022-04-09 07:29:05 -06:00

14 KiB
Raw Blame History

sidebar_position sidebar_label
71 Используемые сторонние библиотеки

Используемые сторонние библиотеки

Список сторонних библиотек:

Библиотека Тип лицензии
abseil-cpp Apache
AMQP-CPP Apache
arrow Apache
avro Apache
aws Apache
aws-c-common Apache
aws-c-event-stream Apache
aws-checksums Apache
base64 BSD 2-clause
boost Boost
boringssl BSD
brotli MIT
capnproto MIT
cassandra Apache
cctz Apache
cityhash102 MIT
cppkafka BSD 2-clause
croaring Apache
curl Apache
cyrus-sasl BSD 2-clause
double-conversion BSD 3-clause
dragonbox Apache
fast_float Apache
fastops MIT
flatbuffers Apache
fmtlib Unknown
gcem Apache
googletest BSD 3-clause
grpc Apache
h3 Apache
hyperscan Boost
icu Public Domain
icudata Public Domain
jemalloc BSD 2-clause
krb5 MIT
libc-headers LGPL
libcpuid BSD 2-clause
libcxx Apache
libcxxabi Apache
libdivide zLib
libfarmhash MIT
libgsasl LGPL
libhdfs3 Apache
libmetrohash Apache
libpq Unknown
libpqxx BSD 3-clause
librdkafka MIT
libunwind Apache
libuv BSD
llvm Apache
lz4 BSD
mariadb-connector-c LGPL
miniselect Boost
msgpack-c Boost
murmurhash Public Domain
NuRaft Apache
openldap Unknown
orc Apache
poco Boost
protobuf BSD 3-clause
rapidjson MIT
re2 BSD 3-clause
replxx BSD 3-clause
rocksdb BSD 3-clause
s2geometry Apache
sentry-native MIT
simdjson Apache
snappy Public Domain
sparsehash-c11 BSD 3-clause
stats Apache
thrift Apache
unixodbc LGPL
xz Public Domain
zlib-ng zLib
zstd BSD

Список всех сторонних библиотек можно получить с помощью запроса:

SELECT library_name, license_type, license_path FROM system.licenses ORDER BY library_name COLLATE 'en';

Пример

Рекомендации по добавлению сторонних библиотек и поддержанию в них пользовательских изменений

  1. Весь внешний сторонний код должен находиться в отдельных папках внутри папки contrib репозитория ClickHouse. По возможности, используйте сабмодули Git.
  2. Клонируйте официальный репозиторий Clickhouse-extras. Используйте официальные репозитории GitHub, если они доступны.
  3. Создавайте новую ветку на основе той ветки, которую вы хотите интегрировать: например, master -> clickhouse/master или release/vX.Y.Z -> clickhouse/release/vX.Y.Z.
  4. Все копии Clickhouse-extras можно автоматически синхронизировать с удаленными репозиториями. Ветки clickhouse/... останутся незатронутыми, поскольку скорее всего никто не будет использовать этот шаблон именования в своих репозиториях.
  5. Добавьте сабмодули в папку contrib репозитория ClickHouse, на который ссылаются клонированные репозитории. Настройте сабмодули для отслеживания изменений в соответствующих ветках clickhouse/....
  6. Каждый раз, когда необходимо внести изменения в код библиотеки, следует создавать отдельную ветку, например clickhouse/my-fix. Затем эта ветка должна быть слита (merge) в ветку, отслеживаемую сабмодулем, например, в clickhouse/master или clickhouse/release/vX.Y.Z.
  7. Не добавляйте код в клоны репозитория Clickhouse-extras, если имя ветки не соответствует шаблону clickhouse/....
  8. Всегда вносите изменения с учетом того, что они попадут в официальный репозиторий. После того как PR будет влит из (ветки разработки/исправлений) вашего личного клона репозитория в Clickhouse-extras, и сабмодуль будет добавлен в репозиторий ClickHouse, рекомендуется сделать еще один PR из (ветки разработки/исправлений) репозитория Clickhouse-extras в официальный репозиторий библиотеки. Таким образом будут решены следующие задачи: 1) публикуемый код может быть использован многократно и будет иметь более высокую ценность; 2) другие пользователи также смогут использовать его в своих целях; 3) поддержкой кода будут заниматься не только разработчики ClickHouse.
  9. Чтобы сабмодуль начал использовать новый код из исходной ветки (например, master), сначала следует аккуратно выполнить слияние (master -> clickhouse/master), и только после этого изменения могут быть добавлены в основной репозиторий ClickHouse. Это связано с тем, что в отслеживаемую ветку (например, clickhouse/master) могут быть внесены изменения, и поэтому ветка может отличаться от первоисточника (master).