2021/10/04

Google Cloud Spanner用のORMを公開しました

WRITER: m.mine

はじめに


10ANTZのエンジニアGM担当している@mine-masahiroです。

10ANTZではクラウド環境としてGoogle Cloud Platform(GCP)を採用しています。

そして、マイクロサービスのデータベースとしてはGoogle Cloud Spannerを採用しています。

MySQLなどのデータベースのORMは多いですが、Cloud Spannerのgolang製ORMはなかなかありませんでしたので、今回SSORM(Simple Spanner ORM)を公開することにしました。

github

https://github.com/10antz-inc/ssorm

SSORMについて


Google Cloud Spannerのデータ操作言語(DML)とミューテーションは Cloud Spanner の 2 つの API が存在します。

ミューテーションとDMLの違いについて、DML とミューテーションの比較が参考になります。

簡単に説明すると

  1. DML
    INSERT、UPDATE、DELETE の各ステートメントを使用してデータベース テーブル内のデータを操作できます。
  2. ミューテーション
    データベース内のさまざまな行やテーブルに対して、Cloud Spanner によってアトミックに適用される一連の操作(挿入、更新、削除)を表します。

 

SSORMがサポートしているAPI


同じトランザクションで DML とミューテーションを混在させない観点から、Mutation を使用して行った変更が、トランザクションを commit するまで後続のステートメントで参照できないため、トランザクションの最後にのみ書き込みをバッファリングするのが理想的なので、SSORMは現在DMLのみ対応しています。初期Mutation対応を行いましたが、実装するエンジニアが混乱しないようにMutationは外しました。

 

SSORMがサポートしている機能一覧

SSORMのtag一覧

  • ssorm_key:”primary” //primary key
  • ssorm_key:”delete_time”   //soft delete時に使用
  • ssorm_key:”create_time”   //insert時に使用
  • ssorm_key:”update_time” //update時に使用
  • ssorm_key:”ignore_write” //insert、update対象から外す際に使用

サンプル

  • Model
  • Insert
    • Model
  • Update (Model and Columns and Params)
    • Model  (where ssorm_key:”primary”で更新を行う)
    • Columns
    • Params
  • Find
    • Model
  • First
    • Model
  • Count
    • Model
  • Delete (Model and Where)
    • Model  (where ssorm_key:”primary”で削除を行う)
    • Where
  • SubQuery
    • Model
  • SoftDelete
    • ssorm.SoftDeleteModelを使用して、Insert Update Find First Count Delete SubQueryを実行

       

まとめ


SSORMはtagを指定することで、primary key、create_time、update_time、delete_timeを自動判断し、SoftDelete機能を実現しています。

現在はArray型を対応しており、Struct型は今後対応進めていきたいと思います。またtagの種類を追加することで、Indexなども対応していきたいと思います。

SubQueryを対応しており、テーブルJoinは対応していません、下記の理由で現時点では対応予定はありません。

cloud-spanner-でインターリーブテーブルを高速に取得する

何か要望などがあればぜひGitHubのIssueなどからお願いします。

 

 

m.mine

m.mine

開発グループ
ゼネラルマネージャー