{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Comparing speedups when using compression with blz barrays" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this tutorial we are going to show that, for some cases, it is faster to have the data compressed due to the disk speed limitations.\n", "\n", "To show this, we are going to generate a 30000x20000 mandelbrot's fractal (~12 minutes), store it to a blz without compression and then copy that blz to a new one with different compressors and compression levels. We are then going to downsample the compressed blz to show the times (~30 minutes)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "import numba\n", "import numpy as np\n", "import pylab as plt\n", "from time import time\n", "import blz\n", "from shutil import rmtree\n", "import csv\n", "from math import sqrt\n", "from collections import defaultdict\n", "import pandas" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The code used here is discussed in the \"Generating huge Mandelbrot's fractals\" notebook." ] }, { "cell_type": "code", "collapsed": false, "input": [ "@numba.njit\n", "def mandel(x, y, max_iters):\n", " \"\"\"\n", " Given the real and imaginary parts of a complex number,\n", " determine if it is a candidate for membership in the Mandelbrot\n", " set given a fixed number of iterations.\n", " \"\"\"\n", " c = complex(x, y)\n", " z = 0.0j\n", " for i in xrange(max_iters):\n", " z = z*z + c\n", " if (z.real*z.real + z.imag*z.imag) >= 4:\n", " return i\n", "\n", " return max_iters\n", "\n", "\n", "def create_fractal(height, width, min_x, max_x, min_y, max_y, image, row, iters):\n", "\n", " pixel_size_x = (max_x - min_x) / width\n", " pixel_size_y = (max_y - min_y) / height\n", "\n", " for x in xrange(height):\n", "\n", " imag = min_y + x * pixel_size_y\n", "\n", " for y in xrange(width):\n", "\n", " real = min_x + y * pixel_size_x\n", " color = mandel(real, imag, iters)\n", " row[y] = color\n", "\n", " image.append(row)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "height = 20000\n", "width = 30000\n", "\n", "#If the blz already exist, remove it\n", "rmtree('images/Mandelbrot.blz', ignore_errors=True)\n", "\n", "image = blz.zeros((0, width), rootdir='images/Mandelbrot.blz', dtype=np.uint8,\n", " expectedlen=height*width,\n", " bparams=blz.bparams(clevel=0))\n", "row = np.zeros((width), dtype=np.uint8)\n", "\n", "t1 = time()\n", "create_fractal(height, width, -2.0, 1.0, -1.0, 1.0, image, row, 20)\n", "t2 = time()\n", "\n", "image.flush()\n", "\n", "print t2-t1" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "697.405315161\n" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we have the big fractal in images/Mandelbrot.blz it takes ~577MiB of disk space. Let's do some benchmarks." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This will be the function that will create the new blz given a previous one but with new compression parameters." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def copy(src, dest, clevel=5, shuffle=True, cname=\"blosclz\"):\n", "\n", " \"\"\"\n", "\n", " Parameters\n", " ----------\n", " clevel : int (0 <= clevel < 10)\n", " The compression level.\n", " shuffle : bool\n", " Whether the shuffle filter is active or not.\n", " cname : string ('blosclz', 'lz4hc', 'snappy', 'zlib', others?)\n", " Select the compressor to use inside Blosc.\n", "\n", " \"\"\"\n", "\n", " src = blz.barray(rootdir=src)\n", " \n", " img_copied = src.copy(rootdir=dest, bparams=blz.bparams(clevel=clevel, shuffle=shuffle, cname=cname), expectedlen=src.size)\n", " img_copied.flush()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This code will be used to downsample all the images, it has been discussed on the notebook \"Numba and blz\"" ] }, { "cell_type": "code", "collapsed": false, "input": [ "@numba.njit\n", "def mymean(src, p0, p1, y):\n", "\n", " factor = 1/(1. * p0 * p1)\n", "\n", " for i in range(y.shape[0]):\n", " for j in range(y.shape[1]):\n", " s = 0.\n", " for k in range(p0):\n", " for l in range(p1):\n", " s += src[(p0*i)+k, (p1*j)+l] * factor\n", "\n", " y[i, j] = s\n", "\n", "\n", "def downsample(orig, down_cell, cache_size=2**21):\n", "\n", " c0, c1 = down_cell\n", "\n", " #Let's calculate the matrix dimensions\n", " pixel_size = orig[0, 0].nbytes\n", " n = int(round(sqrt(cache_size/pixel_size), 0))\n", "\n", " #How many complete matrices?\n", " hor = int(orig.shape[1]) / n\n", " ver = int(orig.shape[0]) / n\n", "\n", " #Complete matrix dimensions\n", " submatrix_n = round(n/float(c0))\n", " submatrix_center_shape = (submatrix_n, submatrix_n)\n", " submatrix_center = np.empty(submatrix_center_shape, dtype=orig.dtype)\n", "\n", " #Bottom border matrix dimensions\n", " ver_px = round((int(orig.shape[0]) % n) / c0, 0)\n", " submatrix_bottom_shape = (ver_px, submatrix_n)\n", " submatrix_bottom = np.empty(submatrix_bottom_shape, dtype=orig.dtype)\n", "\n", " #Right border matrix dimensions\n", " hor_px = round((int(orig.shape[1]) % n) / c1, 0)\n", " submatrix_right_shape = (submatrix_n, hor_px)\n", " submatrix_right = np.empty(submatrix_right_shape, dtype=orig.dtype)\n", "\n", " #Corner matrix dimensions\n", " submatrix_corner_shape = (ver_px, hor_px)\n", " submatrix_corner = np.empty(submatrix_corner_shape, dtype=orig.dtype)\n", "\n", " #We build the final container\n", " final_shape = (submatrix_n * ver + ver_px,\n", " submatrix_n * hor + hor_px)\n", " \n", " final = np.empty(final_shape, orig.dtype)\n", "\n", " #Downsample the middle of the image\n", " for i in xrange(ver):\n", " for j in xrange(hor):\n", "\n", " #Get the optimal matrix\n", " submatrix = orig[i*n:(i+1)*n, j*n:(j+1)*n]\n", " mymean(submatrix, c0, c1, submatrix_center)\n", " final[i*submatrix_n:(i+1)*submatrix_n,\n", " j*submatrix_n:(j+1)*submatrix_n] = submatrix_center\n", "\n", " #Downsample the right border\n", " for i in range(ver):\n", "\n", " submatrix = orig[i*n:(i+1)*n, hor*n:]\n", " mymean(submatrix, c0, c1, submatrix_right)\n", " final[i * submatrix_n:(i+1)*submatrix_n,\n", " submatrix_n*hor:] = submatrix_right\n", "\n", " #Downsample the bottom border\n", " for j in range(hor):\n", "\n", " submatrix = orig[ver*n:, j*n:(j+1)*n]\n", " mymean(submatrix, c0, c1, submatrix_bottom)\n", " final[submatrix_n*ver:,\n", " j * submatrix_n:(j+1)*submatrix_n] = submatrix_bottom\n", "\n", " #Downsample the corner\n", " submatrix = orig[n*ver:, n*hor:]\n", " mymean(submatrix, c0, c1, submatrix_corner)\n", " final[submatrix_n*ver:, submatrix_n*hor:] = submatrix_corner\n", "\n", " return final" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have all the ingredients, let's build ourselves a benchmark code. (Note: This code saves the benchmark results to .csv files)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def benchmark(src, cmethods):\n", "\n", " for method in cmethods:\n", "\n", " myfile = open('csv/' + method + '.csv', 'wb')\n", " wr = csv.writer(myfile, quoting=csv.QUOTE_ALL)\n", " wr.writerow(['Compression level', 'Compressed size', 'Compression ratio', 'Compression time', 'Downsampling time'])\n", "\n", " for compression_level in xrange(0,10):\n", "\n", " #I get the original image and compress it\n", " tc1 = time()\n", " copy(src, 'images/temp.blz', compression_level, False, method)\n", " tc2 = time()\n", "\n", " #Get disk size\n", " img = blz.barray(rootdir='images/temp.blz')\n", " disk_size = img.cbytes\n", "\n", " #Now I downsample it measuring the time\n", " t1 = time()\n", " downsample(img, (4,4))\n", " t2 = time()\n", "\n", " #I should store the size of the file, compression method, shuffle and compression ratio\n", " row = [compression_level, disk_size, round(img.nbytes/float(disk_size),3), str(tc2 - tc1), str(t2 - t1)]\n", "\n", " #Add it to the csv\n", " wr.writerow(row)\n", " rmtree('images/temp.blz', ignore_errors=True)\n", "\n", " myfile.close()\n" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ok, so we are going to see how well does the downsample function behave when working with compressed blzs." ] }, { "cell_type": "code", "collapsed": false, "input": [ "src = 'images/Mandelbrot.blz'\n", "cmethods = ['blosclz', 'lz4hc', 'snappy', 'zlib']\n", "\n", "t1 = time()\n", "benchmark(src, cmethods)\n", "t2 = time()\n", "\n", "print t2-t1" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "1625.42109704\n" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we should have 4 csvs with the relevant data. We first convert them to Python dictionaries so we can easily plot them." ] }, { "cell_type": "code", "collapsed": false, "input": [ "def get_dict(filename):\n", " \n", " columns = defaultdict(list)\n", " with open('csv/' + filename) as f:\n", " reader = csv.reader(f)\n", " reader.next()\n", " for row in reader:\n", " for (i,v) in enumerate(row):\n", " if i == 1:\n", " columns[i].append(float(v)/131072)\n", " continue\n", " columns[i].append(v)\n", " return columns\n", "\n", "blosclz = get_dict('blosclz.csv')\n", "lz4hc = get_dict('lz4hc.csv')\n", "snappy = get_dict('snappy.csv')\n", "zlib = get_dict('zlib.csv')" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's see the raw data." ] }, { "cell_type": "code", "collapsed": false, "input": [ "print 'blosclz data'\n", "df = pandas.read_csv('csv/blosclz.csv')\n", "df\n" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "blosclz data\n" ] }, { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Compression levelCompressed sizeCompression ratioCompression timeDownsampling time
0 0 600864672 0.999 2.782878 28.031901
1 1 12165281 49.321 1.763561 22.019383
2 2 11202146 53.561 1.769053 23.470012
3 3 11202146 53.561 1.822704 23.755093
4 4 10853311 55.283 1.826486 23.889582
5 5 10853311 55.283 1.836225 23.851175
6 6 10765857 55.732 1.852662 23.982295
7 7 10805864 55.525 1.803914 24.268449
8 8 10829057 55.406 1.844621 24.067227
9 9 10879027 55.152 1.889094 23.935759
\n", "

10 rows \u00d7 5 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 15, "text": [ " Compression level Compressed size Compression ratio Compression time \\\n", "0 0 600864672 0.999 2.782878 \n", "1 1 12165281 49.321 1.763561 \n", "2 2 11202146 53.561 1.769053 \n", "3 3 11202146 53.561 1.822704 \n", "4 4 10853311 55.283 1.826486 \n", "5 5 10853311 55.283 1.836225 \n", "6 6 10765857 55.732 1.852662 \n", "7 7 10805864 55.525 1.803914 \n", "8 8 10829057 55.406 1.844621 \n", "9 9 10879027 55.152 1.889094 \n", "\n", " Downsampling time \n", "0 28.031901 \n", "1 22.019383 \n", "2 23.470012 \n", "3 23.755093 \n", "4 23.889582 \n", "5 23.851175 \n", "6 23.982295 \n", "7 24.268449 \n", "8 24.067227 \n", "9 23.935759 \n", "\n", "[10 rows x 5 columns]" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "print 'lz4hc data'\n", "df = pandas.read_csv('csv/lz4hc.csv')\n", "df" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "lz4hc data\n" ] }, { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Compression levelCompressed sizeCompression ratioCompression timeDownsampling time
0 0 600864672 0.999 2.607177 26.384232
1 1 7051804 85.085 22.025753 24.304401
2 2 7051804 85.085 21.674532 25.063633
3 3 7051804 85.085 21.675338 24.217175
4 4 6629752 90.501 25.386786 23.898448
5 5 6629752 90.501 25.408783 23.106808
6 6 6416552 93.508 37.387300 17.693755
7 7 6312160 95.055 38.977684 17.679116
8 8 6312160 95.055 38.699354 17.719355
9 9 6312160 95.055 38.842180 17.736349
\n", "

10 rows \u00d7 5 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ " Compression level Compressed size Compression ratio Compression time \\\n", "0 0 600864672 0.999 2.607177 \n", "1 1 7051804 85.085 22.025753 \n", "2 2 7051804 85.085 21.674532 \n", "3 3 7051804 85.085 21.675338 \n", "4 4 6629752 90.501 25.386786 \n", "5 5 6629752 90.501 25.408783 \n", "6 6 6416552 93.508 37.387300 \n", "7 7 6312160 95.055 38.977684 \n", "8 8 6312160 95.055 38.699354 \n", "9 9 6312160 95.055 38.842180 \n", "\n", " Downsampling time \n", "0 26.384232 \n", "1 24.304401 \n", "2 25.063633 \n", "3 24.217175 \n", "4 23.898448 \n", "5 23.106808 \n", "6 17.693755 \n", "7 17.679116 \n", "8 17.719355 \n", "9 17.736349 \n", "\n", "[10 rows x 5 columns]" ] } ], "prompt_number": 16 }, { "cell_type": "code", "collapsed": false, "input": [ "print 'snappy data'\n", "df = pandas.read_csv('csv/snappy.csv')\n", "df" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "snappy data\n" ] }, { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Compression levelCompressed sizeCompression ratioCompression timeDownsampling time
0 0 600864672 0.999 2.801109 29.384442
1 1 598817657 1.002 2.807479 31.367154
2 2 598817657 1.002 4.694462 34.749116
3 3 598817657 1.002 2.703463 31.206180
4 4 598671833 1.002 2.538312 35.297246
5 5 598671833 1.002 2.621801 31.044807
6 6 580402650 1.034 2.621331 32.259069
7 7 543933158 1.103 2.541712 35.558219
8 8 543933158 1.103 2.808962 35.409513
9 9 600864672 0.999 3.597196 33.235315
\n", "

10 rows \u00d7 5 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 17, "text": [ " Compression level Compressed size Compression ratio Compression time \\\n", "0 0 600864672 0.999 2.801109 \n", "1 1 598817657 1.002 2.807479 \n", "2 2 598817657 1.002 4.694462 \n", "3 3 598817657 1.002 2.703463 \n", "4 4 598671833 1.002 2.538312 \n", "5 5 598671833 1.002 2.621801 \n", "6 6 580402650 1.034 2.621331 \n", "7 7 543933158 1.103 2.541712 \n", "8 8 543933158 1.103 2.808962 \n", "9 9 600864672 0.999 3.597196 \n", "\n", " Downsampling time \n", "0 29.384442 \n", "1 31.367154 \n", "2 34.749116 \n", "3 31.206180 \n", "4 35.297246 \n", "5 31.044807 \n", "6 32.259069 \n", "7 35.558219 \n", "8 35.409513 \n", "9 33.235315 \n", "\n", "[10 rows x 5 columns]" ] } ], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "print 'zlib data'\n", "df = pandas.read_csv('csv/zlib.csv')\n", "df" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "zlib data\n" ] }, { "html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Compression levelCompressed sizeCompression ratioCompression timeDownsampling time
0 0 600864672 0.999 2.696286 29.421912
1 1 9521032 63.018 3.106901 34.339349
2 2 9179054 65.366 3.149718 34.597896
3 3 8742380 68.631 3.139577 34.406265
4 4 6430329 93.308 6.326290 40.333203
5 5 6150632 97.551 6.540398 40.457701
6 6 5518118 108.733 12.883182 53.341339
7 7 5166095 116.142 12.944861 53.405852
8 8 4539219 132.181 17.993135 52.008409
9 9 4351807 137.874 16.323670 51.841789
\n", "

10 rows \u00d7 5 columns

\n", "
" ], "metadata": {}, "output_type": "pyout", "prompt_number": 18, "text": [ " Compression level Compressed size Compression ratio Compression time \\\n", "0 0 600864672 0.999 2.696286 \n", "1 1 9521032 63.018 3.106901 \n", "2 2 9179054 65.366 3.149718 \n", "3 3 8742380 68.631 3.139577 \n", "4 4 6430329 93.308 6.326290 \n", "5 5 6150632 97.551 6.540398 \n", "6 6 5518118 108.733 12.883182 \n", "7 7 5166095 116.142 12.944861 \n", "8 8 4539219 132.181 17.993135 \n", "9 9 4351807 137.874 16.323670 \n", "\n", " Downsampling time \n", "0 29.421912 \n", "1 34.339349 \n", "2 34.597896 \n", "3 34.406265 \n", "4 40.333203 \n", "5 40.457701 \n", "6 53.341339 \n", "7 53.405852 \n", "8 52.008409 \n", "9 51.841789 \n", "\n", "[10 rows x 5 columns]" ] } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have taken a look to the raw data let's plot a little, we may see interesting things." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "\n", "#Matplotlib magic\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "ax1 = fig.add_subplot(221)\n", "ax2 = fig.add_subplot(222)\n", "ax3 = fig.add_subplot(223)\n", "ax4 = fig.add_subplot(224)\n", "plt.subplots_adjust(wspace=0.6, hspace=0.6)\n", "ax.spines['top'].set_color('none')\n", "ax.spines['bottom'].set_color('none')\n", "ax.spines['left'].set_color('none')\n", "ax.spines['right'].set_color('none')\n", "ax.tick_params(labelcolor='w', top='off', bottom='off', left='off', right='off')\n", "plt.rcParams['figure.figsize'] = 10, 10\n", "ax.set_xlabel('Compression ratio')\n", "ax.set_ylabel('Compression level')\n", "\n", "#blosclz\n", "ax1.set_title('blosclz')\n", "ax1.plot(blosclz[2][2:], blosclz[0][2:], 'bo-')\n", "\n", "#lz4hc\n", "ax2.set_title('lz4hc')\n", "ax2.plot(lz4hc[2][2:], lz4hc[0][2:], 'bo-')\n", "\n", "#snappy\n", "ax3.set_title('snappy')\n", "ax3.plot(snappy[2][2:], snappy[0][2:], 'bo-')\n", "\n", "#zlib\n", "ax4.set_title('zlib')\n", "ax4.plot(zlib[2][2:], zlib[0][2:], 'bo-')\n", "\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we can see above, we don't always get the best compression ratio with a higher compression level. lz4hc and zlib are the only ones that behave as expected. This is because blosclz and snappy are optimized for text, not images." ] }, { "cell_type": "code", "collapsed": false, "input": [ "#Matplotlib magic\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "ax1 = fig.add_subplot(221)\n", "ax2 = fig.add_subplot(222)\n", "ax3 = fig.add_subplot(223)\n", "ax4 = fig.add_subplot(224)\n", "plt.subplots_adjust(wspace=0.6, hspace=0.6)\n", "ax.spines['top'].set_color('none')\n", "ax.spines['bottom'].set_color('none')\n", "ax.spines['left'].set_color('none')\n", "ax.spines['right'].set_color('none')\n", "ax.tick_params(labelcolor='w', top='off', bottom='off', left='off', right='off')\n", "plt.rcParams['figure.figsize'] = 10, 10\n", "ax.set_ylabel('Compression time (s)')\n", "ax.set_xlabel('Compression ratio')\n", "\n", "#blosclz\n", "ax1.set_title('blosclz')\n", "ax1.plot(blosclz[2][2:], blosclz[3][2:], 'bo-')\n", "\n", "#lz4hc\n", "ax2.set_title('lz4hc')\n", "ax2.plot(lz4hc[2][2:], lz4hc[3][2:], 'bo-')\n", "\n", "#snappy\n", "ax3.set_title('snappy')\n", "ax3.plot(snappy[2][2:], snappy[3][2:], 'bo-')\n", "\n", "#zlib\n", "ax4.set_title('zlib')\n", "ax4.plot(zlib[2][2:], zlib[3][2:], 'bo-')\n", "\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we can see that we don't always get the best compress ratio when computing longer times: \n", "\n", "* **blosc**: Gets a maximum compress ratio at compression level 6 and it takes less time than any other. This is a really fast compressor.\n", "* **lz4hc**: The higher the compression level, the better compression ratio and the higher the time.\n", "* **snappy**: It behaves poorly with images.\n", "* **zlib**: The higher the compression level, the better compression ratio it gets." ] }, { "cell_type": "code", "collapsed": false, "input": [ "#Matplotlib magic\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111)\n", "ax1 = fig.add_subplot(221)\n", "ax2 = fig.add_subplot(222)\n", "ax3 = fig.add_subplot(223)\n", "ax4 = fig.add_subplot(224)\n", "plt.subplots_adjust(wspace=0.6, hspace=0.6)\n", "ax.spines['top'].set_color('none')\n", "ax.spines['bottom'].set_color('none')\n", "ax.spines['left'].set_color('none')\n", "ax.spines['right'].set_color('none')\n", "ax.tick_params(labelcolor='w', top='off', bottom='off', left='off', right='off')\n", "plt.rcParams['figure.figsize'] = 10, 10\n", "ax.set_ylabel('Downsampling time (s)')\n", "ax.set_xlabel('Compression level')\n", "\n", "#Y value for red line\n", "Y = (float(blosclz[4][0]) + float(lz4hc[4][0]) + float(snappy[4][0]) + float(zlib[4][0]))/len(cemethods)\n", "\n", "#blosclz\n", "ax1.set_title('blosclz')\n", "ax1.plot(blosclz[0][2:], blosclz[4][2:], 'bo-')\n", "#Uncompressed point\n", "ax1.axhline(Y, color = 'r')\n", "\n", "#lz4hc\n", "ax2.set_title('lz4hc')\n", "ax2.plot(lz4hc[0][2:], lz4hc[4][2:], 'bo-')\n", "#Uncompressed point\n", "ax2.axhline(Y, color = 'r')\n", "\n", "#snappy\n", "ax3.set_title('snappy')\n", "ax3.plot(snappy[0][2:], snappy[4][2:], 'bo-')\n", "#Uncompressed point\n", "ax3.axhline(Y, color = 'r')\n", "\n", "#zlib\n", "ax4.set_title('zlib')\n", "ax4.plot(zlib[0][2:], zlib[4][2:], 'bo-')\n", "#Uncompressed point\n", "ax4.axhline(Y, color = 'r')\n", "\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n/v3706VLF7p06UKnTp3w8fExKzYRERERy7im4cucnBz27duHzWajVatWSsxERERESpnT4cvk5GTi\n4uJo0qQJYF+37P3336dr164uD05ERETEKpz2lLVv354FCxbQqlUrAPbt28d9993Htm3bTAlQRERE\nxAq8nB2Qn5/vSMgAWrZsSX5+vkuDEhEREbEapz1lDz74IN7e3owYMQLDMJg/fz4FBQX885//NCtG\nERERkXLPaU/Z22+/TXBwMElJScyYMYOQkBDefvttM2ITERGxrAceeIAJEyYAsHHjRlq3bu14r2nT\npnzxxRfuCk1cxOlEf19fX0aOHMnIkSOpW7euGTGJiIhYns1mw2azAdClSxf27NlT7HtSfpTYU2YY\nBgkJCdSuXZtWrVrRqlUrateuzcSJE7nGZ5iLiIjITdDvW2spMSmbPn06mzdv5ttvvyUrK4usrCxS\nUlLYvHkz06dPNzNGcaGpU6fSsGFDqlatSuvWrVm3bh0JCQkMHTqUuLg4qlatSmhoKN99953jnClT\nptC8eXOqVq1KSEgIixcvdrz33nvvcccdd/Dkk09SvXp1goODWbduneP96Ohoxo0bR2RkJNWqVWPQ\noEFkZWUB0K9fP/72t78Vii8sLIzPPvvMxT8FERH3+fjjj/H393dsvr6+dOvWrdAxycnJNGrUqNC+\nlJQUQkJCqFmzJvHx8eTk5JgZtrhAiUnZBx98wIcffkizZs0c+2655Rbmz5/PBx98YEpw4lp79+5l\n5syZbN26lbNnz7J69WqaNm0KwNKlSxk2bBi//vord911F0888YTjvObNm7Np0ybOnj3LSy+9xIgR\nIzh+/Ljj/ZSUFJo3b86pU6eYOHEiQ4YM4cyZM473586dy5w5czh27BgVKlRg9OjRgH3+xLx58xzH\n7dixg6NHj9KvXz8X/yRERNzn3nvv5dy5c5w7d46jR49yyy23MHz48D88xzAMPvzwQ1avXk1aWhr7\n9u3j1VdfNSlicZUSk7L8/Hzq1KlTZH+dOnW0JEY54e3tTU5ODrt27SIvL4/GjRtzyy23APb5C336\n9MFmszFixAh27NjhOC8mJobAwEAAhg4dSosWLfjmm28c79etW5ennnoKb29vhg4dSqtWrVi2bBlg\nnwcRGxtLmzZtqFKlCq+88goLFy7EMAwGDBjAvn37SEtLA+zJ23333UeFCk6nPoqIlHkFBQUMGzaM\n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\nJim7+WbYvNkoJOpOXLXr8ky+NoW5e7ex87JPH6sj8QyPPgrz5rnf9SEitdPUpe/xmqTswgshPt6o\n5+JOXL2erFL//r6VlC1dCqNGGQWE5fw6dzZ2bz31lNWRiKtUVFQQExPDoEGDAEhNTaVjx47ExMQQ\nExPDGl8/GNbDnDhh9OnadelbvCYpA/crJHv4sLEQvS4HQzdWr16wd6/7bnZwJodDU5cN8ac/Gevv\nDh2yOhJxhfnz5xMeHl51hrDNZuP+++8nOzub7OxsBprx6VCcpnLqsm1bqyMRM3lVUjZoEHzwgbE4\n0h2sX2+M3jVr5vq2mjY11g29/77r27JaTg6cPGkkolJ3nTpBSgo89pjVkYizHThwgFWrVjFu3Liq\nxcUOh0OL+D2Ypi59k1clZa1bG58sVq+2OhKDWevJKvnKurLXXzd22/4yICD1MG2a8fvLy7M6EnGm\nSZMm8fTTT+N3WjFEm83GwoUL6datG/feey+FhYUWRij1ceIErFunqUtf5FVJGbhPIVm73biorEjK\nvPnDsd1urCfT1GXDtGsH48fDvfdmkZQ0w+pwxAlWrlxJ+/btiYmJqTYydt9995GXl0dOTg4dOnTg\ngQcesDBKqY/0dLjuOk1d+iJ/qwNwtiFDYMoUKCmBgADr4ti5E1q2hCuuMK/Nzp2Nf7/6Crp0Ma9d\nM23ebJQAiYy0OhLPFR6exezZa7Hb5wBzrA5HGmnz5s2sWLGCVatWUVJSws8//8zYsWNZvHhx1WPG\njRtXtQHgTKmpqVVfx8XFERcX5+KI5Xw0del5MjMzyczMbPTreE3x2NP17QsPPmisMbNKWhocPAgL\nFpjb7j33GGds/t//mduuWf7v/yAkxDhoWxomKWkG69ZVLixT8VBvsnHjRubOnct7771Hfn4+HTp0\nAGDevHls3bqV1157rdrjVTzW/Zw4Ab/6FeTmGmfXimfy+eKxp3OHKcy1a82duqzkzevKysuNT5C3\n3WZ1JJ6ttNTrBsjlFw6Ho2r35ZQpU4iKiqJbt25s3LiRefPmWRyd1MWqVcbUpRIy3+SVI2X790NM\nDOTnG7sSzXbsmPFJ59Chs4+1cbXvvzemMX/4wZqf3ZXWrTNGyLZssToSz6aRMqmkkTL3M2oUJCbC\nuHFWRyKN4fYjZSUlJcTGxhIdHU14eDjTpk0DYObMmXTr1o3o6GgSEhLYv39/o9vq1AnCwmDjxka/\n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\nJ8EAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The red line represents the downsampling time for the uncompressed blz (mean of 4 tries), so everything lower is faster than the uncompressed data.\n", "\n", "Here we can see a few interesting things:\n", "\n", "* **blosc**: We can see how the results vary, that's because blosclz is not supposed to be used with images. But it is still a very fast compressor.\n", "* **lz4hc**: This compressor is so fast with images that it is actually faster to bring the compressed file from memory and uncompress it than getting it uncompressed. This is known as a [memory bottleneck.](http://en.wikipedia.org/wiki/Von_Neumann_architecture#Von_Neumann_bottleneck)\n", "* **snappy**: It behaves poorly with images.\n", "* **zlib**: The higher the compression level, the more time required to downsample it." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Conclusions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When working with big data (and that was not even that big) not only RAM becomes an issue. With a little more of CPU time you can save a lot of disk space (more than 500 MiB with around 4 seconds of overhead in this example), there are some times when you can even speed up things a little bit when using compression.\n", "\n", "Always pick the correct compressor for your type of data, and maybe try to do some tests first." ] } ], "metadata": {} } ] }