Google Cloudの代表的なNoSQLデータベースであるCloud Datastoreはシンプルかつ各言語のライブラリも備わっており、Google Cloudで何らかのデータをストアしたい場合にまず候補に上がるでしょう。
Cloud Datastoreでは各プロパティに自動的にインデックスが構成されますが、複雑なクエリの場合には手動で複合インデックスを構成する必要があります。
また、近年ではCIによって自動化したアプリケーションのデプロイフローにデータベースのマイグレーションを含めてしまうケースが多いため、Cloud Datastoreの複合インデックスもCIからマイグレーションしたいというケースは少なくないでしょう。
そこでこの記事では、Cloud Datastoreの複合インデックスを同じGoogle CloudのCIサービスであるCloud Buildから構成する方法を説明します。
インデックスの構成 で説明されている通り、複合インデックスが必要となるシーンは下記です。
- 祖先フィルタと不等式フィルタを持つクエリ
- 1 つのプロパティに対して 1 つ以上の不等式フィルタを使用し、他のプロパティに対して 1 つ以上の等式フィルタを使用したクエリ
- キーの降順という並べ替え順序を使用したクエリ
- 複数の並べ替え順序を持つクエリ
- 1 つ以上のフィルタと並べ替え順序を持つクエリ
複合インデックスを構成せずにこれらの条件でクエリするとエラーになってしまうので注意しましょう。
例えば次のようなクエリです。
SELECT * FROM Task
WHERE category = 'Personal'
AND priority < 3
ORDER BY priority DESC
複合インデックスを構成するには、複合インデックスをYAML形式でファイルに定義します。
例えば、先ほどの複合インデックスを必要とするクエリの複合インデックスを定義するには、下記のような構成ファイルを index.yaml
という名前でプロジェクトルートに配置します。ファイル名は何でも構いません。
indexes:
- kind: Task
properties:
- name: category
direction: asc
- name: priority
direction: desc
一般的なリレーショナルデータベースと違い、ソートの順序も含めてインデックスを定義していることに注意してください。
先ほど作成した index.yaml
を用いてCloud Buildから複合インデックスを適用するには、下記のように cloud-sdk
ビルダーを使いインデックス構成コマンドを実行します。
steps:
- id: 'Create Datastore indexes'
name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: gcloud
args: ['datastore', 'indexes', 'create', './index.yaml']
実行前にIAMで Cloud Datastore オーナー
ロールを付与するのを忘れないように注意してください。
以上です。
この記事では、Cloud Datastoreの複合インデックスを同じGoogle CloudのCIサービスであるCloud Buildから構成する方法を説明しました。
コメントを送る
コメントはブログオーナーのみ閲覧できます