ClickHouse〜高速な列指向データベース管理システム〜
オンライン分析処理(OLAP:Online Analytical Processing)とは、蓄積されたデータを様々な視点から素早く分析を行う処理や操作のことをいいます。企業内でも、分析を様々な角度から行うことでスムーズな意思決定に役立てることができます。最近では、大量のデータを分析し可視化するビジネスインテリジェンス(Business Intelligence)ツールが多く提供されています。オンライン分析処理もこのビジネスインテリジェンスのカテゴリの中の一つと言われています。
今回は、オンライン分析処理(OLAP)に利用できる、オープンソースの列指向データベース管理システムのClickHouseを紹介します。
ClickHouseとは
ClickHouseとは、オープンソースソフトウェアの列指向のデータベースで、オンライン分析処理(OLAP)に特化した拡張性の高いソフトウェアです。ClickHouseは、2016年にリリースされ、Apache License v2ライセンスでClickHouse,Inc.より公開されています。ClickHouseは、リアルタイムに多くのデータを分析し提供します。そのため、ネットワークモニタリングやマーケティング分析、トラフィック分析など幅広く利用が可能です。ClickHouseは、オンプレミス環境でもAWSのようなクラウド環境でも構築が可能です。
ClickHouseの特徴
ClickHouseには、以下の特徴があります。
高速な処理が可能
ClickHouseは、列指向構造を採用したソフトウェアです。OSSのデータベース管理システム(DBMS:DataBase Management System)であるMySQLやPostgreSQLは、行指向構造を採用していました。行指向構造では、フロントエンドのシステムと結びついて頻繁にレコードにアクセスし内容を更新します。一方、ClickHouseは、列指向構造(カラム型データベース)を採用しており、データを列ごとに保持しているため、欲しいデータだけを選択し取得ができます。よってデータの読み込み効率がよく、高速に動作します。
一般的なSQL構文で管理が可能
SQLをサポートしており、一般的なSQL構文で管理が可能です。SQL構文とは、データベースに指示を出すための命令文で、データベース言語として標準化されています。MySQLなどもSQL構文を採用しており、ClickHouseもMySQLと同じように命令や指示を出すことが可能になります。
メモリ・ディスク使用の最適化
ClickHouseは、データを列ごとに保存するため、同じデータや類似したデータ、空データが重複している場合、データを圧縮します。そのため、データの圧縮性能が高く、データサイズを抑えることができます。
様々なテーブルエンジンが用意されている
データや操作の特性によって最適化されたテーブルエンジンが用意されています。テーブルエンジンは、大きく次の4つのファミリーに分類されています。
- MergeTree Engine ファミリー
MergeTreeエンジンは、最も多機能なエンジンです。テーブルをパーティション分割して操作することができるという特徴があります。また、レコードとテーブルのTTL機能の利用や、データのレプリケーションも可能です。
- Log Engine ファミリー
Log Engine Familyは、多数の小さなテーブル(最大1万行) をすばやく記述し、後で全体を読み取る必要があるシナリオ用に開発されています。MergeTreeと比較すると、目立った機能はなく、パフォーマンスも低いです。インデックスもサポートされていません。
- Integration Engine
Integration Engineは、他のシステムとデータをやりとりするために実装されている機能です。例えば次のようなシステムと連携することが可能です。
- ODBC
- MongoDB
- Kafka
- PostgreSQL
- ExternalDistributed
- DeltaLake
- JDBC
- HDFS
- EmbeddedRocksDB
- SQLite
- MaterializedPostgreSQL
- Hudi
- MySQL
- S3
- RabbitMQ
- Hive
- NATS
- Special Engine ファミリー
上記の用意されたテーブルエンジンから、用途に合わせて適切なエンジンを選びテーブルを作成します。
リアルタイムでの集計をサポート
Materialized Viewという機能を利用することで、特定のテーブルへ挿入されたデータを、別のテーブルに格納することができます。例えば、リアルタイムにデータを集計する場合、タイムアウトやメモリ不足で集計ができないことや、データが多すぎてデータを保存しきれないことがあります。Materialized Viewは、リアルタイムなデータを別のテーブルに保存するため、集計処理やクエリの高速化ができ、不要な元データを削除しデスク使用量を削減します。
クラスタリングや分散処理のサポート
複数台による分散処理とデータシャードのレプリケーション機能が用意されています。元々、ClickHouseクラスタは、Apache Zookeeperを利用して死活監視等を行っていました。現在では、Zookeeperの問題点を解消するため、ClickHouse Keeperと呼ばれるZooKeeper互換のプロセスを使い、クラスタを構成するように変化しています。クラスタリングや分散処理を設定することができるため、高い処理性能をもち、故障や障害が発生してもほかのノードに処理を引き継ぐことができます。
様々な外部システムとの連携
外部のシステムと連携してデータを活用することが可能です。例えば、Amazon s3からのデータインポート・エクスポートやMySQLやMongoDBからのデータの取得、Apache Kafkaブローカからのデータ取得が可能です。
デージーネットの取り組み
デージーネットでは、AlmaLinux9にClickHouseをインストールして調査・検証を行いました。その結果ClickHouseでは、処理の高速性において、1000万件や1億件のレコードを数秒程度で登録し、検索も1秒かからない速度で応答があることがわかりました。しかし、実際の利用場面では、テーブルやクエリの内容によってClickHouseの検索速度が左右されることもわかっています。そのため、想定される利用環境を作成し、クエリの最適化やベンチマークなどを実施していくことを検討しています。また弊社では、ClickHouseとApache Kafkaを連携した、データベース管理システムの構築を行っています。ClickHouseのインストール方法や調査した結果は、ClickHouse調査報告書からダウンロードが可能です。
「情報の一覧」
ClickHouse調査報告書
ClickHouseとは、2016年にリリースされたOLAPに特化した列指向のデータベースです。本書は、ClickHouseについて調査した内容をまとめたものです。ClickHouseの基本操作や設定方法、使用するSQLやデータ型についても解説を行います。
Apache Kafka〜OSSの分散メッセージングシステム〜
Apache Kafkaとは、IoTのセンサーデータやアクセスログなど随時生成される膨大なデータをリアルタイムに処理することができる、オープンソースソフトウェアの分散メッセージングシステムです。イベントストリーミングサーバや、メッセージサーバとも呼ばれています。
NetFlowでネットワーク問題を解決〜OpenNFA〜
デージーネットではOSSを組み合わせ、低コストでネットワーク監視を導入することができる、Netflowを活用したトラフィック監視システム『OpenNFA(オープンエヌエフエー)』を開発しました。