性能
DuckDB のエンジン
Section titled “DuckDB のエンジン”Apple M2 Pro(12 スレッド・32 GB)、Node.js 24、DuckDB 1.5 で npm run bench -- --csv-rows=10000000 --parquet-rows=100000000 を実行した結果です。DuckDB の処理を含み、HTTP は含みません。
| 処理 | 時間 |
|---|---|
| CSV 735 MB・1,000 万行: 最初の行を表示できるまで | 143 ms |
| CSV: 読み込みの完了(並べ替え・絞り込み・統計が使える) | 5.3 秒 |
| CSV: 任意の位置の 256 行 × 8 列(中央値) | 1.8 ms |
| CSV: 数値の列・文字列の列での並べ替え | 1.2 秒・1.1 秒 |
| CSV: 値での絞り込み(250 万行)・すべての列からの絞り込み | 293 ms・544 ms |
| CSV: 列の統計(分布・四分位) | 117 ms |
| CSV: 100 万行 × 2 列の合計・平均・最小・最大 | 7.8 ms |
| Parquet 1.38 GB・1 億行: 開く(ファイルのまま読む) | 20 ms |
| Parquet: 任意の位置の 256 行 × 8 列(中央値) | 24 ms |
| Parquet: 数値の列での並べ替え | 1.9 秒 |
| Parquet(並べ替え後): 任意の位置の 256 行(中央値・95 パーセンタイル) | 147 ms・208 ms |
並べ替えた Parquet は 1 億行で materializeRows を超えるので、ビューは行の順番だけを持ちます。ビューは 1.9 秒で作られ、行のまとまりはその順番でファイルから読みます。上限より小さな表では、代わりに並べ替えた複製を作るので、元の表と同じ速さで読めます。
ベンチマークは packages/duckdb/bench/run.ts にあり、使うファイルも自分で作ります。
2280 × 1371 px(56 行 × 20 列)の描画は、フレームごとにキャンバスを確定させて測り、中央値 2.0 ms・99 パーセンタイル 3.0 ms でした。描画の重さは行の数によりません。
デモでは、お使いのブラウザーで直近に描いたフレームの平均と最も遅いものを、renderer.timings() から表示しています。
ArraySource
Section titled “ArraySource”ArraySource は画面のスレッドで動きます。同じマシンの Node.js 24 で、30 万行・13 列の表は、小数の列での並べ替えが 0.55 秒、文字列の列での並べ替えが 0.15 秒、すべての列からの絞り込みが 0.13 秒でした。メモリ上のデータを参照してください。