{"id":1882,"date":"2016-07-19T13:52:01","date_gmt":"2016-07-19T12:52:01","guid":{"rendered":"https:\/\/www.inovex.de\/\/?p=1882"},"modified":"2026-03-17T08:00:44","modified_gmt":"2026-03-17T07:00:44","slug":"drastic-elastic-part-1","status":"publish","type":"post","link":"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/","title":{"rendered":"Drastic Elastic [Part 1]: ElasticSearch as a Database"},"content":{"rendered":"<p>In an article for Java Magazin way back in 2012 (only a small section of it seems to have <a href=\"https:\/\/jaxenter.de\/auf-der-suche-nach-dem-heiligen-gral-4724\" target=\"_blank\" rel=\"noopener\">survived online(!)<\/a>, although it is still available from the <a href=\"https:\/\/www.inovex.de\">inovex website<\/a> as a download) I toyed with the idea of using a search engine as a database (not such an unconventional idea, it turned out, since Elastic from time to time decribes its search engine as being a database too), mainly due to cost and usability considerations. The idea gained traction with the release of the aggregation framework in early 2015 and a few months later I was involved with a project where we decided to leverage <a href=\"https:\/\/www.inovex.de\/blog\/empfehlungsgenerierung-mit-elasticsearch\/\">elasticsearch<\/a> aggregations for the analysis of internet statistics. In this article I want to share my experience.<!--more--><\/p>\n<p>The requirements can be summarised briefly as follows:<\/p>\n<ul>\n<li>load data to elastics indexes in near real time\n<ul>\n<li>up to 50,000 writes per second<\/li>\n<\/ul>\n<\/li>\n<li>aggregate data across 5-minute, hourly and daily intervals<\/li>\n<li>the retention period is dependent on aggregation level\n<ul>\n<li>5 minute aggregation =&gt; one day<\/li>\n<li>hourly aggregations =&gt; 7 days<\/li>\n<li>daily aggregations =&gt; 5 years<\/li>\n<\/ul>\n<\/li>\n<li>data to be consumed in a web frontend with reponse times of &lt; 10s<\/li>\n<li>elasticsearch acts as the primary data source and as such the cluster should guard against data loss, implement a failover strategy etc.<\/li>\n<\/ul>\n<p>N.B. our use-case is such that we know that all searches will be discrete\/exact i.e. we can turn off all text-search settings such as stemming, analyzing etc. This has a significant bearing on data storage.<\/p>\n<p>I&#8217;ll be looking at some interesting technical aspects of the implementation in this and subsequent blog articles, with particular emphasis on features where we (intentionally and sometimes unintentionally!) push the envelope on performance \u2013 hence the title of this mini-series. We will start with bulk loading.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\"><\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#Setting-the-scene\" >Setting the scene<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#Cluster-settingsconfiguration\" >Cluster settings\/configuration<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#Bulk-import-Lessons-learned\" >Bulk import : Lessons learned<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#Read-on-%E2%80%A6\" >Read on &#8230;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#Join-us\" >Join us!<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#Read-the-complete-series\" >Read the complete series<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Setting-the-scene\"><\/span>Setting the scene<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1889\" src=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-architecture-1024x576.png\" alt=\"Elastic Architecture\" width=\"800\" height=\"450\" srcset=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-architecture-1024x576.png 1024w, https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-architecture-300x169.png 300w, https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-architecture-768x432.png 768w, https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-architecture-1536x864.png 1536w, https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-architecture-400x225.png 400w, https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-architecture-720x406.png 720w, https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-architecture-360x203.png 360w, https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-architecture.png 1920w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/p>\n<p>Our data is provided by a separate component, <a href=\"http:\/\/www.pmacct.net\/\" target=\"_blank\" rel=\"noopener\">pmacct<\/a>, and can be read directly from memory or from files written to disk. We opted to persist files first to disk to preserve a clean interface between data collection (the details of which are outside the scope of this article) and bulk loading. We initially looked at logstash as an interface between these files and elasticsearch, but quickly realised that the amount of pre-processing\/data transformation was not possible using logstash configuration alone and so decided to build our own bulk import component, a simple command line tool written in java. In this we were helped greatly by the BulkProcessor class made available in the elasticsearch source code, described as such:<\/p>\n<pre class=\"lang:java decode:true \">\/**\r\n\r\n * A bulk processor is a thread safe bulk processing class, allowing to easily set when to \"flush\" a new bulk request\r\n\r\n * (either based on number of actions, based on the size, or time), and to easily control the number of concurrent bulk\r\n\r\n * requests allowed to be executed in parallel.\r\n\r\n * &lt;p\/&gt;\r\n\r\n * In order to create a new bulk processor, use the {@link Builder}.\r\n\r\n *\/\r\n\r\npublic class BulkProcessor implements Closeable {\r\n\r\n...<\/pre>\n<p>The BulkProcessor takes care of loading and flushing data from multiple threads and is simple to use. It can be configured to flush either by time, or, as shown below, when a defined bach size is reached:<\/p>\n<pre class=\"lang:java decode:true \">public static BulkProcessor getBulkProcessor(Client client, int flushSize, int concurrency, Listener listener) {\r\n\r\n\t\tLOG.info(\"Initializing BulkProcessor with [{}] concurrent requests.\", concurrency);\r\n\r\n\t\treturn BulkProcessor.builder(client, listener).setConcurrentRequests(concurrency).setBulkActions(flushSize)\r\n\r\n\t\t\t\t.build();\r\n\r\n\t}\r\n\r\n<\/pre>\n<p>You can then easily pass objects (as IndexRequests) to your bulk processor instance and they will be executed against the search server as determined by your flush settings e.g.<\/p>\n<pre class=\"lang:java decode:true \">bulkProcessor.add(client.prepareIndex(indexName, typeName).setSource(documentAsJson).request());\r\n\r\n<\/pre>\n<p>With judicious cluster settings we hav been able to achieve 50k-60k inserts per second from a single instance of our bulk import tool.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Cluster-settingsconfiguration\"><\/span>Cluster settings\/configuration<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Apart from <a href=\"https:\/\/www.elastic.co\/blog\/found-crash-elasticsearch\" target=\"_blank\" rel=\"noopener\">well-documented<\/a> <a href=\"https:\/\/www.elastic.co\/blog\/performance-considerations-elasticsearch-indexing\" target=\"_blank\" rel=\"noopener\">best<\/a> <a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/guide\/current\/_limiting_memory_usage.html\" target=\"_blank\" rel=\"noopener\">practices<\/a> we found the following settings to be useful:<\/p>\n<p><strong>index.number_of_replicas: 1<\/strong><\/p>\n<p>Explanation: we started with a single replica to keep the amount of background activity to a mimimum. This number can and should of course be reviewed in the context of failover mechanisms and cluster stability.<\/p>\n<p><strong>index.merge.scheduler.max_thread_count: 3 (as we use SSDs)<\/strong><\/p>\n<p>From the <a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/reference\/1.6\/index-modules-merge.html\" target=\"_blank\" rel=\"noopener\">elasticsearch documentation<\/a>: &#8222;The maximum number of threads that may be merging at once. Defaults to Math.max(1, Math.min(3, Runtime.getRuntime().availableProcessors() \/ 2)) which works well for a good solid-state-disk (SSD). If your index is on spinning platter drives instead, decrease this to 1.&#8220;<\/p>\n<p><strong>index.refresh_interval: 30s<\/strong><\/p>\n<p>Explanation: keep this well away from the default of 1s in write-heavy environments<\/p>\n<p><strong>index.translog.flush_threshold_size: 1gb<\/strong><\/p>\n<p>From the <a href=\"https:\/\/www.elastic.co\/guide\/en\/elasticsearch\/guide\/current\/indexing-performance.html\" target=\"_blank\" rel=\"noopener\">elasticsearch documentation<\/a>: &#8222;Finally, you can increase index.translog.flush_threshold_size from the default 512 MB to something larger, such as 1 GB. This allows larger segments to accumulate in the translog before a flush occurs. By letting larger segments build, you flush less often, and the larger segments merge less often. All of this adds up to less disk I\/O overhead and better indexing rates. Of course, you will need the corresponding amount of heap memory free to accumulate the extra buffering space, so keep that in mind when adjusting this setting.&#8220;<\/p>\n<p><strong>threadpool.bulk.queue_size: 3000<\/strong><\/p>\n<p>Explanation: see <a href=\"https:\/\/www.loggly.com\/blog\/nine-tips-configuring-elasticsearch-for-high-performance\/\" target=\"_blank\" rel=\"noopener\">this article on loggly<\/a>, Tip #9<\/p>\n<p><strong>indices.memory.index_buffer_size: 30%<\/strong><\/p>\n<h2><span class=\"ez-toc-section\" id=\"Bulk-import-Lessons-learned\"><\/span>Bulk import : Lessons learned<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>Elasticsearch offers the ability to join data across indices, although this is most appropriate when one source\/index is small: for large-scale joins or complex lookups it is advisable to consider denormalising data as much as is practical before writing to indices. This reduces the heavy-lifting needed by the server when performing reads.<\/li>\n<li>use solid-state disks in read-heavy environments (if possible!)<\/li>\n<li>eventually we used the built-in (since deprecated) feature of using a field as the document ID. Relying on the generated ID means that although the ID is logged back with any bulk-import error message, if it happends to be an ID about which the client knows nothing, then it difficult to isolate the cause! Our workaround was to construct a surrogate key using the line number of the source file as the prefix of the ID so that we could identify and write out offending rows to &#8222;bad&#8220; files.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"Read-on-%E2%80%A6\"><\/span>Read on &#8230;<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>So you&#8217;re interested in search based applications, text analytics and enterprise search solutions? Have a look at <a href=\"https:\/\/www.inovex.de\/en\/our-services\/analytics\/search\/\" target=\"_blank\" rel=\"noopener\">our website<\/a> and read about the services we offer to our customers.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Join-us\"><\/span>Join us!<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Are you looking for a job in big data processing or analytics? We&#8217;re currently hiring!<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Read-the-complete-series\"><\/span>Read the complete series<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li><a href=\"https:\/\/www.inovex.de\/blog\/drastic-elastic-part-2\/\">Part 2: The aggregation framework<\/a><\/li>\n<li><a href=\"https:\/\/www.inovex.de\/blog\/drastic-elastic-part-3\/\">Part 3: Cluster Setup<\/a><\/li>\n<li><a href=\"https:\/\/www.inovex.de\/blog\/drastic-elastic-part-4-aggregations-plugins\/\">Part 4: Aggregations &amp; Plugins<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In an article for Java Magazin way back in 2012 (only a small section of it seems to have survived online(!), although it is still available from the inovex website as a download) I toyed with the idea of using a search engine as a database (not such an unconventional idea, it turned out, since [&hellip;]<\/p>\n","protected":false},"author":49,"featured_media":1892,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"ep_exclude_from_search":false,"footnotes":""},"tags":[82],"service":[504],"coauthors":[{"id":49,"display_name":"Andrew Kenworthy","user_nicename":"akenworthy"}],"class_list":["post-1882","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-search","service-search"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Drastic Elastic [Part 1]: ElasticSearch as a Database - inovex GmbH<\/title>\n<meta name=\"description\" content=\"Idea of using a search engine as a database, mainly due to cost and usability considerations. In this article I want to share my experience.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Drastic Elastic [Part 1]: ElasticSearch as a Database - inovex GmbH\" \/>\n<meta property=\"og:description\" content=\"Idea of using a search engine as a database, mainly due to cost and usability considerations. In this article I want to share my experience.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"inovex GmbH\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/inovexde\" \/>\n<meta property=\"article:published_time\" content=\"2016-07-19T12:52:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-17T07:00:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-artikelbild.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2300\" \/>\n\t<meta property=\"og:image:height\" content=\"678\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Andrew Kenworthy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-artikelbild-1024x302.png\" \/>\n<meta name=\"twitter:creator\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:site\" content=\"@inovexgmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andrew Kenworthy\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\u00a0Minuten\" \/>\n\t<meta name=\"twitter:label3\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data3\" content=\"Andrew Kenworthy\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/\"},\"author\":{\"name\":\"Andrew Kenworthy\",\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/person\/0519169c755e15b1478ccf638f16f06c\"},\"headline\":\"Drastic Elastic [Part 1]: ElasticSearch as a Database\",\"datePublished\":\"2016-07-19T12:52:01+00:00\",\"dateModified\":\"2026-03-17T07:00:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/\"},\"wordCount\":974,\"commentCount\":4,\"publisher\":{\"@id\":\"https:\/\/www.inovex.de\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-artikelbild.png\",\"keywords\":[\"Search\"],\"articleSection\":[\"Analytics\",\"English Content\",\"General\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/\",\"url\":\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/\",\"name\":\"Drastic Elastic [Part 1]: ElasticSearch as a Database - inovex GmbH\",\"isPartOf\":{\"@id\":\"https:\/\/www.inovex.de\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-artikelbild.png\",\"datePublished\":\"2016-07-19T12:52:01+00:00\",\"dateModified\":\"2026-03-17T07:00:44+00:00\",\"description\":\"Idea of using a search engine as a database, mainly due to cost and usability considerations. In this article I want to share my experience.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#primaryimage\",\"url\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-artikelbild.png\",\"contentUrl\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-artikelbild.png\",\"width\":2300,\"height\":678,\"caption\":\"Drastic Elastic Logo\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.inovex.de\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Drastic Elastic [Part 1]: ElasticSearch as a Database\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.inovex.de\/de\/#website\",\"url\":\"https:\/\/www.inovex.de\/de\/\",\"name\":\"inovex GmbH\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.inovex.de\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.inovex.de\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.inovex.de\/de\/#organization\",\"name\":\"inovex GmbH\",\"url\":\"https:\/\/www.inovex.de\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png\",\"contentUrl\":\"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png\",\"width\":1921,\"height\":1081,\"caption\":\"inovex GmbH\"},\"image\":{\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/inovexde\",\"https:\/\/x.com\/inovexgmbh\",\"https:\/\/www.instagram.com\/inovexlife\/\",\"https:\/\/www.linkedin.com\/company\/inovex\",\"https:\/\/www.youtube.com\/channel\/UC7r66GT14hROB_RQsQBAQUQ\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/person\/0519169c755e15b1478ccf638f16f06c\",\"name\":\"Andrew Kenworthy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.inovex.de\/de\/#\/schema\/person\/image\/7397755342ed757eeb6b1d51f16a4044\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c7a29df25f27010b3c581f97c66a52694571cfa2f9c9b79049542969194fbdd3?s=96&d=retro&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c7a29df25f27010b3c581f97c66a52694571cfa2f9c9b79049542969194fbdd3?s=96&d=retro&r=g\",\"caption\":\"Andrew Kenworthy\"},\"url\":\"https:\/\/www.inovex.de\/de\/blog\/author\/akenworthy\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Drastic Elastic [Part 1]: ElasticSearch as a Database - inovex GmbH","description":"Idea of using a search engine as a database, mainly due to cost and usability considerations. In this article I want to share my experience.","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:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/","og_locale":"de_DE","og_type":"article","og_title":"Drastic Elastic [Part 1]: ElasticSearch as a Database - inovex GmbH","og_description":"Idea of using a search engine as a database, mainly due to cost and usability considerations. In this article I want to share my experience.","og_url":"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/","og_site_name":"inovex GmbH","article_publisher":"https:\/\/www.facebook.com\/inovexde","article_published_time":"2016-07-19T12:52:01+00:00","article_modified_time":"2026-03-17T07:00:44+00:00","og_image":[{"width":2300,"height":678,"url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-artikelbild.png","type":"image\/png"}],"author":"Andrew Kenworthy","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-artikelbild-1024x302.png","twitter_creator":"@inovexgmbh","twitter_site":"@inovexgmbh","twitter_misc":{"Verfasst von":"Andrew Kenworthy","Gesch\u00e4tzte Lesezeit":"5\u00a0Minuten","Written by":"Andrew Kenworthy"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#article","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/"},"author":{"name":"Andrew Kenworthy","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/0519169c755e15b1478ccf638f16f06c"},"headline":"Drastic Elastic [Part 1]: ElasticSearch as a Database","datePublished":"2016-07-19T12:52:01+00:00","dateModified":"2026-03-17T07:00:44+00:00","mainEntityOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/"},"wordCount":974,"commentCount":4,"publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-artikelbild.png","keywords":["Search"],"articleSection":["Analytics","English Content","General"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/","url":"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/","name":"Drastic Elastic [Part 1]: ElasticSearch as a Database - inovex GmbH","isPartOf":{"@id":"https:\/\/www.inovex.de\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#primaryimage"},"image":{"@id":"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-artikelbild.png","datePublished":"2016-07-19T12:52:01+00:00","dateModified":"2026-03-17T07:00:44+00:00","description":"Idea of using a search engine as a database, mainly due to cost and usability considerations. In this article I want to share my experience.","breadcrumb":{"@id":"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#primaryimage","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-artikelbild.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2016\/07\/drastic-elastic-artikelbild.png","width":2300,"height":678,"caption":"Drastic Elastic Logo"},{"@type":"BreadcrumbList","@id":"https:\/\/www.inovex.de\/de\/blog\/drastic-elastic-part-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.inovex.de\/de\/"},{"@type":"ListItem","position":2,"name":"Drastic Elastic [Part 1]: ElasticSearch as a Database"}]},{"@type":"WebSite","@id":"https:\/\/www.inovex.de\/de\/#website","url":"https:\/\/www.inovex.de\/de\/","name":"inovex GmbH","description":"","publisher":{"@id":"https:\/\/www.inovex.de\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.inovex.de\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.inovex.de\/de\/#organization","name":"inovex GmbH","url":"https:\/\/www.inovex.de\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/","url":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","contentUrl":"https:\/\/www.inovex.de\/wp-content\/uploads\/2021\/03\/inovex-logo-16-9-1.png","width":1921,"height":1081,"caption":"inovex GmbH"},"image":{"@id":"https:\/\/www.inovex.de\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/inovexde","https:\/\/x.com\/inovexgmbh","https:\/\/www.instagram.com\/inovexlife\/","https:\/\/www.linkedin.com\/company\/inovex","https:\/\/www.youtube.com\/channel\/UC7r66GT14hROB_RQsQBAQUQ"]},{"@type":"Person","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/0519169c755e15b1478ccf638f16f06c","name":"Andrew Kenworthy","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.inovex.de\/de\/#\/schema\/person\/image\/7397755342ed757eeb6b1d51f16a4044","url":"https:\/\/secure.gravatar.com\/avatar\/c7a29df25f27010b3c581f97c66a52694571cfa2f9c9b79049542969194fbdd3?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c7a29df25f27010b3c581f97c66a52694571cfa2f9c9b79049542969194fbdd3?s=96&d=retro&r=g","caption":"Andrew Kenworthy"},"url":"https:\/\/www.inovex.de\/de\/blog\/author\/akenworthy\/"}]}},"_links":{"self":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/1882","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/users\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/comments?post=1882"}],"version-history":[{"count":3,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/1882\/revisions"}],"predecessor-version":[{"id":66551,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/posts\/1882\/revisions\/66551"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media\/1892"}],"wp:attachment":[{"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/media?parent=1882"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/tags?post=1882"},{"taxonomy":"service","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/service?post=1882"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.inovex.de\/de\/wp-json\/wp\/v2\/coauthors?post=1882"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}