CSVファイルのスレ (296レス)
CSVファイルのスレ http://mevius.5ch.net/test/read.cgi/db/1057136328/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
293: NAME IS NULL [] 2022/09/11(日) 01:48:03.55 ID:Mo970C1D ソートするだけならマージソートでやれば良い マージソートはレコードをシーケンシャルに読み書きしていくだけで良い CSVが100GBで、1レコードが1KBだと仮定するとレコード数は1億 log2(1億) = 26.5 27回はスプリットとマージを繰り返さないといけない 100GB * 27 * 2(読みと書き) = 5400GB ストレージの読み書き速度が500MB/sだとして3時間 性能要件的に3時間が是か非か SQLiteやPostgreSQLにデータを入れてSQLでソートするにしても DBではデータがノーマライズされるうえにインデックスも構築されるから なんだかんだで同じくらい時間がかかりそう RedshiftやBigQueryといった分散処理ができるDBを使えば速いだろうけど ネットワークの速度が100MB/sだと仮定するとデータを転送するだけで16分かかるから なんだかんだで20分前後かなあ ストレージのIOがボトルネックになるとしてそれを改善するには CSVを1回読んでレコードの(sortkey, offset, length)の組を抜き出してその組をソートして最後にレコードを抜き出すのが良い 1つの(sortkey, offset, length)が40バイトだとしてそれが1億あると4GB、PCのメモリが10GBならオンメモリでソートできそう RFC4180に従う汎用的なCSVを入力として受け付けるならoffset, lengthの計算がちと面倒かもね 入力の生データを保持してCSVをパースできるならレコードをパースして生データからoffset, lengthを計算すればよいけれども 対応してるライブラリがあるかはわからない、CSVのパーサを自作する必要があるかも http://mevius.5ch.net/test/read.cgi/db/1057136328/293
294: NAME IS NULL [] 2022/09/11(日) 02:08:10.54 ID:Mo970C1D 10GBに収まるギリギリまでメモリ上でソートすればいいので27回も繰り返す必要はないのか ストレージ上のデータがメモリ上では10倍になるとしてメモリ上でソートできるのは100万レコードくらいかな 100万レコードが100個できるとして log2(100) = 6.6 100GB * 7 * 2(読みと書き) = 1400GB ストレージの読み書き速度が500MB/sだとして47分 結構速いな http://mevius.5ch.net/test/read.cgi/db/1057136328/294
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.020s