{"id":46616,"date":"2021-01-21T00:00:00","date_gmt":"2021-01-21T08:00:00","guid":{"rendered":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/blog\/griddb-optimization-with-multi-put-and-query\/"},"modified":"2025-11-13T12:55:00","modified_gmt":"2025-11-13T20:55:00","slug":"griddb-optimization-with-multi-put-and-query","status":"publish","type":"post","link":"https:\/\/griddb.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/","title":{"rendered":"GridDB Optimization with Multi-Put and Query"},"content":{"rendered":"<p>In this blog post, we demonstrate how GridDB&#8217;s batch operations (multi-put and multi-query) can improve the performance of your application. <\/p>\n<h1>Multi Put<\/h1>\n<p>Batch write operations are used in many scenarios; bulk loading of previously recorded data, receiving multiple sensor readings from an edge device in one input or the purposeful caching of incoming data within the data collector to improve efficiency. Batch query operations are used to merge data from multiple containers or to perform multiple aggregations efficiently. <\/p>\n<h2>Single Container<\/h2>\n<p>In our first example, we write 10000 rows one at a time to a single container:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">blob = bytearray([65, 66, 67, 68, 69, 70, 71, 72, 73, 74])\n\nconInfo = griddb.ContainerInfo(\"col01\",\n    [[\"name\", griddb.Type.STRING],\n    [\"status\", griddb.Type.BOOL],\n    [\"count\", griddb.Type.LONG],\n    [\"lob\", griddb.Type.BLOB]],\n    griddb.ContainerType.COLLECTION, True)\ncol = gridstore.put_container(conInfo)\n\ni=0\nstart =  datetime.datetime.utcnow().timestamp()\nwhile i < 10000:\n    row = [str(uuid.uuid1()), False, random.randint(0, 1048576), blob]\n    col.put(row)\n    i=i+1\nprint(\"single put took \"+  str(datetime.datetime.utcnow().timestamp() - start) +\" seconds\")<\/code><\/pre>\n<\/div>\n<p>However we can optimize that; instead of writing one row 10000 times, we write 1000 rows 10 times:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">col = gridstore.put_container(conInfo)\ni=0\nstart =  datetime.datetime.utcnow().timestamp()\nrows=[]\nwhile i < 10000:\n    rows.append([str(uuid.uuid1()), False, random.randint(0, 1048576), blob])\n    if i != 0 and i% 1000 == 0:\n        col.multi_put(rows)\n        rows=[]\n    i=i+1\nprint(\"multiput put took \"+  str(datetime.datetime.utcnow().timestamp() - start) +\" seconds\")<\/code><\/pre>\n<\/div>\n<p>The single put took <b>0.92 seconds<\/b> while multiput put took <b>0.32<\/b> seconds, a 290% improvement. <\/p>\n<h2>Multiple Containers<\/h2>\n<p>In general, writing to multiple containers with multi-put is done when you're streaming platform such as Kafka and data for multiple sensors is in the collection of records fetched from Kafka in your Sink connector or Consumer application. <\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">start =  datetime.datetime.utcnow().timestamp()\nfor no in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]:\n    col = cols[no]\n    i=0\n    rows=[]\n    while i < 10000:\n        rows.append([str(uuid.uuid1()), False, random.randint(0, 1048576), blob])\n        if i != 0 and i% 1000 == 0:\n            col.multi_put(rows)\n            rows=[]\n        i=i+1\n\nprint(\"single container multi put took \"+  str(datetime.datetime.utcnow().timestamp() - start) +\" seconds\")<\/code><\/pre>\n<\/div>\n<p>Now to write multiple containers with multi-put, gridstore.multi_put() where the map <\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">start =  datetime.datetime.utcnow().timestamp()\ni=0\nentries={}\nfor no in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]:\n    rows=[]\n    i=0\n    while i < 10000:\n        rows.append([str(uuid.uuid1()), False, random.randint(0, 1048576), blob])\n        i=i+1\n    entries[\"col0\"+str(no)] = rows\ngridstore.multi_put(entries)\n\nprint(\"multi container multi put took \"+  str(datetime.datetime.utcnow().timestamp() - start) +\" seconds\")<\/code><\/pre>\n<\/div>\n<p>The single container multi put took <b>3.92<\/b> seconds while the multi container multi put improved performance by 25% and took <b>3.13<\/b> seconds. <\/p>\n<p>Now, why is the multiple container test so much slower and rate of improvement down? Well, first of all it is writing 10x as much data and that explains the overall difference but the reduced improvement can be explained by the size of the data transfer. The first single container, single put test has very small data transfer sizes and thus the overhead per record is very high while the single-container, multi-put has a larger data transfer size and the overhead per record is already low. Multi-puting to multiple containers does not significantly reduce the overhead.<\/p>\n<h1>Multi Query<\/h1>\n<p>Multi-queries are typically used when data from multiple containers is used in a single report. <\/p>\n<h2>10 Containers<\/h2>\n<p>Executing a single container at a time looks like this:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">start =  datetime.datetime.utcnow().timestamp()\nfor no in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]:\n    col = gridstore.get_container(\"col0\"+str(no))\n\n    query = col.query(\"select *\")\n    rs = query.fetch(False)\n    while rs.has_next():\n        data = rs.next()\nprint(\"single container query took \"+  str(datetime.datetime.utcnow().timestamp() - start) +\" seconds\")<\/code><\/pre>\n<\/div>\n<p>gridstore.fetch_all() is used to query multiple containers:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">queries=[]\ncol={}\nstart =  datetime.datetime.utcnow().timestamp()\nfor no in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]:\n    col[no] = gridstore.get_container(\"col0\"+str(no))\n    query = col[no].query(\"select *\")\n    if query != None:\n        queries.append(query)\n\ngridstore.fetch_all(queries)\n\nfor query in queries:\n    rs = query.get_row_set()\n    while rs.has_next():\n        data = rs.next()\nprint(\"multi container query took \"+  str(datetime.datetime.utcnow().timestamp() - start) +\" seconds\")<\/code><\/pre>\n<\/div>\n<p>The single container query took <b>0.34 seconds<\/b> and multi container query took <b>0.28 seconds<\/b> an improvement of 20%.<\/p>\n<h2>100 Containers<\/h2>\n<p>Now, let's try querying 100 containers with a query that returns 1 row each, without multi-put it looks like this:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">start =  datetime.datetime.utcnow().timestamp()\nfor no in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, \n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9,\n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9, \n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9,\n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9, \n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9,\n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9,\n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9,\n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9, \n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9  ]:\n\n\n    col = gridstore.get_container(\"col0\"+str(no))\n\n    query = col.query(\"select * limit 1\")\n    rs = query.fetch(False)\n    while rs.has_next():\n        data = rs.next()\nprint(\"single container query took \"+  str(datetime.datetime.utcnow().timestamp() - start) +\" seconds\")<\/code><\/pre>\n<\/div>\n<p>With multi-query:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">queries=[]\ncol={}\nstart =  datetime.datetime.utcnow().timestamp()\nfor no in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, \n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9,\n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9, \n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9,\n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9, \n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9,\n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9,\n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9,\n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9, \n           0, 1, 2, 3, 4, 5, 6, 7, 8, 9  ]:\n\n    if col.get(no) == None:\n        col[no] = gridstore.get_container(\"col0\"+str(no))\n    query = col[no].query(\"select * limit 1\")\n    if query != None:\n        queries.append(query)\n\ngridstore.fetch_all(queries) \n\nfor query in queries:\n    rs = query.get_row_set()\n    while rs.has_next():\n        data = rs.next()\n\nprint(\"multi container query took \"+  str(datetime.datetime.utcnow().timestamp() - start) +\" seconds\")<\/code><\/pre>\n<\/div>\n<p>The single container query took <b>0.04 seconds<\/b> while the multiple container query took <b>0.01 seconds<\/b> which is 671% faster.<\/p>\n<h2>Aggregations<\/h2>\n<p>Without multiple <\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">start =  datetime.datetime.utcnow().timestamp()\nfor no in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:\n    col = gridstore.get_container(\"col0\"+str(no))\n    for agg in [ \"min\", \"max\", \"avg\", \"count\", \"stddev\"]:\n        query = col.query(\"select \"+agg+\"(count) \")\n        rs = query.fetch(False)\n        while rs.has_next():\n            data = rs.next()\nprint(\"single aggregation query took \"+  str(datetime.datetime.utcnow().timestamp() - start) +\" seconds\")<\/code><\/pre>\n<\/div>\n<p>With Multi-Query:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-python\">queries=[]\ncol={}\nstart =  datetime.datetime.utcnow().timestamp()\nfor no in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:\n\n    if col.get(no) == None:\n        col[no] = gridstore.get_container(\"col0\"+str(no))\n    for agg in [ \"min\", \"max\", \"avg\", \"count\", \"stddev\"]:\n        query = col[no].query(\"select min(count)\")\n        if query != None:\n            queries.append(query)\n\ngridstore.fetch_all(queries)\n\nfor query in queries:\n    rs = query.get_row_set()\n    while rs.has_next():\n        data = rs.next()\n\nprint(\"multi aggregation query took \"+  str(datetime.datetime.utcnow().timestamp() - start) +\" seconds\")<\/code><\/pre>\n<\/div>\n<p>The single aggregation queries took <b>0.08<\/b> seconds, while multi aggregation queries took <b>0.06<\/b> seconds, an improvement of 39%.<\/p>\n<h1>To Conclude<\/h1>\n<p>Multi-put and query can drastically improve the performance of your GridDB application but care must be taken to confirm the improvements. <\/p>\n<p>The amount of data put or queried determines the factor that multi-put\/query improve performance. If each put or query transfers large amounts of data the amount of performance gained will be diminished. My experience is that requests that transfer more data than the GridDB data block size, which is by default 64kb will no longer keep gaining performance. Queries that require extra computation (where-clauses, order by, or aggregations) can also affect multi-query performance.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this blog post, we demonstrate how GridDB&#8217;s batch operations (multi-put and multi-query) can improve the performance of your application. Multi Put Batch write operations are used in many scenarios; bulk loading of previously recorded data, receiving multiple sensor readings from an edge device in one input or the purposeful caching of incoming data within [&hellip;]<\/p>\n","protected":false},"author":71,"featured_media":26914,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[121],"tags":[],"class_list":["post-46616","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>GridDB Optimization with Multi-Put and Query | GridDB: Open Source Time Series Database for IoT<\/title>\n<meta name=\"description\" content=\"In this blog post, we demonstrate how GridDB&#039;s batch operations (multi-put and multi-query) can improve the performance of your application. Multi Put\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GridDB Optimization with Multi-Put and Query | GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"og:description\" content=\"In this blog post, we demonstrate how GridDB&#039;s batch operations (multi-put and multi-query) can improve the performance of your application. Multi Put\" \/>\n<meta property=\"og:url\" content=\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/\" \/>\n<meta property=\"og:site_name\" content=\"GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/griddbcommunity\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-21T08:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-13T20:55:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/griddb.net\/wp-content\/uploads\/2020\/09\/MultiPut_Query-Performance-Improvement-Lower-is-Better-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"600\" \/>\n\t<meta property=\"og:image:height\" content=\"371\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Owen\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:site\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Owen\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/\"},\"author\":{\"name\":\"Owen\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/person\/0f2f6d4b593adde8c43cf3ea5c794c66\"},\"headline\":\"GridDB Optimization with Multi-Put and Query\",\"datePublished\":\"2021-01-21T08:00:00+00:00\",\"dateModified\":\"2025-11-13T20:55:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/\"},\"wordCount\":505,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/griddb.net\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2020\/09\/MultiPut_Query-Performance-Improvement-Lower-is-Better-1.png\",\"articleSection\":[\"Blog\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/\",\"url\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/\",\"name\":\"GridDB Optimization with Multi-Put and Query | GridDB: Open Source Time Series Database for IoT\",\"isPartOf\":{\"@id\":\"https:\/\/griddb.net\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2020\/09\/MultiPut_Query-Performance-Improvement-Lower-is-Better-1.png\",\"datePublished\":\"2021-01-21T08:00:00+00:00\",\"dateModified\":\"2025-11-13T20:55:00+00:00\",\"description\":\"In this blog post, we demonstrate how GridDB's batch operations (multi-put and multi-query) can improve the performance of your application. Multi Put\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/#primaryimage\",\"url\":\"\/wp-content\/uploads\/2020\/09\/MultiPut_Query-Performance-Improvement-Lower-is-Better-1.png\",\"contentUrl\":\"\/wp-content\/uploads\/2020\/09\/MultiPut_Query-Performance-Improvement-Lower-is-Better-1.png\",\"width\":600,\"height\":371},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/griddb.net\/en\/#website\",\"url\":\"https:\/\/griddb.net\/en\/\",\"name\":\"GridDB: Open Source Time Series Database for IoT\",\"description\":\"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL\",\"publisher\":{\"@id\":\"https:\/\/griddb.net\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/griddb.net\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/griddb.net\/en\/#organization\",\"name\":\"Fixstars\",\"url\":\"https:\/\/griddb.net\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"contentUrl\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"width\":200,\"height\":83,\"caption\":\"Fixstars\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/griddbcommunity\/\",\"https:\/\/x.com\/GridDBCommunity\",\"https:\/\/www.linkedin.com\/company\/griddb-by-toshiba\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/person\/0f2f6d4b593adde8c43cf3ea5c794c66\",\"name\":\"Owen\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/47438a5c81215c7a9043be1b427e0bbd8dc0f77bd536f147f8495575149e4325?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/47438a5c81215c7a9043be1b427e0bbd8dc0f77bd536f147f8495575149e4325?s=96&d=mm&r=g\",\"caption\":\"Owen\"},\"url\":\"https:\/\/griddb.net\/en\/author\/owen\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"GridDB Optimization with Multi-Put and Query | GridDB: Open Source Time Series Database for IoT","description":"In this blog post, we demonstrate how GridDB's batch operations (multi-put and multi-query) can improve the performance of your application. Multi Put","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/","og_locale":"en_US","og_type":"article","og_title":"GridDB Optimization with Multi-Put and Query | GridDB: Open Source Time Series Database for IoT","og_description":"In this blog post, we demonstrate how GridDB's batch operations (multi-put and multi-query) can improve the performance of your application. Multi Put","og_url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/","og_site_name":"GridDB: Open Source Time Series Database for IoT","article_publisher":"https:\/\/www.facebook.com\/griddbcommunity\/","article_published_time":"2021-01-21T08:00:00+00:00","article_modified_time":"2025-11-13T20:55:00+00:00","og_image":[{"width":600,"height":371,"url":"https:\/\/griddb.net\/wp-content\/uploads\/2020\/09\/MultiPut_Query-Performance-Improvement-Lower-is-Better-1.png","type":"image\/png"}],"author":"Owen","twitter_card":"summary_large_image","twitter_creator":"@GridDBCommunity","twitter_site":"@GridDBCommunity","twitter_misc":{"Written by":"Owen","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/#article","isPartOf":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/"},"author":{"name":"Owen","@id":"https:\/\/griddb.net\/en\/#\/schema\/person\/0f2f6d4b593adde8c43cf3ea5c794c66"},"headline":"GridDB Optimization with Multi-Put and Query","datePublished":"2021-01-21T08:00:00+00:00","dateModified":"2025-11-13T20:55:00+00:00","mainEntityOfPage":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/"},"wordCount":505,"commentCount":0,"publisher":{"@id":"https:\/\/griddb.net\/en\/#organization"},"image":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2020\/09\/MultiPut_Query-Performance-Improvement-Lower-is-Better-1.png","articleSection":["Blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/","url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/","name":"GridDB Optimization with Multi-Put and Query | GridDB: Open Source Time Series Database for IoT","isPartOf":{"@id":"https:\/\/griddb.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/#primaryimage"},"image":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2020\/09\/MultiPut_Query-Performance-Improvement-Lower-is-Better-1.png","datePublished":"2021-01-21T08:00:00+00:00","dateModified":"2025-11-13T20:55:00+00:00","description":"In this blog post, we demonstrate how GridDB's batch operations (multi-put and multi-query) can improve the performance of your application. Multi Put","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/blog\/griddb-optimization-with-multi-put-and-query\/#primaryimage","url":"\/wp-content\/uploads\/2020\/09\/MultiPut_Query-Performance-Improvement-Lower-is-Better-1.png","contentUrl":"\/wp-content\/uploads\/2020\/09\/MultiPut_Query-Performance-Improvement-Lower-is-Better-1.png","width":600,"height":371},{"@type":"WebSite","@id":"https:\/\/griddb.net\/en\/#website","url":"https:\/\/griddb.net\/en\/","name":"GridDB: Open Source Time Series Database for IoT","description":"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL","publisher":{"@id":"https:\/\/griddb.net\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/griddb.net\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/griddb.net\/en\/#organization","name":"Fixstars","url":"https:\/\/griddb.net\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb.net\/en\/#\/schema\/logo\/image\/","url":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","contentUrl":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","width":200,"height":83,"caption":"Fixstars"},"image":{"@id":"https:\/\/griddb.net\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/griddbcommunity\/","https:\/\/x.com\/GridDBCommunity","https:\/\/www.linkedin.com\/company\/griddb-by-toshiba"]},{"@type":"Person","@id":"https:\/\/griddb.net\/en\/#\/schema\/person\/0f2f6d4b593adde8c43cf3ea5c794c66","name":"Owen","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/griddb.net\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/47438a5c81215c7a9043be1b427e0bbd8dc0f77bd536f147f8495575149e4325?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/47438a5c81215c7a9043be1b427e0bbd8dc0f77bd536f147f8495575149e4325?s=96&d=mm&r=g","caption":"Owen"},"url":"https:\/\/griddb.net\/en\/author\/owen\/"}]}},"_links":{"self":[{"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/posts\/46616","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/comments?post=46616"}],"version-history":[{"count":1,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/posts\/46616\/revisions"}],"predecessor-version":[{"id":51294,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/posts\/46616\/revisions\/51294"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/media\/26914"}],"wp:attachment":[{"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/media?parent=46616"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/categories?post=46616"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/griddb.net\/en\/wp-json\/wp\/v2\/tags?post=46616"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}