[ClickHouse] ローカルで、1分でClickHouseの環境を構築する

# 概要
 ClickHouseの性能が良さそうで、`aws redshift`より優れているそうですので、ちょっとローカルで環境構築し、使ってみました。情報を忘れないために、このブログで記載します。

# ClickHouseとは

>ClickHouseは、クエリのオンライン分析処理（OLAP）用の列指向のデータベース管理システム（DBMS）です。

[ClickHouseのドキュメント](https://clickhouse.tech/docs/ja/)

# 環境構築

## バージョン
### OS
 macOS

### docker
![スクリーンショット 2021-03-26 18.20.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1184340/c720489c-c7c7-7d08-3899-74d906777c0f.png)

### ClickHouse
19.1.13

### 

## デモのgithub

[demo](https://github.com/xymmk/clickhouse_for_local)

## docker-compose.yml作成

```YAML
version: '3'
services:
  clickhouse:
    image: yandex/clickhouse-server
    container_name: ck
    ports:
      # httpリクエスト使うport
      - 8123:8123
      # クライアントport
      - 9000:9000
    volumes:
      - type: bind
        source: "./database"
        target: "/var/lib/clickhouse"
      - type: bind
        source: "./config/clickhouse-config.xml"
        target: "/etc/clickhouse-server/config.xml"
      - type: bind
        source: "./config/users.xml"
        target: "/etc/clickhouse-server/users.xml"
    networks:
      clickhouse-net:
        aliases:
          - clickhouse.local.me

  houseclient:
    build: ./houseclient
    container_name: hc
    command: "tail -f /dev/null"
    networks:
      clickhouse-net:
        aliases:
          - houseclient.local.me

  tabix:
    image: spoonest/clickhouse-tabix-web-client
    container_name: tb
    ports:
      - 8888:80
    networks:
      clickhouse-net:
        aliases:
          - houseclient.local.me


networks:
  clickhouse-net:
```

## config/clickhouse-config.xml 作成

[ClickHouseのconfig.yml](https://github.com/mosquito/graphite-clickhouse/blob/master/clickhouse-config.xml)のファイルコピーペース利用すれば良い

## config/users.yml　作成

[ClickHouseのusers.yml](https://github.com/ClickHouse/ClickHouse/blob/master/programs/server/users.xml)のファイルコピーペース利用すれば良い

## 各ファイル作成し終わったら、ディレクトリのイメージ

```bash
├── config               
  ├── clickhouse-config.xml
  ├── users.xml
├── database             (clickhouseのデータベースファイル)
├── docker-compose.yml   (docker-compse.ymlファイル)
```

## tabix、clickhouse-cli、clickhouseなど起動
今回いろんなツールを使ってみようと思い、`lighthouse`、`tabix`、`clickhouse-cli`なども設定しました。詳細は[ここ](https://github.com/xymmk/clickhouse_for_local#%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9)に記載しました。自分のおすすめは`tabix`です。

```bash
docker-compose up
```

# ClickHouseのメリット
* 学習コストは低くて、SQLはほぼMySQLと一緒、データのタイプもMySQLと一緒.
* 素早い
* データをインサートする時、たくさんデータを集めて、インサートするのは早い。一行ずつインサートなら、逆にパフォマンスはよくないらしい。(これはメリットとはいえないですね。)

# ClickHouseのデメリット
* Transactionはサポートしていない
* MySQLみたいなupdate・deleteなどサポートしてない
* aws・gcpにはClickHouseのcloud manangeサービスが提供されていない

# use case
log analysis


# メモ
* ClickHouseのデフォルトユーザ名は: defaultで、パスワードはない。clickhouse-cliを叩けば、アクセスできる

```bash
docker exec -it hc clickhouse-cli -h clickhouse.local.me -p 8123 -u default
```

# テーブルエンジン編
[MergeTree](https://qiita.com/xymmk/items/40f79a81d75dd53d5c06)

# 参考した記事
[1: qiitaの記事](https://qiita.com/tomo0/items/b730f479ba1b2c534f1a)
[2: zhihu](https://zhuanlan.zhihu.com/p/22165241)
[3: wiki](https://en.wikipedia.org/wiki/ClickHouse)
[4: ClicHouseのドキュメントサイト](https://clickhouse.tech/docs/ja/)
[5: 一番分かりやすいMergeTreeの説明](https://cloud.tencent.com/developer/article/1604965)