目次
grasysの代表しております長谷川です。
2019年、あけましておめでとうございます!
本年もよろしくお願い致します!
早速ですが、grasysではMongoDBの運用もしています。
ただMongoDBのDumpが非常に大きくて困っています。
Cloud使ってるからObject StorageにUploadしちゃえばいいんですが!
それにしても、やっぱでかい!!
しかもMonboDBのDumpはBSONでバイナリ・・・
また自分は40歳といういい年のおっさんで、
BSDとかSolarisとかも大好きな世代なので、今まであまり圧縮形式にこだわってきませんでした。
ちょっと調べてみると圧縮形式っていろいろあるのね
最近あんまりエンジニアできないので、年明け一発の今日!
予定がない!
だから遊び半分で検証!
遊びなのでバイナリに強いとか、あまり深いこと考えてません!
ただし本当のMongoDBのDumpのBSONで実施するぜ!
blogはたまに書く、社内にはダマで書くを実施していこう!
検証する圧縮形式
- gzip 1.5
- lz4 v1.8.3
- zstd v1.3.7
圧縮する速度が知りたいから、bzip2
とxz
はやらない!
/etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
uname -r
3.10.0-862.14.4.el7.x86_64
圧縮するファイル
- 実際にMongoDBの
mongodump
で取得したもの - 約13G (13676855970)
Install
gzip
CentOS7のRPM gzip-1.5-10.el7.x86_64
lz4
source: https://github.com/lz4/lz4
declare module=lz4
declare version=1.8.3
declare download_url=https://github.com/${module}/${module}/archive/v${version}.tar.gz
declare download_to=/tmp/src/${module}-${version}.tar.gz
declare build_base=/usr/local/src/
declare build_dir=/usr/local/src/${module}-${version}
declare deploy_to=/usr/local/${module}-${version}
declare symlink_to=/usr/local/${module}
test ! -d ${build_base} && mkdir -p ${build_base}
test -d ${build_base} && \
curl -s --create-dirs -o ${download_to} \
-L ${download_url}
test -f ${download_to} && tar -xvzf ${download_to} -C ${build_base}
test -d ${build_dir} && cd ${build_dir} && make && make install PREFIX=${deploy_to}
test -d ${deploy_to} && ln -s ${deploy_to} ${symlink_to}
test -x ${symlink_to}/bin/${module} && ${symlink_to}/bin/${module} -V
*** LZ4 command line interface 64-bits v1.8.3, by Yann Collet ***
yumのgroupでDevelopment Tools
が入ってれば、たぶん入るはず・・・
ldd ${symlink_to}/bin/${module}
linux-vdso.so.1 => (0x00007ffe75dc2000)
libc.so.6 => /lib64/libc.so.6 (0x00007f564d0a9000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f564ce8d000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f564cc89000)
/lib64/ld-linux-x86-64.so.2 (0x00007f564d682000)
zstd
source: https://github.com/facebook/zstd
declare module=zstd
declare version=1.3.7
declare download_url=https://github.com/facebook/${module}/releases/download/v${version}/${module}-${version}.tar.gz
declare download_to=/tmp/src/${module}-${version}.tar.gz
declare build_base=/usr/local/src/
declare build_dir=/usr/local/src/${module}-${version}
declare deploy_to=/usr/local/${module}-${version}
declare symlink_to=/usr/local/${module}
test ! -d ${build_base} && mkdir -p ${build_base}
test -d ${build_base} && \
curl -s --create-dirs -o ${download_to} \
-L ${download_url}
test -f ${download_to} && tar -xvzf ${download_to} -C ${build_base}
test -d ${build_dir} && cd ${build_dir} && make && make install PREFIX=${deploy_to}
test -d ${deploy_to} && ln -s ${deploy_to} ${symlink_to}
test -x ${symlink_to}/bin/${module} && ${symlink_to}/bin/${module} -V
*** zstd command line interface 64-bits v1.3.7, by Yann Collet ***
こっちもlz4のが通れば・・・たぶん・・・入るはず・・・
というかオレのインスタンスは通ったから大丈夫!w
一応参考
ldd ${symlink_to}/bin/${module}
linux-vdso.so.1 => (0x00007fff2b0c5000)
libz.so.1 => /lib64/libz.so.1 (0x00007ff3e83da000)
liblzma.so.5 => /lib64/liblzma.so.5 (0x00007ff3e81b4000)
liblz4.so.1 => /usr/local/lz4/lib/liblz4.so.1 (0x00007ff3e7fa1000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff3e7d85000)
libc.so.6 => /lib64/libc.so.6 (0x00007ff3e79b8000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007ff3e77b4000)
/lib64/ld-linux-x86-64.so.2 (0x00007ff3e87fc000)
xz-libs-5.2.2-1.el7.x86_64
これとか必要そうね/usr/local/lz4/lib/liblz4.so.1
これはオレがLD通したからだな
検証
gzip
time gzip sample.bson
real 12m29.744s
user 12m3.196s
sys 0m10.310s
lz4
time lz4 sample.bson
real 2m20.900s
user 0m34.440s
sys 0m10.606s
zstd
time zstd sample.bson
real 7m11.140s
user 6m48.337s
sys 0m6.001s
結果
圧縮形式 | 圧縮real時間 | バイト | メガバイト |
---|---|---|---|
original | – | 13676855970 | 13044M |
gzip | 12m29.744s | 2192892602 | 2092M |
lz4 | 2m20.900s | 3663760871 | 3495M |
zstd | 7m11.140s | 1929996789 | 1841M |
個人的にバランス良いなと思うのはzstd
かな
でもあんまり大きくなって、ウン百Gくらいのサイズになったら、lz4
の方が良さげだな
サイズ
なのか、圧縮時間
なのか、どっちを取るかだな
でっかいファイルをパッと圧縮してポイッとObjectStorageにUploadしたいね〜
あ〜楽しかった!
株式会社grasys(グラシス)は、技術が好きで一緒に夢中になれる仲間を募集しています。
grasysは、大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud (GCP)、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。
お客様の課題解決をしながら技術を広げたい方、攻めのインフラ技術を習得したい方、とことん技術を追求したい方にとって素晴らしい環境が、grasysにはあります。
お気軽にご連絡ください。