Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GraphQL Ruby benchmark

GraphQL Ruby benchmark

Fumiaki MATSUSHIMA

August 31, 2022
Tweet

More Decks by Fumiaki MATSUSHIMA

Other Decks in Programming

Transcript

  1. @mtsmfm
    GraphQL Ruby
    ベンチマーク

    View Slide

  2. 松島 史秋
    Backend engineer at Autify
    GitHub, Twitter @mtsmfm

    View Slide

  3. https://autify.com/careers

    View Slide

  4. https://www.meetup.com/ja-JP/GraphQL-Tokyo/

    View Slide

  5. https://ninirb.github.io

    View Slide

  6. 大事なことは最初に
    - GraphQL Ruby v2.0.13 は 1000 要素あるとき
    に 1 フィールド足すと 15 ms くらい処理時間が
    増える (2.60GHz CPU)
    - v2.0.13 は v1.5.15 と比べて倍くらい遅くなって
    いる
    - つまり倍くらい速くなる余地がある気がする

    View Slide

  7. GraphQL Ruby
    なんか遅い?

    View Slide

  8. https://speakerdeck.com/mtsmfm/make-graphql-ruby-faster-a-bit

    View Slide

  9. https://speakerdeck.com/mtsmfm/make-graphql-ruby-faster-a-bit

    View Slide

  10. 前回得たこと、気になったこと
    - 1000 要素 4 フィールドで 60ms
    - 実際 4 フィールドしかないことはほぼない
    - 1 フィールドにつきどれくらいかかる?
    - 増えれば増えるほど遅くなる?
    - リリースごとだんだん遅くなってる?

    View Slide

  11. ベンチマーク内容
    type Article {
    field0: String!
    field1: String!
    ...
    fieldN: String!
    }
    type Query {
    articles: [Article!]!
    }
    query {
    articles {
    field0, field1, ..., fieldN
    }
    }

    View Slide

  12. ベンチマーク内容
    type Article {
    field0: String!
    field1: String!
    ...
    fieldN: String!
    }
    type Query {
    articles: [Article!]!
    }
    query {
    articles {
    field0, field1, ..., fieldN
    }
    }
    要素数
    フィールド数

    View Slide

  13. ベンチマーク内容
    - Query 文字列を渡して Ruby の Hash オブジェ
    クトが返ってくるまでの時間
    - 30 秒を超えるまでループして処理時間と回数を
    記録
    - Ruby 2.7.6
    - 古い GraphQL Ruby を動かすため 2 系

    View Slide

  14. ベンチマーク環境
    - GitHub Actions (ubuntu-latest)
    - Intel(R) Xeon(R) Platinum 8171M CPU @ 2.60GHz
    - 2 コア
    - 具体的なスペックは引きによって変わることがあるかも
    - 全部 1 実行で回している
    - https://github.com/mtsmfm/graphql-ruby-benchmark

    View Slide

  15. 1 フィールドに
    つきどれくらい
    かかる?

    View Slide

  16. View Slide

  17. 1 フィールドにつきどれくらいかかる?
    - 1000 要素のとき、だいたい 15 ms くらい
    - 前回 1000 要素 4 フィールド 60 ms だったのでそれっ
    ぽい (マシンは違うけど)
    - フィールド数が少ないと 1 フィールドあたりの時
    間が多い
    - おそらくクエリのパースとかの分
    - 100 フィールド以降はほぼ変わらない

    View Slide

  18. リリースごと
    だんだん遅く
    なってる?

    View Slide

  19. https://github.com/mtsmfm/graphql-ruby-benchmark/blob/eaf93fb7ef10753d571eff13b635cf33167dcc03/graphql.rb
    全バージョンで動くコードを書いた

    View Slide

  20. View Slide

  21. View Slide

  22. GraphQL Ruby のバージョンごとの速度
    - 1.1 と 1.5 は 1.8 以降の倍くらい速かった
    - 最初期が最速ではなかった

    View Slide

  23. View Slide

  24. ご清聴ありがとうございました
    - GraphQL Ruby v2.0.13 は 1000 要素あるとき
    に 1 フィールド足すと 15 ms くらい処理時間が
    増える (2.60GHz CPU)
    - v2.0.13 は v1.5.15 と比べて倍くらい遅くなって
    いる
    - つまり倍くらい速くなる余地がある気がする

    View Slide

  25. Credits
    Background pattern from Toptal Subtle Patterns
    https://www.toptal.com/designers/subtlepatterns/

    View Slide