Go言語 DatastoreのEntityを特定条件で一括削除

GMOアドマーケティングのy.yです。

 

今回はGo言語でCloud DatastoreのEntityを特定の条件で一括削除する方法について書きたいと思います。

引用元:The Go Blog

The Go Blog by Google CC BY 3.0

 

単純なEntityの一括削除を行う場合にはCloud Datafllowを使用するのが良さそうです。

エンティティの一括削除について

 

Cloud Datastore APIでCommitオペレーションに渡せるエンティティの最大数 は500となっています。

なのでAPIへ一度のリクエストで書込、更新、削除できる最大数は500件までとなります。

詳しくはこちらを参照してください

そのため、ある特定の条件に当てはまるEntityを全て削除する場合は下記の内容で行えます。

例)更新日が30日以上経過しているentityを削除

 

処理内容としては下記の内容となります。

  1. DatastoreのKind, Projectを設定
  2. Clientの作成
  3. 現在から30日前の日付を取得
  4. Datastoreから30日以上経過しているEntityを500件取得
  5. 4のクエリでkeyが取得できているか確認
  6. 取得したkeyからEntityの削除を実行

4からの処理で500件ずつEntityを取得しkeyが取れなくなるまで削除を繰り返すという処理になります。

 

まとめ

500件ずつではありますが、cron等を使用すれば特定条件の定期削除は簡単に行えるのかなと思いました。