Slide 1

Slide 1 text

JAWS DAYS 2020 2020 / 03 / 14 @_tutida_ / Fusic Co.,Ltd. サーバレスの新しいデータストアの選択肢 S3 Select の魅力

Slide 2

Slide 2 text

JAWS DAYS 2020 内田 大順(Uchida Tomoyuki) • GitHub : https://github.com/tutida • Twitter : @_tutida_ • Fusic Co.,Ltd. @福岡 • プリンシパルエンジニア • 主な業務:受託開発(AWS, PHP, JS) • 最近 • コロナビールを積極的に摂取中 • 猫飼いたい 2 自己紹介

Slide 3

Slide 3 text

JAWS DAYS 2020 S3 Select ご存知でしょうか? 3

Slide 4

Slide 4 text

JAWS DAYS 2020 4 S3 Select • 2018年4月にGA • S3バケット上の CSV, JSON, Parquet オブジェクトに、 SQLライクな条件文を使い、絞り込んだデータの取得が可能

Slide 5

Slide 5 text

JAWS DAYS 2020 下記のようなCSVファイルがS3にアップロードされている状態で 5 S3 Select no,name,gender,age,email 0,喜嶋 香織,男性,24,[email protected] 1,坂本 裕美子,男性,21,[email protected] 2,野村 加奈,女性,33,[email protected] 3,杉山 花子,男性,16,[email protected] 4,山本 陽子,女性,48,[email protected] 5,藤本 智也,女性,37,[email protected] 6,近藤 明美,男性,22,[email protected] 7,高橋 太一,男性,26,[email protected] 8,山本 さゆり,女性,41,[email protected] 9,藤本 千代,男性,22,[email protected] 10,鈴木 知実,男性,13,[email protected] 11,山口 聡太郎,女性,36,[email protected] 12,山口 治,女性,12,[email protected] ……

Slide 6

Slide 6 text

JAWS DAYS 2020 CSVから、「佐々木」で「男性」で「未成年」なデータを取得 6 S3 Select $ aws s3api select-object-content ¥ --bucket=example-s3-select ¥ --key=sample.csv ¥ --input-serialization '{"CSV":{"FileHeaderInfo": "USE", "QuoteEscapeCharacter":"¥¥"}}' ¥ --output-serialization '{"CSV":{"QuoteFields":"ALWAYS","QuoteEscapeCharacter":"¥¥"}}' ¥ --expression "SELECT * FROM s3object s WHERE s.name LIKE '%佐々木%' AND s.gender = '男性 ' AND s.age < '19'" ¥ --expression-type SQ output.txt $ cat output.txt "177","佐々木 裕太","男性","16","[email protected] “515”,“佐々木 拓真","男性","18","[email protected] "1133","佐々木 浩","男性","16","[email protected] "1869","佐々木 京助","男性","12","[email protected] "2235","佐々木 裕美子","男性","17","[email protected] "2572","佐々木 洋介","男性","10","[email protected] "2854","佐々木 美加子","男性","10","[email protected] "3176","佐々木 真綾","男性","12","[email protected] "3447","佐々木 裕美子","男性","15","[email protected] "3567","佐々木 太郎","男性","15","[email protected] "4098","佐々木 花子","男性","16","[email protected] "4377","佐々木 真綾","男性","11","[email protected] "4458","佐々木 裕美子","男性","13","[email protected]

Slide 7

Slide 7 text

JAWS DAYS 2020 CSVから、「佐々木」で「男性」で「未成年」なデータを取得 7 S3 Select $ aws s3api select-object-content ¥ --bucket=example-s3-select ¥ --key=sample.csv ¥ --input-serialization '{"CSV":{"FileHeaderInfo": "USE", "QuoteEscapeCharacter":"¥¥"}}' ¥ --output-serialization '{"CSV":{"QuoteFields":"ALWAYS","QuoteEscapeCharacter":"¥¥"}}' ¥ --expression "SELECT * FROM s3object s WHERE s.name LIKE '%佐々木%' AND s.gender = '男性 ' AND s.age < '19'" ¥ --expression-type SQ output.txt $ cat output.txt "177","佐々木 裕太","男性","16","[email protected] “515”,“佐々木 拓真","男性","18","[email protected] "1133","佐々木 浩","男性","16","[email protected] "1869","佐々木 京助","男性","12","[email protected] "2235","佐々木 裕美子","男性","17","[email protected] "2572","佐々木 洋介","男性","10","[email protected] "2854","佐々木 美加子","男性","10","[email protected] "3176","佐々木 真綾","男性","12","[email protected] "3447","佐々木 裕美子","男性","15","[email protected] "3567","佐々木 太郎","男性","15","[email protected] "4098","佐々木 花子","男性","16","[email protected] "4377","佐々木 真綾","男性","11","[email protected] "4458","佐々木 裕美子","男性","13","[email protected] … ファイル取得後にアプリ側で選別するのではなく 取得時に必要なデータのみを取得できる機能

Slide 8

Slide 8 text

JAWS DAYS 2020 • 単一ファイル(≒テーブル)のデータを取得 • SQLライクな条件文で絞り込みができる • 不特定多数のプロセス(Lambdaなど)からのアクセスに対応できる • データの耐久性はS3のため99.999999999% • バケット、IAMポリシーでアクセス制限可能 • オブジェクトデータはバージョニングで管理可能 8 S3 Select

Slide 9

Slide 9 text

JAWS DAYS 2020 • 単一ファイル(≒テーブル)のデータを取得 • SQLライクな条件文で絞り込みができる • 不特定多数のプロセス(Lambdaなど)からのアクセスに対応できる • データの耐久性はS3のため99.999999999% • バケット、IAMポリシーでアクセス制限可能 • オブジェクトデータはバージョニングで管理可能 9 S3 Select サーバレスのデータストアに 使えるんじゃない?

Slide 10

Slide 10 text

JAWS DAYS 2020 今回の内容 10

Slide 11

Slide 11 text

JAWS DAYS 2020 • サーバレスのデータストア • S3 Select とは • 使い方・サンプルコード • メジャーなデータストアとの比較 11 アジェンダ

Slide 12

Slide 12 text

JAWS DAYS 2020 • サーバレスのデータストア • S3 Select とは • 使い方・サンプルコード • メジャーなデータストアとの比較 12 アジェンダ サーバレスの新しいデータストアの選択肢になりえる S3 Select の可能性を探求!

Slide 13

Slide 13 text

JAWS DAYS 2020 • サーバレスのデータストア 13 アジェンダ

Slide 14

Slide 14 text

JAWS DAYS 2020 AWSでサーバレスアプリケーションと聞いたときに 最初に頭に思い浮かぶ構成 14 サーバレスのデータストア

Slide 15

Slide 15 text

JAWS DAYS 2020 • 代表的な構成 • API Gateway + Lambda + DynamoDB 15 サーバレスのデータストア

Slide 16

Slide 16 text

JAWS DAYS 2020 16 サーバレスのデータストア (個人的によくある)思考の流れ

Slide 17

Slide 17 text

JAWS DAYS 2020 • サーバレスなら、とりあえずDynamoDBかな 17 サーバレスのデータストア

Slide 18

Slide 18 text

JAWS DAYS 2020 • NoSQL型のデータストア • 容量:無制限 • エンドポイント:グローバル • スケーラビリティ:AutoScalingの設定が可能 • オンデマンドタイプにしておけばさらに楽 • メンテナンス:フリー • 検索性:ハッシュキーとインデックスによる検索のみ 18 DynamoDB

Slide 19

Slide 19 text

JAWS DAYS 2020 • NoSQL型のデータストア • 容量:無制限 • エンドポイント:グローバル • スケーラビリティ:AutoScalingの設定が可能 • オンデマンドタイプにしておけばさらに楽 • メンテナンス:フリー • 検索性:ハッシュキーとインデックスによる検索のみ 19 DynamoDB データ構造、キーとインデックスの設計が重要

Slide 20

Slide 20 text

JAWS DAYS 2020 • サーバレスなら、とりあえずDynamoDBかな (要件を整理すると、集計と柔軟な検索が必要) 20 サーバレスのデータストア

Slide 21

Slide 21 text

JAWS DAYS 2020 • サーバレスなら、とりあえずDynamoDBかな (要件を整理すると、集計と柔軟な検索が必要) • DynamoDBの設計が辛くなってくる • Scanしてアプリで選別・集計すればいいんだけど… 21 サーバレスのデータストア

Slide 22

Slide 22 text

JAWS DAYS 2020 • サーバレスなら、とりあえずDynamoDBかな (要件を整理すると、集計と柔軟な検索が必要) • DynamoDBの設計が辛くなってくる • Scanしてアプリで選別・集計すればいいんだけど… • 大好きなSQLが使いたくなってくる ← 22 サーバレスのデータストア

Slide 23

Slide 23 text

JAWS DAYS 2020 • RDB型のデータストア • 容量:最大16TB • エンドポイント:設定による。VPCには属する。 • 一般的に、Lambdaと組み合わせる場合は VPC Lambda を利用する • スケーラビリティ:AutoScalingはなし • メンテナンス:OS, エンジンのメンテナンスあり • 検索性:SQLによる柔軟な検索が可能 23 RDS

Slide 24

Slide 24 text

JAWS DAYS 2020 • RDB型のデータストア • 容量:最大16TB • エンドポイント:設定による。VPCには属する。 • 一般的に、Lambdaと組み合わせる場合は VPC Lambda を利用する • スケーラビリティ:AutoScalingはなし • メンテナンス:OS, エンジンのメンテナンスあり • 検索性:SQLによる柔軟な検索が可能 24 RDS 様々なアップデートにより、Lambdaとの組み合わせが アンチパターンではなくなってきた

Slide 25

Slide 25 text

JAWS DAYS 2020 • サーバレスなら、とりあえずDynamoDBかな (要件を整理すると、集計と柔軟な検索が必要) • DynamoDBの設計が辛くなってくる • Scanしてアプリで選別・集計すればいいんだけど… • 大好きなSQLが使いたくなってくる ← • もういっそのことRDSにするか • Aurora Serverless や RDS Proxy もでたし • VPC Lambdaの起動時間も改善されたし 25 サーバレスのデータストア

Slide 26

Slide 26 text

JAWS DAYS 2020 • サーバレスなら、とりあえずDynamoDBかな (要件を整理すると、集計と柔軟な検索が必要) • DynamoDBの設計が辛くなってくる • Scanしてアプリで選別・集計すればいいんだけど… • 大好きなSQLが使いたくなってくる ← • もういっそのことRDSにするか • Aurora Serverless や RDS Proxy もでたし • VPC Lambdaの起動時間も改善されたし • でも、料金はあがるし、オーバースペック感ある… VPCのことも考えたくない… 26 サーバレスのデータストア

Slide 27

Slide 27 text

JAWS DAYS 2020 27 サーバレスのデータストア 扱うデータはそんなに多くない ≒ 1テーブルで足りる SQLで検索や集計がしたい NoSQLの設計や VPCの制限と考えたくない

Slide 28

Slide 28 text

JAWS DAYS 2020 28 サーバレスのデータストア そうだ! S3 Select を使ってみよう!

Slide 29

Slide 29 text

JAWS DAYS 2020 • S3 Select とは 29 アジェンダ

Slide 30

Slide 30 text

JAWS DAYS 2020 30 S3 Select とは • 2018年4月にGA • S3バケット上の CSV, JSON, Parquet オブジェクトに、 SQLライクな条件文を使い、絞り込んだデータの取得が可能

Slide 31

Slide 31 text

JAWS DAYS 2020 31 S3 Select とは • S3 Select できるファイル形式 • CSV : ヘッダーあり/なしどちらでも • JSON : JSONドキュメント、JSON Lines • Parquest : Haloopで使用する列指向フォーマット • 圧縮している状態でも利用可能 • GZIP : CSV, JSON • BZIP2 : CSV, JSON • 料金(東京) • SELECTのリクエスト : $0.0047/1000件 • SELECTで取得したデータ : $0.0008/GB • SELECTでスキャンしたデータ : $0.00225/GB

Slide 32

Slide 32 text

JAWS DAYS 2020 32 S3 Select とは • S3 Select できるファイル形式 • CSV : ヘッダーあり/なしどちらでも • JSON : JSONドキュメント、JSON Lines • Parquest : Haloopで使用する列指向フォーマット • 圧縮している状態でも利用可能 • GZIP : CSV, JSON • BZIP2 : CSV, JSON • 料金(東京) • SELECTのリクエスト : $0.0047/1000件 • SELECTで取得したデータ : $0.0008/GB • SELECTでスキャンしたデータ : $0.00225/GB 安い

Slide 33

Slide 33 text

JAWS DAYS 2020 • 使い方・サンプルコード 33 アジェンダ

Slide 34

Slide 34 text

JAWS DAYS 2020 対応しているファイル形式のオブジェクトをS3にアップロード 34 使い方・サンプルコード no,name,gender,age,email 0,喜嶋 香織,男性,24,[email protected] 1,坂本 裕美子,男性,21,[email protected] 2,野村 加奈,女性,33,[email protected] 3,杉山 花子,男性,16,[email protected] 4,山本 陽子,女性,48,[email protected] 5,藤本 智也,女性,37,[email protected] 6,近藤 明美,男性,22,[email protected] 7,高橋 太一,男性,26,[email protected] 8,山本 さゆり,女性,41,[email protected] 9,藤本 千代,男性,22,[email protected] 10,鈴木 知実,男性,13,[email protected] 11,山口 聡太郎,女性,36,[email protected] 12,山口 治,女性,12,[email protected] ……

Slide 35

Slide 35 text

JAWS DAYS 2020 AWSコンソールで① 対象オブジェクトの画面で “S3 Select” を選択 35 使い方・サンプルコード

Slide 36

Slide 36 text

JAWS DAYS 2020 AWSコンソールで② 各オプションを設定し、画面上でSQLの実行と結果の確認が可能 36 使い方・サンプルコード

Slide 37

Slide 37 text

JAWS DAYS 2020 AWS CLIで(CSVファイルの場合) https://docs.aws.amazon.com/cli/latest/reference/s3api/select-object-content.html 37 使い方・サンプルコード $ aws s3api select-object-content ¥ --bucket=example-s3-select ¥ --key=sample.csv ¥ --input-serialization '{"CSV":{"FileHeaderInfo": "USE", "QuoteEscapeCharacter":"¥¥"}}' ¥ --output-serialization '{"CSV":{"QuoteFields":"ALWAYS","QuoteEscapeCharacter":"¥¥"}}' ¥ --expression "SELECT * FROM s3object s WHERE s.name LIKE '%佐々木%' AND s.gender = '男性 ' AND s.age < '19'" ¥ --expression-type SQ output.txt $ cat output.txt "177","佐々木 裕太","男性","16","[email protected] “515”,“佐々木 拓真","男性","18","[email protected] "1133","佐々木 浩","男性","16","[email protected] "1869","佐々木 京助","男性","12","[email protected] "2235","佐々木 裕美子","男性","17","[email protected] "2572","佐々木 洋介","男性","10","[email protected] "2854","佐々木 美加子","男性","10","[email protected] "3176","佐々木 真綾","男性","12","[email protected] "3447","佐々木 裕美子","男性","15","[email protected] "3567","佐々木 太郎","男性","15","[email protected] "4098","佐々木 花子","男性","16","[email protected] "4377","佐々木 真綾","男性","11","[email protected] "4458","佐々木 裕美子","男性","13","[email protected]

Slide 38

Slide 38 text

JAWS DAYS 2020 AWD-SDK for Javascript で(CSVファイルの場合) https://aws.amazon.com/jp/blogs/developer/introducing-support-for-amazon-s3- select-in-the-aws-sdk-for-javascript/ 38 使い方・サンプルコード const {S3} = require('aws-sdk'); const s3 = new S3({region: 'ap-northeast-1'}); const params = { Bucket: "example-s3-select", Key: "sample.csv", ExpressionType: 'SQL', Expression: sql, InputSerialization: {"CSV":{"FileHeaderInfo": "USE", "QuoteEscapeCharacter":"¥¥"}}, OutputSerialization: {"CSV":{"QuoteFields":"ALWAYS","QuoteEscapeCharacter":"¥¥"}} }; s3.selectObjectContent(params, (err, data) => { const eventStream = data.Payload; eventStream.on('data', (event) => { if (event.Records) { process.stdout.write(event.Records.Payload.toString()); } }); });

Slide 39

Slide 39 text

JAWS DAYS 2020 https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/s3-glacier-select-sql-reference.html • 使える構文 / 関数 • 基本 • SELECT, FROM, WHERE, LIMIT • ORDER BY, OFFSET は使えない • 演算子 • 論理演算子 : AND, NOT, OR • 比較演算子 : <, >, <=, >=, =, <>, !=, BETWEEN(a, b), IN(a, b, c) • パターンマッチング演算子 : LIKE, _(任意の一文字), %(任意の一連の文字列) • 単一演算子 : IS NULL, IS NOT NULL • 算術演算子 : +, -, *, % • 集計関数 • AVG, COUNT, MAX, MIN, SUM • 条件関数 • COALESCE, NULLIF • 変換関数 • CAST • 日付関数 • DATE_ADD, DATE_DIFF, EXTRACT, TO_STRING, TO_TIMESTAMP, UTC_NOW • 文字列関数 • CHAR_LENGTH, LOWER, UPPER, SUBSTRING, TRIM 39 使い方・サンプルコード

Slide 40

Slide 40 text

JAWS DAYS 2020 https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/s3-glacier-select-sql-reference.html • 使える構文 / 関数 • 基本 • SELECT, FROM, WHERE, LIMIT • ORDER BY, OFFSET は使えない • 演算子 • 論理演算子 : AND, NOT, OR • 比較演算子 : <, >, <=, >=, =, <>, !=, BETWEEN(a, b), IN(a, b, c) • パターンマッチング演算子 : LIKE, _(任意の一文字), %(任意の一連の文字列) • 単一演算子 : IS NULL, IS NOT NULL • 算術演算子 : +, -, *, % • 集計関数 • AVG, COUNT, MAX, MIN, SUM • 条件関数 • COALESCE, NULLIF • 変換関数 • CAST • 日付関数 • DATE_ADD, DATE_DIFF, EXTRACT, TO_STRING, TO_TIMESTAMP, UTC_NOW • 文字列関数 • CHAR_LENGTH, LOWER, UPPER, SUBSTRING, TRIM 40 使い方・サンプルコード メジャーなSQLの関数がほとんど利用可能!

Slide 41

Slide 41 text

JAWS DAYS 2020 • メジャーなデータストアとの比較 41 アジェンダ

Slide 42

Slide 42 text

JAWS DAYS 2020 • 比較対象 • DynamoDB • RDS • S3 Select • 比較項目 • メンテナンス • スケーラビリティ • 検索性 • 整合性 • 料金 • データ更新 • データ取得 42 メジャーなデータストアとの比較

Slide 43

Slide 43 text

JAWS DAYS 2020 • メンテナンス • DynamoDB • メンテナンスフリー • RDS • OSやエンジンのメンテナンスが発生 • S3 Select • メンテナンスフリー • S3にファイルを置いているだけ 43 メジャーなデータストアとの比較 項目 DynamoDB RDS S3 Select メンテナンス ◎ △ ◎

Slide 44

Slide 44 text

JAWS DAYS 2020 • スケーラビリティ • DynamoDB • プロビジョニング : AutoScalingを事前に設定可能 • オンデマンド : 設定しなくても自動でスケール • RDS • スケールアップは可能 • 負荷に応じたスケールアウトはできない • S3 Select • そもそもスケーラビリティという概念がない 44 メジャーなデータストアとの比較 項目 DynamoDB RDS S3 Select スケーラビリティ ◎ △ -

Slide 45

Slide 45 text

JAWS DAYS 2020 • 検索性 • DynamoDB • キーとインデックスによる検索のみ • 集計は不可 • RDS • SQLによる柔軟な検索・集計が可能 • 複数のテーブルを結合した検索・集計が可能 • S3 Select • SQLによる柔軟な検索・集計が可能 • 複数のテーブルを結合した検索・集計が不可 45 メジャーなデータストアとの比較 項目 DynamoDB RDS S3 Select 検索性 △ ◎ ○

Slide 46

Slide 46 text

JAWS DAYS 2020 • 整合性 • DynamoDB • 結果整合性 • オプションで「強い整合性」も選択できる • RDS • 強力な整合性 • S3 Select • 結果整合性 46 メジャーなデータストアとの比較 項目 DynamoDB RDS S3 Select 整合性 結果整合性 強い整合性 結果整合性

Slide 47

Slide 47 text

JAWS DAYS 2020 • 料金 • DynamoDB • キャパシティの設定次第 : 計算難しい… • 比較的ローコスト • RDS • インスタンスタイプ・起動時間 次第 • DynamoDB, S3 と比べるとコスト高 • S3 Select • アップロードしているファイルの容量とGET時の料金 • ローコスト 47 メジャーなデータストアとの比較 項目 DynamoDB RDS S3 Select 料金 ○ △ ◎

Slide 48

Slide 48 text

JAWS DAYS 2020 • データ更新 • DynamoDB • トランザクションあり • キー指定で単一項目の追加・更新可能 • RDS • トランザクションあり • SQLによる柔軟なデータ操作が可能 • S3 Select • データ操作にはファイルを置き換える必要がある • 不特定多数のプロセスからの更新は向いてない 48 メジャーなデータストアとの比較 項目 DynamoDB RDS S3 Select データ更新 ○ ◎ △

Slide 49

Slide 49 text

JAWS DAYS 2020 • データ取得 : 前提 • 検証内容 • 取得元・計測 : ローカルPC • データ : 1万行のレコード(ファイル) • DynamoDB : オンデマンドタイプ ハッシュキーテーブル • RDS : db.t3.micro PostgreSQL • S3 : オブジェクトサイズ 522KB • 取得方法 : AWS SDK for Javascript • 取得内容 • 指定の1件 • 全件取得 • 範囲選択による10件の取得(DynamoDBは除く) • 集計(DynamoDBは除く) 49 メジャーなデータストアとの比較

Slide 50

Slide 50 text

JAWS DAYS 2020 • データ取得 : 前提 • 項目ごとの計測方法 • 5回の実行結果の中央値を最終結果とする • 実行時間の計測方法 • 取得関数の実行前後に hrtime で計測 50 メジャーなデータストアとの比較 (async () => { const hrstart = process.hrtime(); // -------------------------------- // ここで実行 const result = await s3Select(); // -------------------------------- hrend = process.hrtime(hrstart) console.info('%ds %dms', hrend[0], hrend[1] / 1000000) })();

Slide 51

Slide 51 text

JAWS DAYS 2020 • 指定の1件 • DynamoDB • 実行内容 : get • 取得速度 : 150.810119ms • RDS • 実行内容 : SELECT * FROM example WHERE no = 1; • 取得速度 : 121.276729ms • S3 Select • 実行内容 : SELECT * FROM s3Object s WHERE no = 1 • 取得速度 : 249.055213ms • 全件取得 • DynamoDB • 実行内容 : scan • 取得速度 : 824.093342ms • RDS • 実行内容 : SELECT * FROM example; • 取得速度 : 292.399822ms • S3 Select • 実行内容 : SELECT * FROM s3Object s; • 取得速度 : 320.370613ms ※ オブジェクトサイズに依存 51 メジャーなデータストアとの比較

Slide 52

Slide 52 text

JAWS DAYS 2020 • 範囲選択による10件の取得 • RDS • 実行内容 : SELECT * FROM example WHERE age BETWEEN 10 AND 24 LIMIT 10; • 取得速度 : 122.471291ms • S3 Select • 実行内容 : SELECT * FROM s3object s WHERE s.age BETWEEN ‘20' AND ‘30' LIMIT 10 • 取得速度 : 275.446927ms • 集計 • RDS • 実行内容 : SELECT SUM(age) FROM example; • 取得速度 : 117.619842ms • S3 Select • 実行内容 : SELECT SUM(s.age) FROM s3object s; • 取得速度 : 243.328442ms 52 メジャーなデータストアとの比較

Slide 53

Slide 53 text

JAWS DAYS 2020 • データ取得:グラフ 53 メジャーなデータストアとの比較 0 100 200 300 400 500 600 700 800 900 集計処理 範囲選択 全件取得 指定の一件 データストア別 取得速度 DynamoDB RDS S3 Select

Slide 54

Slide 54 text

JAWS DAYS 2020 • データ取得 • DynamoDB • getは安定し、早く取得が可能 • scanはやはり速度が落ちる • RDS • 安定し、早い取得が可能 • 重いクエリ、多数のプロセスからアクセスがある場合は この限りではない • S3 Select • 一定の速度で安定して、取得可能、 • SELECT対象のオブジェクトサイズに依存する 54 メジャーなデータストアとの比較 項目 DynamoDB RDS S3 Select データ取得 ○ ◎ ○

Slide 55

Slide 55 text

JAWS DAYS 2020 55 メジャーなデータストアとの比較 項目 DynamoDB RDS S3 Select メンテナンス ◎ △ ◎ スケーラビリティ ◎ △ - 検索性 △ ◎ ○ 整合性 結果整合性 強い整合性 結果整合性 料金 ○ △ ◎ データ更新 ○ ◎ △ データ取得 ○ ◎ ○

Slide 56

Slide 56 text

JAWS DAYS 2020 56 メジャーなデータストアとの比較 項目 DynamoDB RDS S3 Select メンテナンス ◎ △ ◎ スケーラビリティ ◎ △ - 検索性 △ ◎ ○ 整合性 結果整合性 強い整合性 結果整合性 料金 ○ △ ◎ データ更新 ○ ◎ △ データ取得 ○ ◎ ○ S3 Select が向いている要件 ・強い整合性が必要ない ・単一のテーブルに対する柔軟な検索が必要 ・ローコストを求められる ・不特定多数のプロセスからデータを取得したい場合 ・データの更新は単一のプロセスからのみ更新する場合

Slide 57

Slide 57 text

JAWS DAYS 2020 まとめ 57

Slide 58

Slide 58 text

JAWS DAYS 2020 58 まとめ データストアとしての S3 Select の魅力 データストアとしての S3 Select の注意点 (単一オブジェクトに)SQLによる柔軟な検索が可能 不特定多数のプロセスからのアクセス(GET)に対応可能 バージョニングによる世代管理が可能 ローコスト 更新データの反映は結果整合性 不特定多数のプロセスからの更新には向いていない → データの更新にはファイルを置き換える必要があるため 複数オブジェクトのデータをJOINはできない ORDER BY, OFFSETは使えない

Slide 59

Slide 59 text

JAWS DAYS 2020 59 まとめ データストアの選択肢になりえる魅力を持つ S3 Select ・DynamoDBを利用すると発生する ・設計のツラさ ・検索性の低さ ・RDSを利用すると発生する ・VPCのことを考えたくない ・起動速度やコネクションなど考えたくない ・メンテナンスのことを考えたくない S3 Select がこれらの悩みを解決してくれるかも! 今後の選択肢の1つとして検討してみてください!