SlideShare ist ein Scribd-Unternehmen logo
1 von 21
Downloaden Sie, um offline zu lesen
Spanner に関する技術メモ
発表者:通りすがりの @enakai00
Disclaimer:
この記事は個人的なものです。ここで述べられていること
は私の個人的な意見に基づくものであり、私の雇用者に
は関係はありません。
Spannerのインフラデザイン
https://research.google.com/archive/spanner.html
全体構成
Spanserver ⇒ Bigtable に類似の Key-Valueストア
Spanserver は Bigtable の Tablet server に相当 ⇒ Tablet の実体は Colossus 上に存在
DC (Zone) 間で Tablet の内容をレプリケーション(Paxosベースのアルゴリズム)
spanserver
(Table A)
spanserver
(Table B)
spanserver
(Table C)
Zone 1
spanserver
(Table A)
spanserver
(Table B)
spanserver
(Table C)
Zone 2
spanserver
(Table A)
spanserver
(Table B)
spanserver
(Table C)
Zone 3
replica replica
Horizontal Consistency
VerticalConsistency
Spannerのチャレンジ
● 同一 Zone の spanserver 間のデータ整合性をどう確保するか?
● Zone 間のデータ整合性をどう確保するか?
ところで、Spanserver間のデータの整合性って何?
⇒ トランザクションの仕組みから
 整合性の意味を考えてみましょう。
トランザクションの動作
https://cloud.google.com/spanner/docs/transactions
ロックの種類
Shared Read Lock(共有ロック)
● 他のトランザクションからの書き込みを禁止
● 他のトランザクションからの読み込みは可能
● 他のトランザクションは同時に共有ロックを取得可能
Exclusive Write Lock(排他ロック)
● 他のトランザクションからの読み書きを禁止
● 他のトランザクションは同時にロックを取得できない
● 他のトランザクションが先に共有ロック/排他ロックを取っている場合は、排他ロックは
とれない。
リードライト・トランザクションにおけるロックの利用
AさんからBさんに50円送金するトランザクション
⇒ 外部からは時刻 t2 にすべての変更がまとめて行われたように見える
A : 100
B : 200
C : 1300
A : 100
B : 200
C : 1300
A : 50
B : 200
C : 1300
共有ロック
排他ロック
Read A = 100 Read B = 200
Write A = 50
Write B = 250
トランザクション開始
この時点では何も
書き込まれない
Commit
A : 50
B : 250
C : 1300
A : 100
B : 200
C : 1300
A : 50
B : 250
C : 1300
トランザクション中に読んだデータが
勝手に書き換えられることを防止
書き換え中の中途半端な状態が
読み取られることを防止
A : 100
B : 200
C : 1300
トランザクション終了
t1 t2
t2
書き込みデータには
Commit時の
タイムスタンプを付与
TNX B
TNX A と TNX B が平行に走る例
⇒ TNX B は時刻 t2 以前に開始しているが、そこは関係なくて、外部からは、
  TNX B の処理は時刻 t3 にすべてまとめて行われたように見える!!!!
 (トランザクション中に読んだデータはすべて共有ロックで守られているので、
  どの時刻に読んだと考えても同じ結果になる点に注意)
A : 100
TNX A
B : 200
C : 1300
A : 100
B : 200
C : 1300
共有ロック
排他ロック
Read A = 100 Read B = 200
Write A = 50
Write B = 250
Commit
A : 50
B : 250
C : 1300
t1 t2
A : 50
B : 250
C : 1300
Read C = 1300 Read B = 250 Write B = 350
Write C = 1200
A : 50
B : 350
C : 1200
Commit
A : 50
B : 350
C : 1200
t3
TNX A はデータ A を書き換える(t = t2)
TNX B はデータ B を書き換える(t = t3)
この時、さらに別のトランザクションが A と B の値を読み取ると何が見えべきか?
読み取りリクエストを発行した時刻を T として・・・
● 時刻 t1 < T < t2 ⇒ (A, B) = (100, 200)
● 時刻 t2 < T < t3 ⇒ (A, B) = (101, 200)
● 時刻 t3 < T ⇒ (A, B) = (101, 201)
内部的には、「時刻 T 以前のタイムスタンプの中で最新のタイムスタンプのデータ」を spanserver から
取り出すことでこれを実現
⇒ リードオンリー・トランザクションでは、ロックを取得する必要がない!
A : 100 A : 100 A : 101 A : 101
B : 201
A : 101
B : 201B : 200
A : 101
t2
B : 200B : 200
t2 t2
B : 200
t1 t1 t1
t1 t3t1 t1 t1 t1
タイムスタンプベースのトランザクションの課題
行Aと行Bを別々のSpanserverが担当していて、サーバー間で時刻
同期がとれていなくて、行Bにタイムスタンプ t3 を振った時に、間違っ
て t3 < t2 にしちゃったら・・・
だめじゃん!
⇒ Truetime APIで解決
(参考)
タイムスタンプを使用しない従来型のアプローチ
Table A Table B
RDB without read transaction
Write 1
Write 2
Read 1
Read 2
RDB with read transaction
using read-lock mechanism
Table A Table B
Write 1
Write 2
Read 1
read lock
lock release
リードオンリー・トランザクションでもリードロックが発生する
ので性能が上がらない。
NG
Table A Table B
Write 1
Write 2
Read
RDB with read transaction
using MVCC (multi version concurrency control)
Write 0
Transaction ID
0
1
2
get ID
read ID=0
read ID=0
トランザクションIDを一元管理する処理がボトルネックになる
Table A Table B
Write 1
Write 2
Read
Spanner's approach
Use timestamp as a transaction ID
Write 0 get current time
read time=0
read time=0
Spannerでは、トランザクションIDの代わりにタイムスタンプを使用す
ることで、ボトルネックを排除
time=0
time=1
time=2
よくわかった。
それでは、Zone間のデータの整合性って何???
⇒ 今回は省略。m(_ _)m
Truetime APIで t3 > t2 を保証する方法
https://research.google.com/archive/spanner-osdi2012.pptx
commit
start
Time range
t=0 t=2
Choose commit timestamp as latest possible time t2=X
Realtime
Time range
t=2 t=4
Write data at t(real) > t2 = X
t(real)=X
Truetime API
⇒ 信頼出来る時刻の範囲 (t_after, t_before) を返すAPI
commit
finish
上記の commit finish 以降、つまり、t(real) > t2 = 2 の瞬間に次のトランザクションの
commit start が発生したとすると、 t3 > t(real) > t2 が保証される
(commit start 〜 commit execute の間は、排他ロックが取得されているので、同じ行を含む他のトランザ
クションの commit start は発行されない。)
排他ロック
取得完了
Fluctuations of time drifts from time servers
(excerpt from the research paper)
Hardware maintenance
of two time servers
Network latency
improvement
Truetime APIの精度
Truetime APIが返す時刻 (t_after, t_before) の幅が大きいと commit 処理時の
待ち時間が長くなるので、できるだけ小さい幅で返すことが重要
Thanks!

Weitere ähnliche Inhalte

Was ist angesagt?

【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
Hibino Hisashi
 

Was ist angesagt? (20)

Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門  (マーケティングデータ分析基盤技術勉強会)Apache Airflow入門  (マーケティングデータ分析基盤技術勉強会)
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajpAt least onceってぶっちゃけ問題の先送りだったよね #kafkajp
At least onceってぶっちゃけ問題の先送りだったよね #kafkajp
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
KafkaとPulsar
KafkaとPulsarKafkaとPulsar
KafkaとPulsar
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
JCBの Payment as a Service 実現にむけたゼロベースの組織変革とテクニカル・イネーブラー(NTTデータ テクノロジーカンファレンス ...
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
 
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
 
Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Aurora - Auroraの止まらない進化とその中身Amazon Aurora - Auroraの止まらない進化とその中身
Amazon Aurora - Auroraの止まらない進化とその中身
 
ロードバランスへの長い道
ロードバランスへの長い道ロードバランスへの長い道
ロードバランスへの長い道
 

Ähnlich wie Spannerに関する技術メモ

分散メモリ環境におけるシェルスクリプトの高速化手法の提案
分散メモリ環境におけるシェルスクリプトの高速化手法の提案分散メモリ環境におけるシェルスクリプトの高速化手法の提案
分散メモリ環境におけるシェルスクリプトの高速化手法の提案
Keisuke Umeno
 
Programming Hive Reading #3
Programming Hive Reading #3Programming Hive Reading #3
Programming Hive Reading #3
moai kids
 
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
Tsukasa Oi
 

Ähnlich wie Spannerに関する技術メモ (20)

R-hpc-1 TokyoR#11
R-hpc-1 TokyoR#11R-hpc-1 TokyoR#11
R-hpc-1 TokyoR#11
 
分散メモリ環境におけるシェルスクリプトの高速化手法の提案
分散メモリ環境におけるシェルスクリプトの高速化手法の提案分散メモリ環境におけるシェルスクリプトの高速化手法の提案
分散メモリ環境におけるシェルスクリプトの高速化手法の提案
 
Reactive Programming
Reactive ProgrammingReactive Programming
Reactive Programming
 
第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-
第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-
第3回機械学習勉強会「色々なNNフレームワークを動かしてみよう」-Keras編-
 
PostgreSQL 9.5 CPU Read Scalability
PostgreSQL 9.5 CPU Read ScalabilityPostgreSQL 9.5 CPU Read Scalability
PostgreSQL 9.5 CPU Read Scalability
 
Deep Learning Lab MeetUp 学習編 AzureインフラとBatch AI
Deep Learning Lab MeetUp 学習編 AzureインフラとBatch AIDeep Learning Lab MeetUp 学習編 AzureインフラとBatch AI
Deep Learning Lab MeetUp 学習編 AzureインフラとBatch AI
 
MariaDB ColumnStore ベンチマークしちゃいませんか?
MariaDB ColumnStore ベンチマークしちゃいませんか?MariaDB ColumnStore ベンチマークしちゃいませんか?
MariaDB ColumnStore ベンチマークしちゃいませんか?
 
関西DB勉強会ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
関西DB勉強会ver : MariaDB ColumnStore ベンチマークしちゃいませんか?関西DB勉強会ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
関西DB勉強会ver : MariaDB ColumnStore ベンチマークしちゃいませんか?
 
AWS Redshift Analyzeの必要性とvacuumの落とし穴
AWS Redshift Analyzeの必要性とvacuumの落とし穴AWS Redshift Analyzeの必要性とvacuumの落とし穴
AWS Redshift Analyzeの必要性とvacuumの落とし穴
 
lispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learninglispmeetup#63 Common Lispでゼロから作るDeep Learning
lispmeetup#63 Common Lispでゼロから作るDeep Learning
 
R高速化
R高速化R高速化
R高速化
 
[Cloud OnAir] Google Kubernetes Engine と Cloud Spanner の紹介 2020 年 1 月 30 日放送
 [Cloud OnAir] Google Kubernetes Engine と Cloud Spanner の紹介 2020 年 1 月 30 日放送 [Cloud OnAir] Google Kubernetes Engine と Cloud Spanner の紹介 2020 年 1 月 30 日放送
[Cloud OnAir] Google Kubernetes Engine と Cloud Spanner の紹介 2020 年 1 月 30 日放送
 
Programming Hive Reading #3
Programming Hive Reading #3Programming Hive Reading #3
Programming Hive Reading #3
 
NVIDIA TESLA V100・CUDA 9 のご紹介
NVIDIA TESLA V100・CUDA 9 のご紹介NVIDIA TESLA V100・CUDA 9 のご紹介
NVIDIA TESLA V100・CUDA 9 のご紹介
 
Why Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuriWhy Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuri
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
 
[AWSセミナーマイグレーション事例祭20190409]分析環境をAWS_Athenaに移行_その後1年間の運用課題を振り返る
[AWSセミナーマイグレーション事例祭20190409]分析環境をAWS_Athenaに移行_その後1年間の運用課題を振り返る[AWSセミナーマイグレーション事例祭20190409]分析環境をAWS_Athenaに移行_その後1年間の運用課題を振り返る
[AWSセミナーマイグレーション事例祭20190409]分析環境をAWS_Athenaに移行_その後1年間の運用課題を振り返る
 
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 

Mehr von Etsuji Nakai

TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎
Etsuji Nakai
 

Mehr von Etsuji Nakai (20)

PRML11.2-11.3
PRML11.2-11.3PRML11.2-11.3
PRML11.2-11.3
 
「ITエンジニアリングの本質」を考える
「ITエンジニアリングの本質」を考える「ITエンジニアリングの本質」を考える
「ITエンジニアリングの本質」を考える
 
Googleのインフラ技術に見る基盤標準化とDevOpsの真実
Googleのインフラ技術に見る基盤標準化とDevOpsの真実Googleのインフラ技術に見る基盤標準化とDevOpsの真実
Googleのインフラ技術に見る基盤標準化とDevOpsの真実
 
Introducton to Convolutional Nerural Network with TensorFlow
Introducton to Convolutional Nerural Network with TensorFlowIntroducton to Convolutional Nerural Network with TensorFlow
Introducton to Convolutional Nerural Network with TensorFlow
 
Googleにおける機械学習の活用とクラウドサービス
Googleにおける機械学習の活用とクラウドサービスGoogleにおける機械学習の活用とクラウドサービス
Googleにおける機械学習の活用とクラウドサービス
 
Googleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOpsGoogleのインフラ技術から考える理想のDevOps
Googleのインフラ技術から考える理想のDevOps
 
A Brief History of My English Learning
A Brief History of My English LearningA Brief History of My English Learning
A Brief History of My English Learning
 
TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎TensorFlowプログラミングと分類アルゴリズムの基礎
TensorFlowプログラミングと分類アルゴリズムの基礎
 
TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門TensorFlowによるニューラルネットワーク入門
TensorFlowによるニューラルネットワーク入門
 
Using Kubernetes on Google Container Engine
Using Kubernetes on Google Container EngineUsing Kubernetes on Google Container Engine
Using Kubernetes on Google Container Engine
 
Lecture note on PRML 8.2
Lecture note on PRML 8.2Lecture note on PRML 8.2
Lecture note on PRML 8.2
 
Machine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application DevelopersMachine Learning Basics for Web Application Developers
Machine Learning Basics for Web Application Developers
 
Your first TensorFlow programming with Jupyter
Your first TensorFlow programming with JupyterYour first TensorFlow programming with Jupyter
Your first TensorFlow programming with Jupyter
 
Deep Q-Network for beginners
Deep Q-Network for beginnersDeep Q-Network for beginners
Deep Q-Network for beginners
 
Life with jupyter
Life with jupyterLife with jupyter
Life with jupyter
 
TensorFlowで学ぶDQN
TensorFlowで学ぶDQNTensorFlowで学ぶDQN
TensorFlowで学ぶDQN
 
DevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきかDevOpsにおける組織に固有の事情を どのように整理するべきか
DevOpsにおける組織に固有の事情を どのように整理するべきか
 
PRML7.2
PRML7.2PRML7.2
PRML7.2
 
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
インタークラウドを実現する技術 〜 デファクトスタンダードからの視点 〜
 
Exploring the Philosophy behind Docker/Kubernetes/OpenShift
Exploring the Philosophy behind Docker/Kubernetes/OpenShiftExploring the Philosophy behind Docker/Kubernetes/OpenShift
Exploring the Philosophy behind Docker/Kubernetes/OpenShift
 

Kürzlich hochgeladen

Kürzlich hochgeladen (7)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

Spannerに関する技術メモ