7.4Gb の csv ファイルがあります。Python スクリプトを使用して sqlite データベースに変換した後、出力 DB は 4.7Gb で、元のサイズの約 60% です。
csv には約 150,000,000 行あります。ヘッダーがあります:
tkey,ipaddr,healthtime,numconnections,policystatus,activityflag
そして、各行は次のようになります
261846,172.10.28.15,2012-02-03 16:15:00,22,1,1
スクリプトは healthtime を使用してデータをテーブルに分割します 192 テーブル
これらの数字を最初に見たとき、どこかで間違いを犯したと思いました。healthtime を 1 億 5000 万回ではなく 192 回だけ書き込むことで効率が向上すると、ファイル サイズはどの程度削減されるのでしょうか。
編集:これを投稿するとすぐに、答えに気づきました。文字列の約 40% を削除しているため、サイズが 40% 縮小されています。
編集 2プレーン テキストのサイズの違いを計算してみましょう。
"261846,172.10.28.15,2012-02-03 16:15:00,22,1,1"
そしてデータベースエントリ:
db(261846,'172.10.28.15',22,1,1)
まず、プレーン テキスト表現で 46 文字から 26 文字に減らします。
残りの文字は次のとおりです。
"261846,172.10.28.15,22,1,1"
または26バイト。各整数を 32 ビット (4 バイト) で格納する必要がある場合は、次のようになります。
12 バイト (ipaddr) + 4 バイト * 4 (整数フィールド) = 28 バイト。
したがって、整数に変換するとストレージの効率がわずかに低下するように見えますが、すべての利点は、各行に格納される文字数を減らすことから得られます。