1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

spannerの設計時に気を付けたこと

Posted at

GKE+cloud spannerを使ってプロダクトをリリースしました。
その際に、spannerについていろいろ調べたり、設計をしたので備忘録としてまとめていきます。
spannerがどういったものかは他の記事を参考にしてもらって、この記事では気づきや工夫についてまとめていきます。

UUIDはString(32)

spannerはリレーショナルDBのようなインクリメントするidが存在しません。
そのため、uuidをprimary keyとして使用しますが、その際の方は String(32)とするのがいいです。
一番最初に設計したときに、 String(64)としてしまったためにインターリーブする際にずっとこの型を継承しなければならず、見る度に後悔しています。。

インターリーブはやりすぎない

初期の設計では、リレーショナルDBの正規化のように至るところにインターリーブをしていました。
しかし、インターリーブされたテーブルにレコードが集中するとホットスポットが起こりやすくなります。
そのため、子テーブルのデータが無限に増える可能性がある箇所はインターリーブしませんでした。

開発時は本番とは別プロジェクトで作る

spannerの利用を始めた時点では、エミュレータがなかったので本番とは別プロジェクトに自分用のdbを作り運用しています。
プロジェクトでは初期データがなく、困ることが多々あったので、簡単にデータを作れるapiを用意しています。

マイグレーションは別レポジトリ

spannerをサポートしているライブラリが少ないないですが、スター数と使いやすさからこちらを選択しました。
https://github.com/golang-migrate/migrate/tree/master/database/spanner

まとめ

初期のときに気にした点を簡単にまとめました。
今後もあったら追記していこうと思います。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?