Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

CloudNative Days Tokyo 2022 -リアルタイム分析サービスをクラウト...

PingCAP-Japan
November 22, 2022

CloudNative Days Tokyo 2022 -リアルタイム分析サービスをクラウドネイティブDBで作るとこうなる

このスライドでは、OSS Insight (50億を超えるGitHubのイベントデータを分析)というサービスの裏側で使われている技術のキモであるHTAPデータベース「TiDB」の役割と、さらにTiDBの機能の全てをクラウド上で利用できるフルマネージドサービスTiDB Cloudの裏側について解説します。

参考リンク:
アーカイブ動画 https://youtu.be/YlW9kfI8pi4
OSS Insight https://ossinsight.io/
HTAPとは? https://pingcap.co.jp/blog/technical-paths-to-htap-greenplum-and-tidb-as-examples/
TiDB Cloud https://docs.pingcap.com/ja/tidbcloud/

PingCAP-Japan

November 22, 2022
Tweet

More Decks by PingCAP-Japan

Other Decks in Technology

Transcript

  1. PingCAPの自己紹介
 - NewSQLデータベース TiDBを継続的に開発
 - 2015年設立後、TiDBを開発し毎年メジャーアップデートを実施
 - CNCFに寄贈し、現在Graduatedステータス
 - フルマネージド型DBサービス「TiDB

    Cloud」の展開も強化中
 
 - ワールドワイドでビジネス展開
 - 2021年4月に日本支社設立
 - MySQL開発MgrのSanny Bains等も入社
 - 元日本マイクロソフト社長 平野拓也がアドバイザーとして参画
 Sunny Bains
 ex. InnoDB R&D Mgr 
 平野 拓也氏
 ex. 日本マイクロソフト社長 

  2. 利用データとデータストアの要件
 GitHubデータを調達 (データストアに対する)要件 GitHub上のイベントデータをグラフィカルに表示させるために
 ・アーカイブデータ - GHarchive(1時間ごとに更新) - 46億レコード(現在は50億レコード) ・リアルタイムデータ

    - GitHubイベントAPI - 平均30万レコード/時間 ①スケーラビリティ   ⇒データは増え続ける ②複雑な分析クエリ   ⇒色んな条件でグラフ化したい ③更新がまあまあある   ⇒リアルタイムデータの情報 ④セカンダリインデックス   ⇒ユーザーIDとレポジトリIDの分析が必要
  3. アプローチと課題
 1つのDBで全てをかなえることは難しい RDB (OLTP) RDB (OLAP) NoSQL Hadoop +色々 ①スケーラビリティ

    △ △ 〇 〇 ②複雑な分析クエリ △ 〇 x 〇~△ ③更新がまあまあある 〇 △ 〇 △ ④セカンダリインデックス 〇 〇 〇 or x 〇
  4. ①NewSQLでシャーディング不要に
 RDB (ex. MySQL) NoSQL (ex. Cassandra) New SQL (ex.

    TiDB) CAPの考え方 CA AP CP+HA クエリ SQL API, SQL(CQL) SQL  - トランザクション 〇 X 〇  - JOIN 〇 X 〇 Readスケーラビリティ 〇 リードレプリカ テーブル再設計 ◎ 分散アーキテクチャ ◎ 分散アーキテクチャ テーブル再設計不要 Writeスケーラビリティ △ Writerは単一ボトルネック (要シャーディング) ◎ 分散アーキテクチャ ◎ 分散アーキテクチャ (大きい1テーブル対応可) - NewSQL = 分散アーキテクチャによるスケーラビリティ+ACIDトランザクション
  ⇒シャーディングに頼らないRDB+スケーラビリティの直接的回答
 - 有名プロトコルを互換しているので、RDBのスキルセットを活かせる

  5. ②HTAPでOLTP,OLAPを1つのDBで実現
 HTAPの実装は、メモリ型・ストア型色々ある TiDB AlloyDB プロトコル MySQL PostgreSQL Scalability Read, Write

    (NewSQL) Read マルチクラウド AWS, GCP(, On-Premise) GCP HTAP実装 ストア (TiFlashにより大容量のカラム化が可能) メモリ内 カラムデータクエリエンジン MPP シングルノード データ容量が増えるほどストア型・ MPP型が有利
  6. シンプル化できる?(再掲)
 更新用にRDBをシャーディングして、ETLパイプラインを構築し、DWHに同期 ①NewSQLでシャーディング不要に - Spanner - TiDB - cockroachDB -

    YugabyteDB ②HTAPでOLTP,OLAPを1つのDBで実現 - AlloyDB - SingleStore - TiDB - Snowflake RDB (OLTP) RDB (OLAP) NoSQL Hadoop +色々 NewSQL NewSQL &HTAP ①スケーラビリティ △ △ 〇 〇 〇 〇 ②複雑な分析クエリ △ 〇 x 〇~△ △ 〇 ③更新がまあまあある 〇 △ 〇 △ 〇 〇 ④セカンダリインデックス 〇 〇 〇 or x 〇 〇 〇
  7. 2つを満たしてくれたTiDB
 NewSQL TiDBは、更新・参照業務と分析業務を1アーキテクチャで実現。 TiDBは通常のDBと異なり、2つのエンジンを搭載し、あらゆる業務を1つのプラットフォームで実施可能。 また、全てのコンポーネントがリニアにオンラインスケールアウト /インが可能 アプリケーション TiKV TiKV TiKV

    TiKV TiFlash TiFlash TiFlash TiFlash 更新・参照用ストレージエンジン … TiKV TiKV TiKV TiKV TiFlash TiFlash PD PD PD TiFlash TiFlash 更新、参照 分析用ストレージエンジン データ同期 分析処理 … 全体管理 TiDB TiDB … TiDB ・更新処理か分析処理かを TiDBで自動判別 ・適切なエンジンで処理を実施 クエリ処理コンポーネント Row-Base Store Column-Base Store
  8. フルマネージド(TiDB Cloud)を活用
 ソフトウェアの運用ナレッジは不要。 更にMySQLのスキルセットを活かせるのがうれしい - お客様専用のVPC、Compute 
 - デフォルトでマルチAZ構成 


    - 障害・メンテナンス対応は全てPingCAPが実 施
 - VPC Peering, Private Link, Public IP経由で 接続
 - 専用WebコンソールやAPIで操作 

  9. 活用デモ①:スケールアウト(&MySQL互換)
 NewSQL TiDBは、更新・参照業務と分析業務を1アーキテクチャで実現。 TiDBは通常のDBと異なり、2つのエンジンを搭載し、あらゆる業務を1つのプラットフォームで実施可能。 また、全てのコンポーネントがリニアにオンラインスケールアウト /インが可能 アプリケーション TiKV TiKV TiKV

    TiKV TiFlash TiFlash TiFlash TiFlash 更新・参照用ストレージエンジン … TiKV TiKV TiKV TiKV TiFlash TiFlash PD PD PD TiFlash TiFlash 更新、参照 分析用ストレージエンジン データ同期 分析処理 … 全体管理 TiDB TiDB … TiDB ・更新処理か分析処理かを TiDBで自動判別 ・適切なエンジンで処理を実施 クエリ処理コンポーネント Row-Base Store Column-Base Store
  10. 活用デモ②:カラムストア(TiFlash) SELECT l_orderkey, SUM( l_extendedprice * (1 - l_discount) )

    AS revenue, o_orderdate, o_shippriority FROM customer, orders, lineitem WHERE c_mktsegment = 'BUILDING' AND c_custkey = o_custkey AND l_orderkey = o_orderkey AND o_orderdate < DATE '1996-01-01' AND l_shipdate > DATE '1996-02-01' GROUP BY l_orderkey, o_orderdate, o_shippriority ORDER BY revenue DESC, o_orderdate limit 10; ①データ作成 (TPCH - Done)
 ②クエリを流す (TiKVで処理)
 ③TiFlash適用 (テーブル単位で適用)
 ④クエリを流す (TiFlashで処理)
 

  11. OSS insightのクエリを流す ①レコード数カウント&リアルタイムで同期している事を確認
   select count(*) from github_events; 
 ②条件を設定してクエリかける
   select

    count(*) from github_events where actor_login = '??????'; 
 ③OSS insightで使われているクエリを試す
   https://ossinsight.io/blog/explore-deep-in-4.6-billion-github-events/