Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ja docs fix #8119

Merged
merged 30 commits into from
Dec 10, 2019
Merged
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
dcb5d48
Create SECURITY.md
blinkov Jun 18, 2019
2ca98c1
merge SECURITY.md
blinkov Aug 19, 2019
0d4f3d8
[experimental] auto-mark documentation PRs with labels
blinkov Aug 19, 2019
4530205
revert #6544
blinkov Aug 19, 2019
b5786fe
Merge branch 'master' of github.com:yandex/ClickHouse
blinkov Aug 20, 2019
a187fa7
Sync RPM packages instructions to other docs languages
blinkov Aug 20, 2019
551de6e
Move tutorial to documentation with old content (for now)
blinkov Aug 23, 2019
9de561d
refactor installation guide a bit
blinkov Aug 23, 2019
9e8e770
add ../en/getting_started/index.md
blinkov Aug 23, 2019
6b936b0
Rename ya_metrica_task.md
blinkov Aug 28, 2019
86de948
Rename ya_metrica_task.md
blinkov Aug 28, 2019
4a7f220
Refactor Yandex.Metrica dataset description
blinkov Aug 28, 2019
a951054
WIP on rewriting tutorial
blinkov Aug 28, 2019
71364cf
merge master
blinkov Aug 30, 2019
ac89b60
tmp commit
blinkov Dec 3, 2019
51c775c
merge master
blinkov Dec 3, 2019
c136bee
lots of docs fixes
blinkov Dec 3, 2019
64ddef8
partially revert c136bee4ce9cfbec249aa1d729b5f88d34b90d2f
blinkov Dec 3, 2019
89a53b1
try to fix docs build in CI
blinkov Dec 3, 2019
d9b70b7
try to fix docs build in CI
blinkov Dec 4, 2019
3ce1d7f
few minor improvements
blinkov Dec 4, 2019
533d09b
Quick refactoring of last portion of tutorial (not thoroughly tested …
blinkov Dec 4, 2019
6b25cfe
fix link
blinkov Dec 5, 2019
6a609f3
add lunr.ja.js
blinkov Dec 6, 2019
d5a0833
Merge branch 'master' of github.com:clickhouse/ClickHouse
blinkov Dec 6, 2019
f9fe057
docs build fixes
blinkov Dec 10, 2019
dbf4a34
Merge branch 'master' of github.com:clickhouse/ClickHouse
blinkov Dec 10, 2019
9f4b911
git rm ja/index.md
blinkov Dec 10, 2019
5868c6c
restore ja/index.md from a7f016f159daade64a5a793dc133221726aef10d
blinkov Dec 10, 2019
c379ead
Merge branch 'master' of github.com:clickhouse/ClickHouse
blinkov Dec 10, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 0 additions & 1 deletion docs/ja/index.md

This file was deleted.

142 changes: 142 additions & 0 deletions docs/ja/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
# ClickHouseとは?

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

「通常の」行指向のDBMSでは、データは次の順序で保存されます。

| Row | WatchID | JavaEnable | Title | GoodEvent | EventTime |
| ------ | ------------------- | ---------- | ------------------ | --------- | ------------------- |
| #0 | 89354350662 | 1 | Investor Relations | 1 | 2016-05-18 05:19:20 |
| #1 | 90329509958 | 0 | Contact us | 1 | 2016-05-18 08:10:20 |
| #2 | 89953706054 | 1 | Mission | 1 | 2016-05-18 07:38:00 |
| #N | ... | ... | ... | ... | ... |

つまり、行に関連するすべての値は物理的に隣り合わせに格納されます。

行指向のDBMSの例:MySQL, Postgres および MS SQL Server
{: .grey }

列指向のDBMSでは、データは次のように保存されます:

| Row: | #0 | #1 | #2 | #N |
| ----------- | ------------------- | ------------------- | ------------------- | ------------------- |
| WatchID: | 89354350662 | 90329509958 | 89953706054 | ... |
| JavaEnable: | 1 | 0 | 1 | ... |
| Title: | Investor Relations | Contact us | Mission | ... |
| GoodEvent: | 1 | 1 | 1 | ... |
| EventTime: | 2016-05-18 05:19:20 | 2016-05-18 08:10:20 | 2016-05-18 07:38:00 | ... |

これらの例は、データが配置される順序のみを示しています。
異なる列の値は別々に保存され、同じ列のデータは一緒に保存されます。

列指向DBMSの例:Vertica, Paraccel (Actian Matrix and Amazon Redshift), Sybase IQ, Exasol, Infobright, InfiniDB, MonetDB (VectorWise and Actian Vector), LucidDB, SAP HANA, Google Dremel, Google PowerDrill, Druid および kdb+
{: .grey }

異なったデータ格納の順序は、異なったシナリオにより適します。
データアクセスシナリオとは、クエリの実行内容、頻度、割合を指します。クエリで読み取られるの各種データの量(行、列、バイト)。データの読み取りと更新の関係。作業データのサイズとローカルでの使用方法。トランザクションが使用されるかどうか、およびそれらがどの程度分離されているか。データ複製と論理的整合性の要件。クエリの種類ごとの遅延とスループットの要件など。

システムの負荷が高いほど、使用シナリオの要件に一致するようにセットアップされたシステムをカスタマイズすることがより重要になり、このカスタマイズはより細かくなります。大きく異なるシナリオに等しく適したシステムはありません。システムがさまざまなシナリオに適応可能である場合、高負荷下では、システムはすべてのシナリオを同等に不十分に処理するか、1つまたはいくつかの可能なシナリオでうまく機能します。

## OLAPシナリオの主要なプロパティ

- リクエストの大部分は読み取りアクセス用である。
- データは、単一行ではなく、かなり大きなバッチ(> 1000行)で更新されます。または、まったく更新されない。
- データはDBに追加されるが、変更されない。
- 読み取りの場合、非常に多くの行がDBから抽出されるが、一部の列のみ。
- テーブルは「幅が広く」、多数の列が含まれる。
- クエリは比較的まれ(通常、サーバーあたり毎秒数百あるいはそれ以下の数のクエリ)。
- 単純なクエリでは、約50ミリ秒の遅延が容認される。
- 列の値はかなり小さく、数値や短い文字列(たとえば、URLごとに60バイト)。
- 単一のクエリを処理する場合、高いスループットが必要(サーバーあたり毎秒最大数十億行)。
- トランザクションは必要ない。
- データの一貫性の要件が低い。
- クエリごとに1つの大きなテーブルがある。 1つを除くすべてのテーブルは小さい。
- クエリ結果は、ソースデータよりも大幅に小さくなる。つまり、データはフィルター処理または集計されるため、結果は単一サーバーのRAMに収まる。

OLAPシナリオは、他の一般的なシナリオ(OLTPやKey-Valueアクセスなど)とは非常に異なることが容易にわかります。 したがって、まともなパフォーマンスを得るには、OLTPまたはKey-Value DBを使用して分析クエリを処理しようとするのは無意味です。 たとえば、分析にMongoDBまたはRedisを使用しようとすると、OLAPデータベースに比べてパフォーマンスが非常に低下します。

## OLAPシナリオで列指向データベースがよりよく機能する理由

列指向データベースは、OLAPシナリオにより適しています。ほとんどのクエリの処理が少なくとも100倍高速です。 理由を以下に詳しく説明しますが、その根拠は視覚的に簡単に説明できます:

**行指向DBMS**

![Row-oriented](images/row_oriented.gif#)

**列指向DBMS**

![Column-oriented](images/column_oriented.gif#)

違いがわかりましたか?

### Input/output

1. 分析クエリでは、少数のテーブル列のみを読み取る必要があります。列指向のデータベースでは、必要なデータのみを読み取ることができます。たとえば、100のうち5つの列が必要な場合、I/Oが20倍削減されることが期待できます。
2. データはパケットで読み取られるため、圧縮が容易です。列のデータも圧縮が簡単です。これにより、I/Oボリュームがさらに削減されます。
3. I/Oの削減により、より多くのデータがシステムキャッシュに収まります。

たとえば、「各広告プラットフォームのレコード数をカウントする」クエリでは、1つの「広告プラットフォームID」列を読み取る必要がありますが、これは非圧縮では1バイトの領域を要します。トラフィックのほとんどが広告プラットフォームからのものではない場合、この列は少なくとも10倍の圧縮が期待できます。高速な圧縮アルゴリズムを使用すれば、1秒あたり少なくとも非圧縮データに換算して数ギガバイトの速度でデータを展開できます。つまり、このクエリは、単一のサーバーで1秒あたり約数十億行の速度で処理できます。この速度はまさに実際に達成されます。

<details markdown="1"><summary>Example</summary>
```
$ clickhouse-client
ClickHouse client version 0.0.52053.
Connecting to localhost:9000.
Connected to ClickHouse server version 0.0.52053.

:) SELECT CounterID, count() FROM hits GROUP BY CounterID ORDER BY count() DESC LIMIT 20

SELECT
CounterID,
count()
FROM hits
GROUP BY CounterID
ORDER BY count() DESC
LIMIT 20

┌─CounterID─┬──count()─┐
│ 114208 │ 56057344 │
│ 115080 │ 51619590 │
│ 3228 │ 44658301 │
│ 38230 │ 42045932 │
│ 145263 │ 42042158 │
│ 91244 │ 38297270 │
│ 154139 │ 26647572 │
│ 150748 │ 24112755 │
│ 242232 │ 21302571 │
│ 338158 │ 13507087 │
│ 62180 │ 12229491 │
│ 82264 │ 12187441 │
│ 232261 │ 12148031 │
│ 146272 │ 11438516 │
│ 168777 │ 11403636 │
│ 4120072 │ 11227824 │
│ 10938808 │ 10519739 │
│ 74088 │ 9047015 │
│ 115079 │ 8837972 │
│ 337234 │ 8205961 │
└───────────┴──────────┘

20 rows in set. Elapsed: 0.153 sec. Processed 1.00 billion rows, 4.00 GB (6.53 billion rows/s., 26.10 GB/s.)

:)
```

</details>

### CPU

クエリを実行するには大量の行を処理する必要があるため、個別の行ではなくベクター全体のすべての操作をディスパッチするか、ディスパッチコストがほとんどないようにクエリエンジンを実装すると効率的です。 適切なディスクサブシステムでこれを行わないと、クエリインタープリターが必然的にCPUを失速させます。
データを列に格納し、可能な場合は列ごとに処理することは理にかなっています。

これを行うには2つの方法があります:

1. ベクトルエンジン。 すべての操作は、個別の値ではなく、ベクトルに対して記述されます。 これは、オペレーションを頻繁に呼び出す必要がなく、ディスパッチコストが無視できることを意味します。 操作コードには、最適化された内部サイクルが含まれています。

2. コード生成。 クエリ用に生成されたコードには、すべての間接的な呼び出しが含まれています。

これは、単純なクエリを実行する場合には意味がないため、「通常の」データベースでは実行されません。 ただし、例外があります。 たとえば、MemSQLはコード生成を使用して、SQLクエリを処理する際の遅延を減らします。 (比較のために、分析DBMSではレイテンシではなくスループットの最適化が必要です。)

CPU効率のために、クエリ言語は宣言型(SQLまたはMDX)、または少なくともベクトル(J、K)でなければなりません。 クエリには、最適化を可能にする暗黙的なループのみを含める必要があります。

[Original article](https://clickhouse.yandex/docs/ja/) <!--hide-->