{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# DataSet Performance\n", "\n", "This notebook shows the trade-off between inserting data into a database row-by-row and as binary blobs. Inserting the data row-by-row means that we have direct access to all the data and may perform queries directly on the values of the data. On the other hand, as we shall see, this is much slower than inserting the data directly as binary blobs." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, we choose a new location for the database to ensure that we don't add a bunch of benchmarking data to the default one." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os\n", "\n", "cwd = os.getcwd()\n", "import qcodes as qc\n", "\n", "qc.config[\"core\"][\"db_location\"] = os.path.join(cwd, 'testing.db')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import time\n", "from pathlib import Path\n", "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "import qcodes as qc\n", "from qcodes.dataset import (\n", " Measurement,\n", " initialise_or_create_database_at,\n", " load_or_create_experiment,\n", ")\n", "from qcodes.parameters import ManualParameter" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Upgrading database; v0 -> v1: : 0it [00:00, ?it/s]\n", "Upgrading database; v1 -> v2: 100%|█████████████████████████████████████████████████████| 1/1 [00:00<00:00, 111.26it/s]\n", "Upgrading database; v2 -> v3: : 0it [00:00, ?it/s]\n", "Upgrading database; v3 -> v4: : 0it [00:00, ?it/s]\n", "Upgrading database; v4 -> v5: 100%|█████████████████████████████████████████████████████| 1/1 [00:00<00:00, 199.95it/s]\n", "Upgrading database; v5 -> v6: : 0it [00:00, ?it/s]\n", "Upgrading database; v6 -> v7: 100%|██████████████████████████████████████████████████████| 1/1 [00:00<00:00, 38.46it/s]\n", "Upgrading database; v7 -> v8: 100%|█████████████████████████████████████████████████████| 1/1 [00:00<00:00, 110.72it/s]\n" ] } ], "source": [ "initialise_or_create_database_at(Path.cwd() / \"dataset_performance.db\")\n", "exp = load_or_create_experiment(experiment_name='tutorial_exp', sample_name=\"no sample\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, we define a simple function to benchmark the time it takes to insert n points with either numeric or array data type.\n", "We will compare both the time used to call ``add_result`` and the time used for the full measurement." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def insert_data(paramtype, npoints, nreps=1):\n", "\n", " meas = Measurement(exp=exp)\n", "\n", " x1 = ManualParameter('x1')\n", " x2 = ManualParameter('x2')\n", " x3 = ManualParameter('x3')\n", " y1 = ManualParameter('y1')\n", " y2 = ManualParameter('y2')\n", "\n", " meas.register_parameter(x1, paramtype=paramtype)\n", " meas.register_parameter(x2, paramtype=paramtype)\n", " meas.register_parameter(x3, paramtype=paramtype)\n", " meas.register_parameter(y1, setpoints=[x1, x2, x3],\n", " paramtype=paramtype)\n", " meas.register_parameter(y2, setpoints=[x1, x2, x3],\n", " paramtype=paramtype)\n", " start = time.perf_counter()\n", " with meas.run() as datasaver:\n", " start_adding = time.perf_counter()\n", " for i in range(nreps):\n", " datasaver.add_result((x1, np.random.rand(npoints)),\n", " (x2, np.random.rand(npoints)),\n", " (x3, np.random.rand(npoints)),\n", " (y1, np.random.rand(npoints)),\n", " (y2, np.random.rand(npoints)))\n", " stop_adding = time.perf_counter()\n", " run_id = datasaver.run_id\n", " stop = time.perf_counter()\n", " tot_time = stop - start\n", " add_time = stop_adding - start_adding\n", " return tot_time, add_time, run_id" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Comparison between numeric/array data and binary blob" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Case1: Short experiment time" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Starting experimental run with id: 1\n", "Starting experimental run with id: 2\n", "Starting experimental run with id: 3\n", "Starting experimental run with id: 4\n", "Starting experimental run with id: 5\n", "Starting experimental run with id: 6\n", "Starting experimental run with id: 7\n", "Starting experimental run with id: 8\n", "Starting experimental run with id: 9\n", "Starting experimental run with id: 10\n", "Starting experimental run with id: 11\n", "Starting experimental run with id: 12\n", "Starting experimental run with id: 13\n", "Starting experimental run with id: 14\n" ] } ], "source": [ "sizes = [1,500,1000,2000,3000,4000,5000]\n", "t_numeric = []\n", "t_numeric_add = []\n", "t_array = []\n", "t_array_add = []\n", "for size in sizes:\n", " tn, tna, run_id_n = insert_data('numeric', size)\n", " t_numeric.append(tn)\n", " t_numeric_add.append(tna)\n", "\n", " ta, taa, run_id_a = insert_data('array', size)\n", " t_array.append(ta)\n", " t_array_add.append(taa)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1,1)\n", "ax.plot(sizes, t_numeric, 'o-', label='Inserting row-by-row')\n", "ax.plot(sizes, t_numeric_add, 'o-', label='Inserting row-by-row: add_result only')\n", "ax.plot(sizes, t_array, 'd-', label='Inserting as binary blob')\n", "ax.plot(sizes, t_array_add, 'd-', label='Inserting as binary blob: add_result only')\n", "ax.legend()\n", "ax.set_xlabel('Array length')\n", "ax.set_ylabel('Time (s)')\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As shown in the latter figure, the time to setup and and close the experiment is approximately 0.4 sec. In case of small array sizes, the difference between inserting values of data as arrays and inserting them row-by-row is relatively unimportant. At larger array sizes, i.e. above 10000 points, the cost of writing data as individual datapoints starts to become important.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Case2: Long experiment time " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Starting experimental run with id: 15\n", "Starting experimental run with id: 16\n", "Starting experimental run with id: 17\n", "Starting experimental run with id: 18\n", "Starting experimental run with id: 19\n", "Starting experimental run with id: 20\n", "Starting experimental run with id: 21\n", "Starting experimental run with id: 22\n", "Starting experimental run with id: 23\n", "Starting experimental run with id: 24\n", "Starting experimental run with id: 25\n", "Starting experimental run with id: 26\n", "Starting experimental run with id: 27\n", "Starting experimental run with id: 28\n" ] } ], "source": [ "sizes = [1,500,1000,2000,3000,4000,5000]\n", "nreps = 100\n", "t_numeric = []\n", "t_numeric_add = []\n", "t_numeric_run_ids = []\n", "t_array = []\n", "t_array_add = []\n", "t_array_run_ids = []\n", "for size in sizes:\n", " tn, tna, run_id_n = insert_data('numeric', size, nreps=nreps)\n", " t_numeric.append(tn)\n", " t_numeric_add.append(tna)\n", " t_numeric_run_ids.append(run_id_n)\n", "\n", " ta, taa, run_id_a = insert_data('array', size, nreps=nreps)\n", " t_array.append(ta)\n", " t_array_add.append(taa)\n", " t_array_run_ids.append(run_id_a)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(1,1)\n", "ax.plot(sizes, t_numeric, 'o-', label='Inserting row-by-row')\n", "ax.plot(sizes, t_numeric_add, 'o-', label='Inserting row-by-row: add_result only')\n", "ax.plot(sizes, t_array, 'd-', label='Inserting as binary blob')\n", "ax.plot(sizes, t_array_add, 'd-', label='Inserting as binary blob: add_result only')\n", "ax.legend()\n", "ax.set_xlabel('Array length')\n", "ax.set_ylabel('Time (s)')\n", "fig.tight_layout()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "However, as we increase the length of the experiment, as seen here by repeating the insertion 100 times, we see a big difference between inserting values of the data row-by-row and inserting it as a binary blob." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Loading the data " ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "from qcodes.dataset import load_by_id" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As usual you can load the data by using the ``load_by_id`` function but you will notice that the different storage methods\n", "are reflected in shape of the data as it is retrieved. " ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "run_id_n = t_numeric_run_ids[0]\n", "run_id_a = t_array_run_ids[0]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "{'x1': {'x1': array([0.08202966, 0.08202966, 0.81736 , 0.81736 , 0.37204527,\n", " 0.37204527, 0.64215591, 0.64215591, 0.42907488, 0.42907488,\n", " 0.91422619, 0.91422619, 0.48711059, 0.48711059, 0.5687964 ,\n", " 0.5687964 , 0.55769169, 0.55769169, 0.68063716, 0.68063716,\n", " 0.39693818, 0.39693818, 0.07115245, 0.07115245, 0.30753015,\n", " 0.30753015, 0.81669016, 0.81669016, 0.71676789, 0.71676789,\n", " 0.39164657, 0.39164657, 0.22781615, 0.22781615, 0.12692645,\n", " 0.12692645, 0.35825218, 0.35825218, 0.55365617, 0.55365617,\n", " 0.86899755, 0.86899755, 0.99711809, 0.99711809, 0.1422199 ,\n", " 0.1422199 , 0.13529255, 0.13529255, 0.11676167, 0.11676167,\n", " 0.52041344, 0.52041344, 0.53266126, 0.53266126, 0.33566174,\n", " 0.33566174, 0.17074707, 0.17074707, 0.26609821, 0.26609821,\n", " 0.64878666, 0.64878666, 0.40680066, 0.40680066, 0.76260801,\n", " 0.76260801, 0.82988643, 0.82988643, 0.42594241, 0.42594241,\n", " 0.25505782, 0.25505782, 0.42692093, 0.42692093, 0.16102798,\n", " 0.16102798, 0.67744127, 0.67744127, 0.71972203, 0.71972203,\n", " 0.78667903, 0.78667903, 0.32963498, 0.32963498, 0.96460611,\n", " 0.96460611, 0.84357755, 0.84357755, 0.6235959 , 0.6235959 ,\n", " 0.08189426, 0.08189426, 0.55784539, 0.55784539, 0.57925642,\n", " 0.57925642, 0.62981643, 0.62981643, 0.66787711, 0.66787711,\n", " 0.47908481, 0.47908481, 0.58068963, 0.58068963, 0.29729037,\n", " 0.29729037, 0.26277094, 0.26277094, 0.61698674, 0.61698674,\n", " 0.43012662, 0.43012662, 0.55085943, 0.55085943, 0.36183054,\n", " 0.36183054, 0.14753217, 0.14753217, 0.87692398, 0.87692398,\n", " 0.05518728, 0.05518728, 0.96710885, 0.96710885, 0.79153248,\n", " 0.79153248, 0.38286317, 0.38286317, 0.20342752, 0.20342752,\n", " 0.13601945, 0.13601945, 0.26827072, 0.26827072, 0.97185925,\n", " 0.97185925, 0.68675366, 0.68675366, 0.36971102, 0.36971102,\n", " 0.63540961, 0.63540961, 0.98329784, 0.98329784, 0.89429281,\n", " 0.89429281, 0.53237617, 0.53237617, 0.44909935, 0.44909935,\n", " 0.50965946, 0.50965946, 0.89606857, 0.89606857, 0.95121891,\n", " 0.95121891, 0.12129533, 0.12129533, 0.21761944, 0.21761944,\n", " 0.6268567 , 0.6268567 , 0.39633933, 0.39633933, 0.29943907,\n", " 0.29943907, 0.12229129, 0.12229129, 0.26713706, 0.26713706,\n", " 0.8498325 , 0.8498325 , 0.91354633, 0.91354633, 0.86042504,\n", " 0.86042504, 0.70061487, 0.70061487, 0.08552322, 0.08552322,\n", " 0.07936403, 0.07936403, 0.83829902, 0.83829902, 0.05007236,\n", " 0.05007236, 0.34722175, 0.34722175, 0.8549174 , 0.8549174 ,\n", " 0.97052411, 0.97052411, 0.12970903, 0.12970903, 0.12443746,\n", " 0.12443746, 0.44431197, 0.44431197, 0.34393138, 0.34393138])}}" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds = load_by_id(run_id_n)\n", "ds.get_parameter_data('x1')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And a dataset stored as binary arrays" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "{'x1': {'x1': array([[0.84365556],\n", " [0.84365556],\n", " [0.30271886],\n", " [0.30271886],\n", " [0.03745168],\n", " [0.03745168],\n", " [0.50045271],\n", " [0.50045271],\n", " [0.6992901 ],\n", " [0.6992901 ],\n", " [0.89623464],\n", " [0.89623464],\n", " [0.13055468],\n", " [0.13055468],\n", " [0.42048143],\n", " [0.42048143],\n", " [0.34587721],\n", " [0.34587721],\n", " [0.83386739],\n", " [0.83386739],\n", " [0.84585952],\n", " [0.84585952],\n", " [0.19556866],\n", " [0.19556866],\n", " [0.56415701],\n", " [0.56415701],\n", " [0.68068917],\n", " [0.68068917],\n", " [0.32230348],\n", " [0.32230348],\n", " [0.22598923],\n", " [0.22598923],\n", " [0.20068153],\n", " [0.20068153],\n", " [0.96070706],\n", " [0.96070706],\n", " [0.49664629],\n", " [0.49664629],\n", " [0.33654637],\n", " [0.33654637],\n", " [0.33698624],\n", " [0.33698624],\n", " [0.5530871 ],\n", " [0.5530871 ],\n", " [0.66498216],\n", " [0.66498216],\n", " [0.96038174],\n", " [0.96038174],\n", " [0.58180983],\n", " [0.58180983],\n", " [0.88381683],\n", " [0.88381683],\n", " [0.58146039],\n", " [0.58146039],\n", " [0.29067461],\n", " [0.29067461],\n", " [0.73548659],\n", " [0.73548659],\n", " [0.71566389],\n", " [0.71566389],\n", " [0.33592869],\n", " [0.33592869],\n", " [0.82891979],\n", " [0.82891979],\n", " [0.29425937],\n", " [0.29425937],\n", " [0.52277935],\n", " [0.52277935],\n", " [0.99382977],\n", " [0.99382977],\n", " [0.75594392],\n", " [0.75594392],\n", " [0.95034577],\n", " [0.95034577],\n", " [0.25983605],\n", " [0.25983605],\n", " [0.78885714],\n", " [0.78885714],\n", " [0.7285124 ],\n", " [0.7285124 ],\n", " [0.94490025],\n", " [0.94490025],\n", " [0.61913981],\n", " [0.61913981],\n", " [0.0486679 ],\n", " [0.0486679 ],\n", " [0.45029643],\n", " [0.45029643],\n", " [0.34801477],\n", " [0.34801477],\n", " [0.91711183],\n", " [0.91711183],\n", " [0.24487605],\n", " [0.24487605],\n", " [0.32663955],\n", " [0.32663955],\n", " [0.02492608],\n", " [0.02492608],\n", " [0.23145667],\n", " [0.23145667],\n", " [0.34212723],\n", " [0.34212723],\n", " [0.5479936 ],\n", " [0.5479936 ],\n", " [0.29172018],\n", " [0.29172018],\n", " [0.16603586],\n", " [0.16603586],\n", " [0.32246468],\n", " [0.32246468],\n", " [0.91298651],\n", " [0.91298651],\n", " [0.62585394],\n", " [0.62585394],\n", " [0.31829665],\n", " [0.31829665],\n", " [0.69378388],\n", " [0.69378388],\n", " [0.21653283],\n", " [0.21653283],\n", " [0.13432642],\n", " [0.13432642],\n", " [0.63437323],\n", " [0.63437323],\n", " [0.37152074],\n", " [0.37152074],\n", " [0.9777009 ],\n", " [0.9777009 ],\n", " [0.88118159],\n", " [0.88118159],\n", " [0.50597168],\n", " [0.50597168],\n", " [0.30776914],\n", " [0.30776914],\n", " [0.81870493],\n", " [0.81870493],\n", " [0.09389452],\n", " [0.09389452],\n", " [0.08229414],\n", " [0.08229414],\n", " [0.2394651 ],\n", " [0.2394651 ],\n", " [0.43591526],\n", " [0.43591526],\n", " [0.87484168],\n", " [0.87484168],\n", " [0.7203893 ],\n", " [0.7203893 ],\n", " [0.3248851 ],\n", " [0.3248851 ],\n", " [0.02897133],\n", " [0.02897133],\n", " [0.26393425],\n", " [0.26393425],\n", " [0.12966987],\n", " [0.12966987],\n", " [0.75482989],\n", " [0.75482989],\n", " [0.31662415],\n", " [0.31662415],\n", " [0.11957325],\n", " [0.11957325],\n", " [0.31395142],\n", " [0.31395142],\n", " [0.5000275 ],\n", " [0.5000275 ],\n", " [0.52358683],\n", " [0.52358683],\n", " [0.95638326],\n", " [0.95638326],\n", " [0.88934205],\n", " [0.88934205],\n", " [0.22408625],\n", " [0.22408625],\n", " [0.65085448],\n", " [0.65085448],\n", " [0.11088959],\n", " [0.11088959],\n", " [0.70819586],\n", " [0.70819586],\n", " [0.74773398],\n", " [0.74773398],\n", " [0.81457819],\n", " [0.81457819],\n", " [0.41284348],\n", " [0.41284348],\n", " [0.1538248 ],\n", " [0.1538248 ],\n", " [0.93380165],\n", " [0.93380165],\n", " [0.68450335],\n", " [0.68450335],\n", " [0.95488727],\n", " [0.95488727],\n", " [0.41080739],\n", " [0.41080739],\n", " [0.90861652],\n", " [0.90861652],\n", " [0.47719486],\n", " [0.47719486]])}}" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ds = load_by_id(run_id_a)\n", "ds.get_parameter_data('x1')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.10" }, "nbsphinx": { "timeout": 600 }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 4 }