Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ペタバイト級の時系列データを低レイテンシー&高スループットで処理する GridDB

GridDB
December 14, 2023

ペタバイト級の時系列データを低レイテンシー&高スループットで処理する GridDB

GridDBは、IoTが生み出す膨大な時系列データをリアルタイムに処理するために開発されたデータベースエンジンで、時系列関数などを備えています。このセッションでは、GridDBの概要を紹介し、特に時系列関数の背後にある必要性とその重要性、他の時系列データベースとの比較を通じて、GridDBの時系列関数の概要とその利点、具体的な使用事例について説明します。

浜口 泰平

東芝デジタルソリューションズ株式会社
ソフトウェアシステム技術開発センター
スペシャリスト

GridDB

December 14, 2023
Tweet

More Decks by GridDB

Other Decks in Technology

Transcript

  1. © 2023 Toshiba Digital Solutions Corporation © 2023 Toshiba Digital

    Solutions Corporation ペタバイト級の時系列データを 低レイテンシー&高スループットで処理する GridDB 東芝デジタルソリューションズ株式会社 ソフトウェアシステム技術開発センター
  2. © 2023 Toshiba Digital Solutions Corporation 3 自己紹介 浜口 泰平(HAMAGUCHI

    Taihei) ・入社後、DBMSの研究開発に従事 ・自社製DBMSであるGridDBのSQL処理モジュールを開発
  3. © 2023 Toshiba Digital Solutions Corporation 6 GridDBの特徴 時系列 データ指向

    高頻度で大規模な時系 列データを効率よくリアル タイム処理する時系列 データ指向 高い信頼性と 柔軟な拡張性 障害の発生時やサーバ 増設においてもノンストッ プ運用を実現する高い信 頼性と柔軟な拡張性 ペタバイト級の 高い処理能力 ペタバイト規模のデータを 扱うためにさまざまな工夫 を組み込み、高い処理能 力を実現 開発の容易性 NoSQLインターフェースだ けではなく、SQLインター フェースを用意し、開発の 俊敏性と使いやすさを実 現
  4. © 2023 Toshiba Digital Solutions Corporation 7 時系列データ指向モデル キーバリュー型 (例:Redis)

    カラム指向型 (例:Cassandra) リレーション型 (例:RDBMS) ドキュメント指向型 (例:MongoDB) キーコンテナ型 GridDB キー 値 キー 値 キー 値 キー 値 キー 値 キー 値 キー 値 キー 値 キー 値 キー 値 値 値 値 値 値 値 値 値 値 値 値 値 値 値 値 値 キー ドキュメント キー ドキュメント キー ドキュメント キー ドキュメント キー ドキュメント キー キー キー テーブル テーブル GridDBはIoTデータ向けに拡張した独自のキーコンテナ型データモデル
  5. © 2023 Toshiba Digital Solutions Corporation 8 時刻 センサーA センサーB

    00:00:00 1.12 2.13 00:00:01 1.11 3.12 ・・・・ ・・・・ ・・・・ 機器1 時刻 センサーC センサーD センサーE 00:00:00 1.12 2.13 1.13 00:00:02 1.01 3.33 2.33 ・・・・ ・・・ ・・・・ ・・・・ 時刻 センサーF センサーG 00:00:00 1.12 2.13 00:00:01 1.11 3.12 ・・・・ ・・・・ ・・・・ 時刻 センサー センサー 00:00:00 0.12 1.13 00:00:01 1.11 3.12 ・・・・ ・・・・ ・・・・ 機器2 機器3 機器4 時系列データ指向モデル GridDBのキーコンテナ型はIoTデータを管理するのに最適 機器 1 機器 2 機器 3 機器 4 データソース 時刻 センサーA センサーB 00:00:00 1.12 2.13 00:00:01 1.11 3.12 ・・・・ ・・・・ ・・・・ 時刻 センサーC センサーD センサーE 00:00:00 1.12 2.13 1.13 00:00:02 1.01 3.33 2.33 ・・・・ ・・・ ・・・・ ・・・・ 時刻 センサーF センサーG 00:00:00 1.12 2.13 00:00:01 1.11 3.12 ・・・・ ・・・・ ・・・・ 時刻 センサー センサー 00:00:00 0.12 1.13 00:00:01 1.11 3.12 ・・・・ ・・・・ ・・・・ 対象データ毎に格納 • コンテナに対してデータ型を定義するスキーマ設定が可能 • ユニークなコンテナ名とロウキーで値を特定 • カラムのインデックス設定が可能 • コンテナ内のロウ単位でトランザクション操作が可能 • コンテナ単位で一貫性保証 モ デ リ ン グ
  6. © 2023 Toshiba Digital Solutions Corporation 9 ペタバイト級の高い処理能力 GridDBはCPUをフル回転で使用 イベント駆動エンジン

    クライアント クライアント 他サーバ 他サーバ GridDBサーバ CPU メモリ ディスク 1処理タスクを1スレッド に割り当てて、複数スレッ ド間でのリソース共有を 排除し、フルスピードで データ処理を実行 内部的な小さな単位 のタスクを組み合わせ て処理 ➜ タスク間の処理の受け 渡しのオーバヘッドが 発生 CPUコア/スレッド毎に専 有するメモリ、DBファイル を割当て排他処理、同 期待ちを排除 ブロックの読み書きサイズ を最適化し、I/O待ちを 削減 RDBMS クライアント クライアント 他サーバ 他サーバ 1処理 タスク 1スレッド
  7. © 2023 Toshiba Digital Solutions Corporation 10 ペタバイト級の高い処理能力 メモリを最大限有効活用する時系列データ配置技術 TDPA

    新しい 古い コンテナ設計:センサーごとにコンテナを作成. ア プ リ ケ ー シ ョ ン put/ multiPut Get/ multiGet 【データ検索】 センサーと時間を条件とし て検索すると、検索対象 のデータは局所的に配置 されているため、高速に検 索 【データ格納】 センサーデータは時刻 順に生成され、時刻 順に格納される TDPA:Time Series Data Placement Algorithm 複数センサーであって も、同じ時間のデータ は近接して配置・格納 される。
  8. © 2023 Toshiba Digital Solutions Corporation 11 高い信頼性と柔軟な拡張性 サーバ間でデータのコピーを保持しあう自動レプリケーションにより、 万一の障害時にも処理を継続可能

    サーバ2 バックアップデータ オリジナルデータ サーバ1 オリジナルデータ バックアップデータ サーバ3 バックアップデータ オリジナルデータ サーバ4 バックアップデータ オリジナルデータ RDBのようにHAクラスタシステムを組む必要はありません。 障害
  9. © 2023 Toshiba Digital Solutions Corporation 12 開発の俊敏性と使いやすさ NoSQLとSQLのデュアルインターフェースを提供 NoSQL

    インターフェース ⚫ 高速・高スループットな登録・検索・更新 が可能 ⚫ Java / C / Python / Go / Node.js クライアント SQL インターフェース ⚫ 複雑な検索が可能 ⚫ 標準化されたSQLなので、他ソフトウェア との連携が容易 ⚫ JDBC / ODBCドライバ GridDB クラスタ DB ノード DB ノード DB ノード NoSQL インターフェース SQLインターフェース BI/BA ETL 他のシステム 他のDBMS
  10. © 2023 Toshiba Digital Solutions Corporation 13 開発の俊敏性と使いやすさ GridDBならリアルタイム分析が可能に リアルタイム分析が可能に!

    GridDBの場合 POS データ 店舗 データ 気象 データ 人流 データ … … 収集データ 分析 GridDB 従来のデータ基盤 ※1 ODS (Operational Data Store):収集データを一時的に保持するデータベース ※2 ETL (Extract/Transform/Load):データの整形、統合を専門に行うツール ※3 DWH (Data Warehouse):情報を時系列に整理して保管するデータベース ODS※1 ETL※2 データ蓄積用DB 収集データ バッチによるデータ整形 データ分析用DB 分析 DWH※3 2つのデータベースを管理するのは面倒だ…。 リアルタイムに分析できないじゃないか⁉
  11. © 2023 Toshiba Digital Solutions Corporation 15 時系列データ 収集される時系列データ IoTデータ発生源

    データ収集 時系列データとは、時間情報(タイムスタンプ)を持った一連の値。 温度センサー、電圧センサーなど様々なIoTデータは時系列データ。
  12. © 2023 Toshiba Digital Solutions Corporation 16 データ蓄積・管理システム なぜ時系列集計機能が必要か? データ可視化・

    分析システム 収集、蓄積される現実のIoTデータにはノイズや欠損値が含まれる。 そのままではデータの傾向や特徴が掴みづらい。 IoTデータ発生源 データ収集 データ参照 SQL ノイズ データ欠損 時系列集計演算により、大量時系列データの分析が容易になる。 データベース
  13. © 2023 Toshiba Digital Solutions Corporation 17 データ蓄積・管理システム なぜ時系列集計機能が必要か? データ可視化・

    分析システム 収集、蓄積される現実のIoTデータにはノイズや欠損値が含まれる。 そのままではデータの傾向や特徴が掴みづらい。 IoTデータ発生源 データ収集 データ参照 【時系列集計】 ①集計演算:指定時間間隔毎に元データの 値集計(avg等)を行う ②補間演算:欠損値の補間指定を行う データベース ノイズ データ欠損 例えば、元データを 時系列集約し ノイズの影響を軽減 時系列集計 SQL
  14. © 2023 Toshiba Digital Solutions Corporation 18 テーブル例:時系列データ集計演算の説明に用いる例 センサーデータを記録する、2カラムの単純なテーブル カラム名

    型 説明 measurement_date_time TIMESTAMP 値が発生した日時 value DOUBLE 測定値 sensor_value_tableのテーブル定義 measurement_date_time value 2023-01-01T00:00:00 10 2023-01-01T00:00:10 30 2023-01-01T00:00:20 30 2023-01-01T00:00:30 50 2023-01-01T00:00:40 50 2023-01-01T00:00:50 70 … … 2023-01-02T00:00:00 5 2023-01-02T00:00:10 10 2023-01-02T00:00:20 15 2023-01-02T00:00:40 25 2023-01-02T00:00:50 30 sensor_value_tableのデータ例 欠損 10秒間隔のデータ sensor_value_tableのグラフ 欠損
  15. © 2023 Toshiba Digital Solutions Corporation 19 ①【集計演算】ノイズを軽減する 一定の時間間隔毎に時系列データを区切り、値集計(avg,min,max等)を行える 生データ(測定・収集時のノイズを含む)

    集計演算を行い、ノイズが軽減されたデータ ✓ 数値・日時データを扱う様々な集計関数を指定できる(合計、平均、最大・最小、 分散・標準偏差、中央値、…) ✓ 集計区間の範囲・長さに加え、開始時刻のタイムゾーンも指定できる 集計演算 バラツキが大きく傾向が見づらい 区間ごとに集約して全体の傾向を強調 元データ 集計で求めたデータ 一定時間ごとに元データを区切り、 含まれる値を集計して結果を求める
  16. © 2023 Toshiba Digital Solutions Corporation 20 ① 【集計演算】 SQL構文

    GridDBで拡張した以下の構文により、集計する日時範囲を指定 measurement_date_time value 2023-01-01T00:00:00 10 2023-01-01T00:00:10 30 2023-01-01T00:00:20 30 2023-01-01T00:00:30 50 2023-01-01T00:00:40 50 2023-01-01T00:00:50 70 measurement_date_time value 2023-01-01T00:00:00 20 2023-01-01T00:00:20 40 2023-01-01T00:00:40 60 SELECT measurement_date_time, avg(value) as value FROM sensor_value_table WHERE measurement_date_time BETWEEN TIMESTAMP('2023-01-01T:00:00:00Z') AND TIMESTAMP('2023-01-01T:00:01:00Z') GROUP BY RANGE measurement_date_time EVERY (20, SECOND) 【例】元データ(sensor_value_table)の値を、measurement_date_timeの日時を基準に 20秒間隔で区切り、それぞれの平均値を求めるSQL 20秒ごとの値に集計 GROUP BY RANGE <日時カラム> EVERY (<時区間の長さ(整数)>, <単位>) 集計演算
  17. © 2023 Toshiba Digital Solutions Corporation 21 ② 【補間演算】欠損値を補間する あるべき時刻のデータ欠損時には、その前後周辺の値を用いて補間値を求める。

    生データ(測定・収集時のデータ欠損がある) 補間演算を行い、周辺の値から欠損値を補間 補間演算 補間 欠損周辺のデータ傾向が見にくい 前後と連続するデータになり傾向が見やすい ✓ 補間方法を指定できる(線形補間、前の時刻のデータで補間、NULLで補間) 欠損
  18. © 2023 Toshiba Digital Solutions Corporation 22 ② 【補間演算】 SQL構文

    GridDBで拡張した以下の構文により、集計する日時範囲を指定 GROUP BY RANGE 日時カラム EVERY (整数,時刻単位) FILL (補間方法) measurement_date_time value 2023-01-02T00:00:00 5 2023-01-02T00:00:10 10 2023-01-02T00:00:20 15 (欠損) 2023-01-02T00:00:40 25 2023-01-02T00:00:50 30 measurement_date_time value 2023-01-02T00:00:00 5 2023-01-02T00:00:10 10 2023-01-02T00:00:20 15 2023-01-02T00:00:30 20 2023-01-02T00:00:40 25 2023-01-02T00:00:50 30 SELECT * FROM sensor_value_table WHERE measurement_data_time BETWEEN TIMESTAMP('2023-01-02T:00:00:00Z') AND TIMESTAMP('2023-01-02T:00:01:00Z') GROUP BY RANGE measurement_date_time EVERY (10, SECOND) FILL (LINEAR) 【例】元データ(sensor_value_table)の値を、measurement_date_timeの日時を基準にして、 10秒間隔の値を求め、欠損している場合は前後の値から線形補間した値を求めるSQL 補間 補間演算
  19. © 2023 Toshiba Digital Solutions Corporation 23 GridDB以外で同じ分析を行おうとすると? GridDBに比べて作業の手間、処理時間に課題あり 一般的な

    RDBMS 時系列DB DBMS 以外 SELECT * FROM sensor_value_table WHERE measurement_data_time BETWEEN TIMESTAMP('2023-01-02T:00:00:00Z') AND TIMESTAMP('2023-01-02T:00:01:00Z') GROUP BY RANGE measurement_date_time EVERY (10, SECOND) FILL (LINEAR) ✓ 1つのシンプルなSQL文で実行できる! ✓ インメモリで処理しきれない長期間のデータも一度に扱える! ウインドウ関数 で前後データを 参照する? 欠損値は OUTER JOINで 埋め合わせる? さらに他のテーブ ルとジョインして一 文で加工できる? 長期間のデータ も一括で処理 できる? 必要なデータを DBから取り出す 処理時間は? 時系列処理後に他 のテーブルとジョイン する場合もDB外で?
  20. © 2023 Toshiba Digital Solutions Corporation 24 GridDBの時系列分析アーキテクチャ 時刻範囲での絞り込み &

    並列パイプライン処理 SELECT * FROM sensor_value_table WHERE measurement_data_time BETWEEN TIMESTAMP('2023-01-02T:00:00:00Z') AND TIMESTAMP('2023-01-04T:00:01:00Z') GROUP BY RANGE measurement_date_time EVERY (10, SECOND) FILL (LINEAR) 1. 分散プラン生成 データ アクセス 2023- 01-02 データ アクセス 2023- 01-03 データ アクセス 2023- 01-04 データ加工 データ加工 ✓ 時刻範囲でデータアクセス対象 を大まかに絞り込み ✓ リソースを最大限活用できるよう、 分散化されたプランを生成 SQL実行結果 2023-01-01 2023-01-02 2023-01-03 2023-01-04 2023-01-05 2023-01-06 2023-01-07 2023-01-08 2023-01-09 2023-01-10 2. データアクセス イベント駆動エンジン(データアクセス用) ✓ データアクセス専用のイベント駆動エンジンにより、データ加工の負荷に左右されずに処理。 読み出しだけではなく、データ登録も妨げない ✓ 過去の時系列データが長期間に渡り蓄積されていても、加工に必要な時刻範囲のテーブル データ・索引データのみの読み出しで完結する (テーブル分割設定時) FROM sensor_value_table WHERE ~ 3. データ加工 一時領域 一時領域 一時領域 イベント駆動エンジン(データ加工用) パイプライン型データ転送 ✓ 分散プランで指示されたデータフローに従い、前工程よ りデータが小分けに届く。届き次第、処理を進める ✓ 演算の内容・データ規模によっては一時領域を使用。 メモリ容量を超える規模のデータも一括加工できる GROUP BY RANGE ~ GridDBサーバ
  21. © 2023 Toshiba Digital Solutions Corporation 25 【デメリット】 • 都度SQLで加工するため演算時間がかかる。

    まとめ: 時系列集計でできること IoTの生データには、測定・収集過程でノイズや欠損値が含まれる。利用時には加工が必要。 時系列集計はノイズや欠損値を除く加工が可能。→生データから直接可視化や分析可能。 【メリット】 • 単純なSQLで記述でき、事前の加工データ作成が不要 • 加工データの保存が不要でデータ量増大を避けられる • 常に最新のデータを参照できる
  22. © 2023 Toshiba Digital Solutions Corporation 27 時系列DBの比較(1/3) ― 基本情報

    GridDB InfluxDB TimescaleDB 初版リリース時期 2013年 2013年 2017年 最新版 5.4 3.0 2.7 実装言語 C++ Go C データ型 numerics, string, blob, geometry, bool, timestamp Numeric data and Strings numerics, strings, booleans, arrays, JSON blobs, geospatial dimensions, currencies, binary data, other complex data types API JDBC, ODBC, native Java/C/Python/Node.js/G o library, HTTP API HTTP API, JSON over UDP ADO.NET, JDBC, native C library, ODBC, streaming API for large objects 検索言語 SQL,TQL SQLライクのFluxQL(v1,v3) 独自言語のFlux(v2) SQL トランザクション 有り(コンテナ単位) 無し 有り
  23. © 2023 Toshiba Digital Solutions Corporation 28 時系列DBの比較(2/3) ― 全体・クラスタ構成・可用性

    GridDB InfluxDB TimescaleDB 全体 NoSQLエンジン上に分散SQL を実現(1プロセス内にクラスタ /SQL/NoSQL処理スレッド)。 SQLとNoSQLのデュアルイン ターフェースを提供。 クラスタ管理のための各種運用 監視ツール・Zabbix用テンプ レートを備える。 基本はHTTP API。 その上に多種のAPIを提供。 シンプルで使いやすい。 TICKスタックでデータ収集から 可視化まで周辺ツールが充実。 バックエンドはPostgreSQL。 SQLエンジン上に分散SQLを実 現。 PostgreSQLの資産(SQL、周 辺ツール等)が豊富。 クラスタ構成・ 可用性 P2Pとリーダ・フォロアのハイブリッ ド方式。 データノードとその他のノードとの 区別は無い。 少ないノード数で組める。 データ再配置技術によりスケー ルアウト性を備える。 メタノード、データノードによるリー ダ・フォロア方式。メタノードは3 個以上必要。 アクセスノード、データノードによ るリーダ・フォロア方式。アクセス ノードは単一障害点にならない ようにHA構成にする必要あり。
  24. © 2023 Toshiba Digital Solutions Corporation 29 時系列DBの比較 (3/3) ―

    登録・検索 GridDB InfluxDB TimescaleDB 登録 SQLとNoSQLのデュアルイン ターフェース。 特にNoSQL I/FのMultiPutで 高速バッチ処理。 インターバル(ハッシュ)パーティ ショニングで分割配置。 (InfluxDB)Lineプロトコル。 データ型の自動判別により measurementというテーブル の作成は不要だが、データ型が 限られる。 Retention Policyにて分割配 置。 テーブル生成後にハイパーテーブ ルなるものに変換して使う。 ハイパーテーブルに対しInsert。 ハイパーテーブルへの変換に従 い分割配置(デフォルト7日間 隔)。 検索 SQLとNoSQL用のクエリ。 GROUP BY RANGE句にて一 定時間間隔ごとの集計に対応。 ジョイン演算をサポート。 データ/タスク/パイプラインの3レ ベルの並列メカニズムで高速処 理。 SQLライクのFluxQL(v1,v3) と独自言語のFlux(v2)。 GroupBy time()にて一定時 間間隔毎の集計に対応。 4つのカテゴリ(集計演算関数、 選択関数、予測関数、テクニカ ル分析関数)で多くの時系列 関数を提供。 ジョイン演算なし。 SQL。 time_bucket()関数にて一定 時間間隔毎の集計に対応。 Hyperfunctionタイプやグルー プ別に多くの時系列関数を提 供。
  25. © 2023 Toshiba Digital Solutions Corporation 30 検索の例 (SQL拡張) SELECT

    time, avg(val) FROM table1 WHERE time >= TIMESTAMP('2023-01-01T00:00:00Z') AND time < TIMESTAMP('2023-01-01T01:00:00Z') GROUP BY RANGE (time) EVERY (1, MINUTE) (SQL拡張) SELECT time_bucket('1 minute', time) AS bucket, avg(val) row_avg FROM table1 WHERE time >= TIMESTAMPTZ '2023-01-01 00:00:00' AND time < TIMESTAMPTZ '2023-01-01 01:00:00' GROUP BY bucket • GridDB • TimescaleDB (FluxQL) SELECT mean(val) FROM table1 WHERE time >= '2023-01-01T00:00:00Z' AND time < '2023-01-01T01:00:00Z' GROUP BY TIME(1m) • InfluxDB (v1/v3) (Flux) from(bucket: "table1") |> range(start:2023-01-01T00:00:00Z, stop:2023-01-01T01:00:00Z) |> aggregateWindow(every: 1m, fn: mean) • InfluxDB (v2)
  26. © 2023 Toshiba Digital Solutions Corporation 31 GridDB製品版サイト • トップ

    – GridDBとは – 特長 – ユースケース、導入事例 • ラインアップ • リソース – ホワイトペーパ – マニュアル • ニュース&イベント http://griddb.com
  27. © 2023 Toshiba Digital Solutions Corporation 32 GridDB OSS版サイト •

    GridDBをGitHub上にソース公開(2016/2) • 目的 – ビッグデータ技術の普及促進 • 多くの人に知ってもらいたい、使ってみてもらいたい • いろんなニーズをつかみたい – 他のオープンソースソフトウェア、システムとの連携強化 • ライセンス – サーバはAGPL-3.0 – 各種開発言語のクライアント、OSSとのコネクタは Apache-2.0 https://github.com/griddb/ griddb github 検索
  28. © 2023 Toshiba Digital Solutions Corporation 33 デベロッパーズサイト • アプリケーション開発者向けのサイト

    • 様々なコンテンツを公開 – ホワイトペーパ – ブログ https://griddb.net/ griddb net 検索
  29. © 2023 Toshiba Digital Solutions Corporation 35 • GridDB 製品版サイト

    http://griddb.com • GridDB Cloud サイト http://cloud.griddb.com • GridDB デベロッパーズサイト https://griddb.net • GridDB GitHubサイト https://github.com/griddb • GridDB Twitter(日本語 / 英語) https://twitter.com/griddb_jp / https://twitter.com/GridDBCommunity • GridDB Facebook (日本語 / 英語) https://www.facebook.com/griddbjp / https://www.facebook.com/griddbcommunity/ • GridDB お問い合わせ 製品版:https://www.global.toshiba/jp/products-solutions/ai-iot/griddb/contact.html プログラミング関連: Stackoverflow (https://ja.stackoverflow.com/search?q=griddb) もしくはGitHubサイトの各リポジトリのIssueをご利用ください プログラミング関連以外: [email protected]をご利用ください 各種情報サイト