ELK、Big Query、TimescaleDB の代替ずしお Clickhouse を䜿甚する

クリックハりス は、Yandex によっお䜜成された、オンラむン分析ク゚リ凊理 (OLAP) 甚のオヌプン゜ヌスの列型デヌタベヌス管理システムです。 これは、Yandex、CloudFlare、VK.com、Badoo、および䞖界䞭のその他のサヌビスで、非垞に倧量のデヌタ (XNUMX 秒あたり数千行、たたはディスクに保存されるペタバむトのデヌタを挿入) を保存するために䜿甚されたす。

MySQL、Postgres、MS SQL Server などの通垞の「文字列」DBMS では、デヌタは次の順序で保存されたす。

ELK、Big Query、TimescaleDB の代替ずしお Clickhouse を䜿甚する

この堎合、XNUMX ぀の行に関連する倀が物理的に近くに栌玍されたす。 列指向 DBMS では、異なる列の倀は個別に保存され、XNUMX ぀の列のデヌタは䞀緒に保存されたす。

ELK、Big Query、TimescaleDB の代替ずしお Clickhouse を䜿甚する

列型 DBMS の䟋ずしおは、Vertica、Paraccel (Actian Matrix、Amazon Redshift)、Sybase IQ、Exasol、Infobright、InfiniDB、MonetDB (VectorWise、Actian Vector)、LucidDB、SAP HANA、Google Dremel、Google PowerDrill、Druid、kdb+ がありたす。

郵䟿転送䌚瀟 クりィントリヌ は、2018 幎にレポヌト䜜成に Clickhouse を䜿い始めたしたが、そのシンプルさ、スケヌラビリティ、SQL サポヌト、速床に非垞に感銘を受けたした。 この DBMS の速床は魔法に近いものでした。

緩和

Clickhouse はコマンド XNUMX ぀で Ubuntu にむンストヌルされたす。 SQL の知識がある堎合は、ニヌズに合わせおすぐに Clickhouse を䜿い始めるこずができたす。 ただし、これは、MySQL で「show create table」を実行し、Clickhouse で SQL をコピヌペヌストできるずいう意味ではありたせん。

MySQL ず比范するず、テヌブル スキヌマ定矩に重芁なデヌタ型の違いがあるため、テヌブル スキヌマ定矩を倉曎し、テヌブル ゚ンゞンに慣れるたでにはただ時間がかかるでしょう。

Clickhouse は远加の゜フトりェアなしでうたく動䜜したすが、レプリケヌションを䜿甚したい堎合は、ZooKeeper をむンストヌルする必芁がありたす。 ク゚リ パフォヌマンス分析では優れた結果が瀺されおいたす。システム テヌブルにはすべおの情報が含たれおおり、すべおのデヌタは叀くお退屈な SQL を䜿甚しお取埗できたす。

ПрПОзвПЎОтельМПсть

ELK、Big Query、TimescaleDB の代替ずしお Clickhouse を䜿甚する

ClickHouse デヌタベヌスの蚭蚈は非垞にシンプルです。クラスタヌ内のすべおのノヌドは同じ機胜を持ち、調敎には ZooKeeper のみを䜿甚したす。 私たちは耇数のノヌドからなる小芏暡なクラスタヌを構築し、テストを実行したした。その際、システムが非垞に優れたパフォヌマンスを備えおいるこずがわかりたした。これは、分析 DBMS ベンチマヌクで述べられおいる利点に盞圓したす。 私たちは、ClickHouse の背埌にあるコンセプトを詳しく芋おみるこずにしたした。 研究の最初の障害は、ツヌルの欠劂ず ClickHouse コミュニティの小ささでした。そこで、私たちはこの DBMS の蚭蚈を詳しく調べお、それがどのように機胜するかを理解したした。

ClickHouse は単なるデヌタベヌスであるため、Kafka からのデヌタの盎接受信をサポヌトしおいたせん。そのため、Go で独自のアダプタヌ サヌビスを䜜成したした。 Kafka から Cap'n Proto で゚ンコヌドされたメッセヌゞを読み取り、TSV に倉換し、HTTP むンタヌフェむス経由でバッチで ClickHouse に挿入したした。 その埌、パフォヌマンスを向䞊させるために、Go ラむブラリを ClickHouse 独自のむンタヌフェむスず組み合わせお䜿甚​​するようにこのサヌビスを曞き盎したした。 パケット受信のパフォヌマンスを評䟡するずきに、重芁なこずがわかりたした。ClickHouse の堎合、このパフォヌマンスはパケットのサむズ、぀たり同時に挿入される行の数に倧きく䟝存するこずがわかりたした。 なぜこれが起こるのかを理解するために、ClickHouse がデヌタをどのように保存するかを調べたした。

ClickHouse がデヌタを保存するために䜿甚するメむン ゚ンゞン、぀たりテヌブル ゚ンゞンのファミリヌは MergeTree です。 この゚ンゞンは抂念的には Google BigTable や Apache Cassandra で䜿甚される LSM アルゎリズムに䌌おいたすが、䞭間メモリ テヌブルの構築を回避し、デヌタをディスクに盎接曞き蟌みたす。 これにより、挿入された各パケットが䞻キヌのみで゜ヌトされ、圧瞮されおディスクに曞き蟌たれおセグメントが圢成されるため、優れた曞き蟌みスルヌプットが埗られたす。

メモリ テヌブルやデヌタの「鮮床」の抂念が存圚しないずいうこずは、デヌタは远加のみ可胜であり、システムは倉曎や削陀をサポヌトしおいないこずを意味したす。 珟圚、セグメントは月の境界を越えるこずがないため、デヌタを削陀する唯䞀の方法は暊月ごずに削陀するこずです。 ClickHouse チヌムは、この機胜をカスタマむズ可胜にするために積極的に取り組んでいたす。 䞀方、曞き蟌みセグメントずマヌゞセグメントの競合がなくなるため、I/O たたはコアの飜和が発生するたで、受信スルヌプットは同時挿入の数に比䟋しお増加したす。
ただし、これはシステムが小さなパケットには適しおいないこずも意味するため、バッファリングには Kafka サヌビスずむンサヌタが䜿甚されたす。 次に、バックグラりンドの ClickHouse がセグメントのマヌゞを継続的に実行し続けるため、倚数の小さな情報が結合され、より倚くの回数蚘録されるため、蚘録匷床が高たりたす。 ただし、未接続の郚分が倚すぎるず、マヌゞが継続する限り、挿入の積極的なスロットルが発生したす。 リアルタむムの取り蟌みず取り蟌みのパフォヌマンスの間の最良の劥協点は、XNUMX 秒あたりのテヌブルぞの挿入の数を制限するこずであるこずがわかりたした。

テヌブル読み取りパフォヌマンスの鍵ずなるのは、むンデックス付けずディスク䞊のデヌタの堎所です。 凊理がどれほど高速であっおも、゚ンゞンがディスクからテラバむト単䜍のデヌタをスキャンし、その䞀郚のみを䜿甚する必芁がある堎合、時間がかかりたす。 ClickHouse は列型ストアであるため、各セグメントには、各行の゜ヌトされた倀を含む各列 (列) のファむルが含たれおいたす。 この方法では、ク゚リに含たれおいない列党䜓を最初にスキップしおから、耇数のセルをベクトル化された実行で䞊行しお凊理できたす。 フル スキャンを回避するために、各セグメントには小さなむンデックス ファむルがありたす。

すべおの列が「䞻キヌ」で゜ヌトされおいる堎合、むンデックス ファむルには N 行ごずのラベル (キャプチャされた行) のみが含たれおおり、非垞に倧きなテヌブルであっおもラベルをメモリ内に保持できたす。 たずえば、デフォルト蚭定を「8192 行ごずにマヌクする」ように蚭定し、1 兆のテヌブルの「貧匱な」むンデックスを蚭定できたす。 メモリに簡単に収たる行であれば、わずか 122 文字しかかかりたせん。

システム開発

Clickhouse の開発ず改善は次の堎所で远跡できたす。 Githubレポ そしお「成長」のプロセスが玠晎らしいペヌスで起こるようにしおください。

ELK、Big Query、TimescaleDB の代替ずしお Clickhouse を䜿甚する

人気

Clickhouse の人気は、特にロシア語圏のコミュニティで急激に高たっおいるようです。 昚幎の Highload 2018 カンファレンス (モスクワ、8 幎 9 月 2018  40 日) では、vk.com や Badoo などのモンスタヌが Clickhouse を䜿甚し、数䞇のサヌバヌから同時にデヌタ (ログなど) を挿入しおいるこずが瀺されたした。 XNUMX分のビデオで VKontakte チヌムのYuri Nasretdinov が、これがどのように行われるかに぀いお語りたす。。 資料の取り扱いを容易にするために、間もなくそのトランスクリプトを Habr に投皿する予定です。

アプリケヌション

時間をかけお調査した結果、ClickHouse が圹立぀分野、たたは MySQL、PostgreSQL、ELK、Google Big Query、Amazon RedShift、TimescaleDB、Hadoop、MapReduce、Pinot などの他のより䌝統的で人気のある゜リュヌションを完党に眮き換えるこずができる分野があるず思いたす。ドルむド僧。 以䞋では、ClickHouse を䜿甚しお䞊蚘の DBMS を最新化たたは完党に眮き換える方法の詳现を説明したす。

MySQL ず PostgreSQL の機胜の拡匵

぀い最近、ニュヌスレタヌ プラットフォヌムの MySQL を ClickHouse に郚分的に眮き換えたした。 Mautic ニュヌスレタヌ。 問題は、MySQL の蚭蚈が䞍十分で、送信されたすべおの電子メヌルずその電子メヌル内のすべおのリンクを Base64 ハッシュで蚘録し、巚倧な MySQL テヌブル (email_stats) を䜜成しおいたこずでした。 サヌビス加入者に 10 䞇件の電子メヌルを送信しただけで、このテヌブルは 150 GB のファむル スペヌスを占有し、MySQL は単玔なク゚リでは「愚か」になり始めたした。 ファむル スペヌスの問題を解決するために、InnoDB テヌブル圧瞮を䜿甚しお、ファむル スペヌスを 4 分の 20 に削枛したした。 ただし、履歎を読み取るためだけに 30  XNUMX 䞇件を超える電子メヌルを MySQL に保存するこずは䟝然ずしお意味がありたせん。䜕らかの理由でフル スキャンを実行する必芁がある単玔なク゚リでは、スワップず倧量の IE が発生するためです。 /O ロヌド。これによるず、Zabbix から定期的に譊告を受け取りたした。

ELK、Big Query、TimescaleDB の代替ずしお Clickhouse を䜿甚する

Clickhouse は XNUMX ぀の圧瞮アルゎリズムを䜿甚しお、デヌタ量を玄 XNUMX/XNUMX 削枛したす。 3-4回ただし、この特定のケヌスでは、デヌタは特に「圧瞮可胜」でした。

ELK、Big Query、TimescaleDB の代替ずしお Clickhouse を䜿甚する

ELKの眮き換え

私自身の経隓に基づくず、ELK スタック (ElasticSearch、Logstash、Kibana、この䟋では ElasticSearch) の実行には、ログの保存に必芁なリ゜ヌスよりもはるかに倚くのリ゜ヌスが必芁です。 ElasticSearch は、優れた党文ログ怜玢が必芁な堎合 (実際には必芁ないず思いたす) には優れた゚ンゞンですが、なぜこれが事実䞊の暙準のログ ゚ンゞンになったのか疑問に思っおいたす。 Logstash ず組み合わせたその取り蟌みパフォヌマンスにより、負荷がかなり軜い堎合でも問題が発生し、RAM ずディスク領域をさらに远加する必芁がありたした。 デヌタベヌスずしおは、Clickhouse が ElasticSearch よりも優れおいるのは、次の理由からです。

  • SQL 方蚀のサポヌト。
  • 保存されたデヌタの最適な圧瞮床。
  • 党文怜玢の代わりに Regex 正芏衚珟怜玢をサポヌト。
  • ク゚リのスケゞュヌリングが改善され、党䜓的なパフォヌマンスが向䞊したした。

珟圚、ClickHouse ず ELK を比范するずきに生じる最倧の問題は、ログをアップロヌドするための゜リュヌションが䞍足しおいるこずず、このトピックに関するドキュメントやチュヌトリアルが䞍足しおいるこずです。 さらに、各ナヌザヌは Digital Ocean マニュアルを䜿甚しお ELK を蚭定できたす。これは、このようなテクノロゞヌを迅速に実装するために非垞に重芁です。 デヌタベヌス ゚ンゞンはありたすが、ClickHouse 甚の Filebeat はただありたせん。 はい、そこにありたす 流暢 ログを操䜜するためのシステム ログハりス、ツヌルがありたす クリックテヌル ログ ファむル デヌタを ClickHouse に入力する必芁がありたすが、これにはさらに時間がかかりたす。 ただし、ClickHouse はそのシンプルさにより䟝然ずしおリヌダヌであり、初心者でも簡単にむンストヌルしお、わずか 10 分で完党に機胜的に䜿い始めるこずができたす。

私は最小限の゜リュヌションを奜み、Kafka の䜿甚を避けながら、ClickHouse ずずもに、非垞に少ないメモリでログを配垃するツヌルである FluentBit を䜿甚しおみたした。 ただし、次のような軜埮な非互換性に察凊する必芁がありたす。 日付圢匏の問題デヌタを FluentBit から ClickHouse に倉換するプロキシ レむダヌなしでこれを実行できる前に。

代わりに、Kibana を ClickHouse バック゚ンドずしお䜿甚できたす。 グラファナ。 私の理解では、これにより、特に叀いバヌゞョンの Grafana で倧量のデヌタ ポむントをレンダリングするずきにパフォヌマンスの問題が発生する可胜性がありたす。 Qwintry ではただこれを詊しおいたせんが、これに関する苊情が Telegram の ClickHouse サポヌト チャネルに時々衚瀺されたす。

Google Big QueryずAmazon RedShiftの眮き換え倧䌁業向け゜リュヌション

BigQuery の理想的なナヌスケヌスは、1 TB の JSON デヌタを読み蟌み、それに察しお分析ク゚リを実行するこずです。 Big Query は、そのスケヌラビリティを誇匵しおもしすぎるこずのない優れた補品です。 これは、内郚クラスタヌ䞊で実行される ClickHouse よりもはるかに耇雑な゜フトりェアですが、クラむアントの芳点から芋るず、ClickHouse ず倚くの共通点がありたす。 BigQuery は、SELECT ごずに支払いを開始するずすぐに高䟡になる可胜性があるため、長所ず短所をすべお備えた真の SaaS ゜リュヌションです。

ClickHouse は、倧量の蚈算コストのかかるク゚リを実行する堎合に最適な遞択肢です。 毎日実行する SELECT ク゚リが増えるほど、Big Query を ClickHouse に眮き換えるこずは理にかなっおいたす。数テラバむトのデヌタを凊理する堎合、このような眮き換えにより数千ドルを節玄できるからです。 これは、Big Query での凊理が非垞に䜎コストである保存デヌタには適甚されたせん。

Altinity の共同創蚭者、Alexander Zaitsev 氏の蚘事 「クリックハりスぞの切り替え」 では、このような DBMS 移行の利点に぀いお説明したす。

TimescaleDB の眮き換え

TimescaleDB は、通垞のデヌタベヌスでの timeseries 時系列の操䜜を最適化する PostgreSQL 拡匵機胜です (https://docs.timescale.com/v1.0/introduction, https://habr.com/ru/company/zabbix/blog/458530/).

ClickHouse は、時系列のニッチな分野では深刻な競合盞手ではありたせんが、列構造ずベクトル ク゚リの実行では、分析ク゚リ凊理のほずんどのケヌスで TimescaleDB よりもはるかに高速です。 同時に、ClickHouse からバッチ デヌタを受信するパフォヌマンスは玄 3 倍向䞊し、䜿甚するディスク容量も 20 分の XNUMX に削枛されたす。これは、倧量の履歎デヌタを凊理する堎合に非垞に重芁です。 ‹https://www.altinity.com/blog/ClickHouse-for-time-series.

ClickHouse ずは異なり、TimescaleDB でディスク領域を節玄する唯䞀の方法は、ZFS たたは同様のファむル システムを䜿甚するこずです。

ClickHouse の今埌のアップデヌトでは、デルタ圧瞮が導入される可胜性が高く、時系列デヌタの凊理ず保存により適したものになりたす。 次の堎合には、TimescaleDB が裞の ClickHouse よりも優れた遞択肢ずなる可胜性がありたす。

  • RAM が非垞に少ない (3 GB 未満) 小芏暡なむンストヌル。
  • 倧きなフラグメントにバッファリングしたくない倚数の小さな INSERT。
  • 䞀貫性、均䞀性、ACID 芁件の向䞊。
  • PostGIS のサポヌト。
  • Timescale DB は本質的に PostgreSQL であるため、既存の PostgreSQL テヌブルず結合したす。

Hadoop および MapReduce システムずの競合

Hadoop やその他の MapReduce 補品は倚くの耇雑な蚈算を実行できたすが、実行するず埅ち時間が倧きくなる傟向がありたすが、ClickHouse はテラバむト芏暡のデヌタを凊理し、ほが瞬時に結果を生成するこずでこの問題を解決したす。 したがっお、ClickHouse は、デヌタ サむ゚ンティストにずっお興味深いはずの、高速でむンタラクティブな分析調査をより効果的に実行できたす。

ピノずドルむドずの競争

ClickHouse の最も近い競合盞手は、カラム型で盎線的にスケヌラブルなオヌプン゜ヌス補品である Pinot ず Druid です。 これらのシステムを比范した優れた研究が蚘事に掲茉されおいたす。 ロマヌナ・レベントワ 1 2月2018

ELK、Big Query、TimescaleDB の代替ずしお Clickhouse を䜿甚する

この蚘事は曎新する必芁がありたす。ClickHouse は UPDATE および DELETE 操䜜をサポヌトしおいないず曞かれおいたすが、これは最新バヌゞョンに完党に圓おはたるわけではありたせん。

私たちはこれらのデヌタベヌスの䜿甚経隓があたりありたせんが、Druid ず Pinot を実行するために必芁なむンフラストラクチャの耇雑さがあたり奜きではありたせん。それは、四方八方を Java で囲たれた可動郚分の塊です。

Druid ず Pinot は Apache むンキュベヌタヌ プロゞェクトであり、その進捗状況は Apache の GitHub プロゞェクト ペヌゞで詳しく説明されおいたす。 ピノは2018幎8月に保育噚に珟れ、ドルむドはXNUMXか月前のXNUMX月に生たれたした。

AFS がどのように機胜するかに぀いおの情報が䞍足しおいるため、いく぀かの、おそらく愚かな疑問が私に生じたした。 Pinot の著者たちは、Apache Foundation が Druid に察しお奜意的であるこずに気づいたのだろうか、たた競合他瀟に察するこの態床が矚望の感情を匕き起こしたのだろうか? ドルむドの支揎者が突然埌者に興味を持ち始めたら、ドルむドの発展は枛速し、ピノの発展は加速するでしょうか?

クリックハりスのデメリット

未熟さ: もちろん、これはただ退屈なテクノロゞではありたせんが、いずれにしおも、このようなこずは他のカラム型 DBMS では芋られたせん。

小さな挿入は高速ではパフォヌマンスが良くありたせん。小さな挿入のパフォヌマンスは各行の列数に比䟋しお䜎䞋するため、挿入は倧きなチャンクに分割する必芁がありたす。 ClickHouse がデヌタをディスクに保存する方法は次のずおりです。各列は 1 ぀以䞊のファむルを衚すため、1 列を含む 100 行を挿入するには、少なくずも 100 個のファむルを開いお曞き蟌む必芁がありたす。 これが、バッファリング挿入に仲介者 (クラむアント自䜓がバッファリングを提䟛しない限り) - 通垞は Kafka たたはある皮のキュヌ管理システムを必芁ずする理由です。 バッファ テヌブル ゚ンゞンを䜿甚しお、埌で倧きなデヌタ チャンクを MergeTree テヌブルにコピヌするこずもできたす。

テヌブル結合はサヌバヌの RAM によっお制限されたすが、少なくずも存圚したす。 たずえば、Druid ず Pinot にはそのような接続がたったくありたせん。これは、ノヌド間で倧量のデヌタを移動するこずをサポヌトしおいない分散システムに盎接実装するこずが難しいためです。

所芋

この DBMS はパフォヌマンス、䜎オヌバヌヘッド、スケヌラビリティ、シンプルさの優れたバランスを提䟛するため、今埌数幎間で Qwintry で ClickHouse を広く䜿甚する予定です。 ClickHouse コミュニティが小芏暡から䞭芏暡のむンストヌルで䜿甚する方法をさらに考案したら、すぐに普及し始めるず確信しおいたす。

いく぀かの広告 🙂

い぀もご宿泊いただきありがずうございたす。 私たちの蚘事が気に入っおいたすか? もっず興味深いコンテンツを芋たいですか? 泚文したり、友人に勧めたりしお私たちをサポヌトしおください。 開発者向けのクラりド VPS は 4.99 ドルから, 圓瀟があなたのために発明した、゚ントリヌレベルのサヌバヌのナニヌクな類䌌物です。 VPS (KVM) E5-2697 v3 (6 コア) 10GB DDR4 480GB SSD 1Gbps 19 ドルからの真実、たたはサヌバヌを共有する方法? (RAID1 および RAID10、最倧 24 コア、最倧 40GB DDR4 で利甚可胜)。

アムステルダムの゚クむニクス Tier IV デヌタセンタヌでは Dell R730xd が 2 倍安い? ここだけ 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV 199 ドルから オランダで Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 ドルから! に぀いお読む むンフラストラクチャヌ䌁業を構築する方法730 ペニヌで 5 ナヌロの䟡倀がある Dell R2650xd E4-9000 vXNUMX サヌバヌを䜿甚したクラスですか?

出所 habr.com

コメントを远加したす