06/24/2022スポンサードリンクどうも、AWS勉強中のとがみんです。改竄がされていないことを証明したいデータを管理するために、台帳データベースを実際に使っていくにあたって、台帳に保存されたデータを集計したいと考えた時に、検索のパフォーマンスについて気になったので調べてみることにしました。QLDBのデータ構造と、SQLlikeに実行できるPartiQLについての整理とクエリ最適化について整理していきます。Ionというstruct型のオブジェクトです。そのオブジェクトがテーブルに挿入されます。Ionの具体例は以下のようなものです。[{name:"Programing",detail:"サービス開発をすること"},{name:"Aquarium",detail:"魚を眺めること"}]}QLDBドキュメントは「名前」と「値」のペアで構成され、struct型のオブジェクトは{}で表現されlist型は[]で表現されます。PartiQLQLDBに格納されたデータは、PartiQLというSQLを拡張したクエリ言語を活用してデータリソースへのアクセスを行うことができます。Storeや、JSON形式のNpSQLデータベース、CSVファイルなど、様々なデータソースに対して、同じ構文で問い合わせることができます。QLDBで管理されているIon構造のデータに対してもPartiQLというクエリ言語を活用してSQLライクにデータアクセスできます。documentsPartiQLとIon型のマッピングIonのstruct型は、SQLのタプル型と同等のものです。タプルとはリレーショナルデータベースにおいて、テーブルの行にあたるものです。QLDBに下記のデータ構造のドキュメントを挿入し、クエリとその実行結果について確認していきます。‘12345’SELECT文で挿入したドキュメントを確認しました。Ion型のJSONは上記のようなテーブルとして表現されます。Hobbyにリストとして要素が複数入っているので、その中身を参照してみます。‘12345’さらにリストの一つの要素の中の値を取得します。Ion型のデータとSQLライクなPartiQLがマッピングされます。QLDBは、オンライントランザクション処理ワークロードのニーズに対応することを目的としています。そのため、SQLのようなクエリ機能をサポートしているが、特定のクエリパターンに最適化されています。特定のクエリパターン以外だと、クエリはテーブル全体のスキャンを呼び出してしまい、クエリのレイテンシー、トランザクションのタイムアウト、同時実行による競合など、パフォーマンス上の問題が発生してしまいます。そのため最適なクエリパターンに沿ってクエリ実行することが推奨されています。オンライントランザクション処理:処理要求があるとホストコンピューターが即座に処理応答する方式。レイテンシー:要求されたリソースが目的値に到達するまでにかかるネットワーク時間。最適なクエリパターン例パフォーマンス上最適な検索を行うためには、カーディナリティが高いフィールドにインデックスを作成し、そのフィールド、またはドキュメントIDでフィルタリングすることが推奨されています。カーディナリティ:カラムに格納されているデータの種類がどのくらいあるのかをカーディナリティといい、データの種類が少ない場合はカーディナリティが低いといい、多い場合はカーディナリティが高いという。以下に具体例を整理しています。‘3Qv67yjXEwB9SjmvkuG6Cp’回避すべきクエリパターンパフォーマンスが問題になってしまうクエリパターンとしては、低カーディナリティでの検索や、検索条件をつけないクエリが挙げられます。パフォーマンスだけでなく、テーブル全体スキャンを呼び出してしまい、トランザクションタイムアウトや同時実行による競合を呼び出してしまうため、避ける必要があります。下記が推奨されないクエリのパターンです。history(Vehicle)まとめQLDBのデータ構造とPartiQLについて、また、クエリ実行に関して、最適化のためのクエリパターンや回避すべきクエリパターンについて整理しました。性能向上を目的とした研究をしていました。現在はFinTech系ベンチャー企業勤務。Boot」でWebAPIの作成。JSONの受信と送信を行うサンプル。行われる学習方法について。バッチ・ミニバッチ・オンライン学習。ニューラルネットワークの学習の仕組み。7【自由と哲学】一体自由とはどういう状態なのか。究極の自由とその考察。