背景
株式会社出前館で情シスとして働いています、二宮と申します。
Workatoを使い始めたばかりで試行錯誤しています。
公式のドキュメントには日々助けられていますが、一方でドキュメントに書かれていない細かい仕様が気になることもしばしば…
今回はindexについて検証してみようと思います。
SQL Collection by Workato
SQL Collection by Workato
ではindexの指定ができます。
indexがあるとパフォーマンスが向上すると注釈がついています。どれくらい向上するのか気になるところです。
Workatoの内部DBはSQLiteだそうですが、SQLiteのドキュメント SQLite のパフォーマンスに関するベスト プラクティス を見ても、速度や件数についての具体的な情報はありません。
ケースバイケースすぎて書けないものと思います。
では、試してみます。
テストデータについて
データランダム生成のツールを使いました。
https://tm-webtools.com/Tools/TestData
件数は SQL Collection by Workato
の最大件数である5万件です。
公式ドキュメントで上限件数の記載を見つけられなかったため、Create List画面の注釈を情報源としています。
Creates a table like structure in a collection. Select list pill as source. Collections support a maximum of 50,000 list entries or 10 MB size limit.
処理内容について
ツールで作成したCSVファイルをGoofleドライブに配置し、Workatoから読み込むことにします。
読み込んだテストデータに対して以下2種類の処理を実施することとしました。
- 処理1 任意のNoを指定してユーザーを取得する
- 処理2 性別でグルーピングして人数をカウントする
indexあり・なしそれぞれで経過時間を計測します。
indexありの場合はPrimary index
をNo
、Secondary index
を性別
とします。
それぞれプライマリキーとビットマップインデックスのイメージで、実際のDB設計でもよくあるパターンだと思います。
レシピ
Step11のログ出力で結果時間が分かるようにしてあります。
結果
ばらつきがあるかもしれないので、3回ずつ試しました。
処理1 ユーザー取得 | 処理2 性別カウント | ||
---|---|---|---|
インデックスなし | 1回目 | 0.028542726秒 | 0.038733526秒 |
2回目 | 0.02299516秒 | 0.048323399秒 | |
3回目 | 0.028468306秒 | 0.045365163秒 | |
インデックスあり | 1回目 | 0.013266355秒 | 0.024370533秒 |
2回目 | 0.016906614秒 | 0.03071054秒 | |
3回目 | 0.016027537秒 | 0.027085606秒 |
速くなっていますね。処理時間が半分以下になっているケースもありますが…
もともとが速いので、速度向上を人間が体感することはなさそうです。
今回分からなかったこと
- indexを設定した状態での追加・更新・削除はどれくらい遅くなるのか。
→機会があれば試してみようと思います。 - Workatoで「任意の範囲のランダムな整数」を返す方法。
→分からなかったのでPythonで書いてしまいました。(Step5)
最後に…
出前館では、一緒にWorkatoを推進していくコーポレートエンジニアを募集中です!
カジュアル面談もできますので、ご興味があればお気軽にお声がけください。
株式会社出前館 採用情報 > コーポレートエンジニア
https://hrmos.co/pages/demaecan/jobs/1938469226560745501
以上です。お読みいただき、ありがとうございました!