jqの内部ソートはGNUソートよりも遅いですか?

jqの内部ソートはGNUソートよりも遅いですか?

フィルタリング中このJSONファイル私は一つ作った基準jqを活用した内部sortメソッドがunique実際には25%遅い比較するsort --unique

注文する 平均[ミリ秒] 最短[ミリ秒] 最大[ミリ秒] 比較的
jq "[.[].category] \| sort \| unique" channels.json 172.0±2.6 167.8 176.8 1.25±0.06
jq "[.[].category \| select((. != null) and (. != \"XXX\"))] \| sort \| unique" channels.json 151.9±4.1 146.5 163.9 1.11±0.06
jq ".[].category" channels.json \| sort -u 137.2±6.6 131.8 156.6 1.00
Summary
  'jq ".[].category" channels.json | sort -u' ran
    1.11 ± 0.06 times faster than 'jq "[.[].category | select((. != null) and (. != \"XXX\"))] | sort | unique" channels.json'
    1.25 ± 0.06 times faster than 'jq "[.[].category] | sort | unique" channels.json'

テストコマンド:

hyperfine --warmup 3 \
    'jq "[.[].category] | sort | unique" channels.json'  \
    'jq "[.[].category | select((. != null) and (. != \"XXX\"))] | sort | unique" channels.json' \
    'jq ".[].category" channels.json | sort -u'

(固有性なしで)順序だけをテストすると、jqは再び9%遅いソートより:

注文する 平均[ミリ秒] 最短[ミリ秒] 最大[ミリ秒] 比較的
jq "[.[].category] \| sort" channels.json 133.9±1.6 131.1 138.2 1.09±0.02
jq ".[].category" channels.json \| sort 123.0±1.3 120.5 125.7 1.00
Summary
  'jq ".[].category" channels.json | sort' ran
    1.09 ± 0.02 times faster than 'jq "[.[].category] | sort" channels.json'

バージョン:

jq-1.5-1-a5b5cbe
sort (GNU coreutils) 8.28

jqの内部機能を使用することは、独自に生成する必要がある外部アプリケーションにパイプするよりも速いと思います。私はjqをうまく使用していませんか?

修正する FLASHストレージ、Arm CPU、および以下のホストでこの実験を繰り返しました。

jq-1.6
sort (GNU coreutils) 8.32

結果:

Benchmark #1: jq "[.[].category] | sort" channels.json
  Time (mean ± σ):     587.8 ms ±   3.9 ms    [User: 539.5 ms, System: 44.2 ms]
  Range (min … max):   582.8 ms … 594.2 ms    10 runs
 
Benchmark #2: jq ".[].category" channels.json | sort
  Time (mean ± σ):     606.0 ms ±   8.6 ms    [User: 569.5 ms, System: 49.0 ms]
  Range (min … max):   589.6 ms … 616.2 ms    10 runs
 
Summary
  'jq "[.[].category] | sort" channels.json' ran
    1.03 ± 0.02 times faster than 'jq ".[].category" channels.json | sort'

jqソートはGNUソートよりも3%速く実行されます。 :D

ベストアンサー1

おすすめ記事