

{"id":21090,"date":"2018-07-24T04:00:29","date_gmt":"2018-07-24T04:00:29","guid":{"rendered":"https:\/\/data-flair.training\/blogs\/?p=21090"},"modified":"2021-05-19T18:24:03","modified_gmt":"2021-05-19T12:54:03","slug":"zookeeper-data-model","status":"publish","type":"post","link":"https:\/\/data-flair.training\/blogs\/zookeeper-data-model\/","title":{"rendered":"ZooKeeper Data Model &#8211; Znodes, Time &amp; Stat Structure"},"content":{"rendered":"<p>In our last <strong>ZooKeeper Tutorial<\/strong>, we discussed <strong>ZooKeeper ZNodes<\/strong>. Today, we will see the ZooKeeper Data Model. First, we will discuss the meaning of the data Model in Apache ZooKeeper. Moreover, we will learn ZNodes, Time in ZooKeeper, and ZooKeeper Stat Structure.<\/p>\n<p>So, let&#8217;s start ZooKeeper Data Model.<\/p>\n<h2><span style=\"font-weight: 400\">ZooKeeper Data Model<\/span><\/h2>\n<p><span style=\"font-weight: 400\">As same as a distributed file system, ZooKeeper also has a hierarchal namespace.\u00a0Though there is one thing with differ them is that each node in the namespace here may contain the data associated with it\u00a0or associated with children. <\/span><\/p>\n<p><span style=\"font-weight: 400\">So, it is more like having a file system\u00a0which permits a file to also\u00a0behave as a directory. However, to nodes, paths are always expressed in several\u00a0ways such as canonical, absolute, slash-separated paths; and there is no relative reference. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Moreover, to the following constraints, we can use any unicode character in a path subject:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">There should be no null character (\\u0000)\u00a0as a part of a pathname.\u00a0Because it causes problems with the C binding.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">We can not use these following characters\u00a0 \\u0001 &#8211; \\u0019 and \\u007F &#8211; \\u009F\u00a0 because these characters don&#8217;t display well, or may render in confusing ways.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Similarly, the following characters\u00a0 \\ud800 -uF8FFF, \\uFFF0-uFFFF, \\uXFFFE &#8211; \\uXFFFF (where X is a digit 1 &#8211; E), \\uF0000 &#8211; \\uFFFFF, are not allowed.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">We can use\u00a0 &#8220;.&#8221; character as part of another name.\u00a0Yet it is not possible to use &#8220;.&#8221; and &#8220;..&#8221;\u00a0 alone to indicate a node along a path. This is only because ZooKeeper doesn&#8217;t use relative paths. So, The following &#8220;\/a\/b\/.\/c&#8221; or &#8220;\/a\/b\/..\/c&#8221; , would be invalid.<\/span><\/li>\n<\/ol>\n<p><span style=\"font-weight: 400\">In addition, the &#8220;zookeeper&#8221;\u00a0 token is reserved.<\/span><\/p>\n<h2>Different Data Model in ZooKeeper<\/h2>\n<p>Below given are the ZooKeeper Data Model, let&#8217;s discuss them in detail:<\/p>\n<h3>a. ZNodes<\/h3>\n<p>Basically, in a ZooKeeper tree, every node a ZNode. As their main purpose, Znodes maintain a stat structure. However, a Stat Structure consists of version numbers for data changes, all changes as well as timestamps. In other words, the main entity that a programmer access are ZNodes.<\/p>\n<h3>b. Time in ZooKeeper<\/h3>\n<p><span style=\"font-weight: 400\">In multiple ways, ZooKeeper tracks time:<\/span><\/p>\n<div id=\"attachment_21203\" style=\"width: 1210px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Time-in-ZooKeeper-01.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-21203\" class=\"wp-image-21203 size-full\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Time-in-ZooKeeper-01.jpg\" alt=\"ZooKeeper Data Model\" width=\"1200\" height=\"628\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Time-in-ZooKeeper-01.jpg 1200w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Time-in-ZooKeeper-01-150x79.jpg 150w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Time-in-ZooKeeper-01-300x157.jpg 300w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Time-in-ZooKeeper-01-768x402.jpg 768w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/Time-in-ZooKeeper-01-1024x536.jpg 1024w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><p id=\"caption-attachment-21203\" class=\"wp-caption-text\">ZooKeeper Data Model &#8211; Time in ZooKeeper<\/p><\/div>\n<h4><span style=\"font-weight: 400\">i. Zxid(ZooKeeper Transaction Id)<\/span><\/h4>\n<p><span style=\"font-weight: 400\">In the form of a zxid (ZooKeeper Transaction Id), every change to the ZooKeeper state receives a stamp. So, the total ordering of all changes to ZooKeeper exposes by it. Make sure each change will have a unique zxid.\u00a0<\/span><\/p>\n<h4><span style=\"font-weight: 400\">ii. Version numbers<\/span><\/h4>\n<p><span style=\"font-weight: 400\">With every change to a node, an increase causes to one of the version numbers of that node. There are three version numbers: <\/span><br \/>\n<span style=\"font-weight: 400\"><strong>a. version-<\/strong> It is the number of changes to the data of a znode.<\/span><br \/>\n<span style=\"font-weight: 400\"><strong>b.<\/strong> <strong>cversion-<\/strong> Whereas, it is the number of changes to the children of a znode. <\/span><br \/>\n<span style=\"font-weight: 400\"><strong>c. aversion-<\/strong> It is a number of changes to the ACL of a znode.<\/span><\/p>\n<h4><span style=\"font-weight: 400\">iii. Ticks<\/span><\/h4>\n<p><span style=\"font-weight: 400\">Servers use ticks to define the timing of events when using multi-server ZooKeeper. For example, session timeouts, status uploads, connection timeouts between peers, and many more. However, indirectly tick time is exposed through the minimum session timeout. <\/span><\/p>\n<p><span style=\"font-weight: 400\">Here, minimum session timeout is 2 times the tick time. So, the server will tell the client that the session timeout is actually the minimum session timeout if a client requests a session timeout less than the minimum session timeout.<\/span><\/p>\n<h4><span style=\"font-weight: 400\">iv. Real-time<\/span><\/h4>\n<p><span style=\"font-weight: 400\">Except to put timestamps into the stat structure on the znode creation and znode modification, ZooKeeper doesn&#8217;t use real-time, or clock time, at all.<\/span><\/p>\n<h3>c. ZooKeeper Stat Structure<\/h3>\n<p><span style=\"font-weight: 400\">In ZooKeeper, the Stat structure is made up of the various fields, for each ZNode:<\/span><\/p>\n<div id=\"attachment_21250\" style=\"width: 1210px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/ZooKeeper-Stat-Structure-01.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-21250\" class=\"wp-image-21250 size-full\" src=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/ZooKeeper-Stat-Structure-01.jpg\" alt=\"ZooKeeper Data Model\" width=\"1200\" height=\"628\" srcset=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/ZooKeeper-Stat-Structure-01.jpg 1200w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/ZooKeeper-Stat-Structure-01-150x79.jpg 150w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/ZooKeeper-Stat-Structure-01-300x157.jpg 300w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/ZooKeeper-Stat-Structure-01-768x402.jpg 768w, https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/ZooKeeper-Stat-Structure-01-1024x536.jpg 1024w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><p id=\"caption-attachment-21250\" class=\"wp-caption-text\">ZooKeeper Data Model &#8211; ZooKeeper Stat Structure<\/p><\/div>\n<h4>i. czxid<\/h4>\n<p><span style=\"font-weight: 400\">It is the\u00a0zxid of the change,\u00a0basically which caused this znode to be created.<\/span><\/p>\n<h4><strong>ii. mzxid<\/strong><\/h4>\n<p><span style=\"font-weight: 400\">Whereas, it is the zxid of the change\u00a0since last modified of this znode.<\/span><\/p>\n<h4><strong>iii. ctime<\/strong><\/h4>\n<p><span style=\"font-weight: 400\">ctime is the time in milliseconds from an epoch\u00a0since this znode was created.<\/span><\/p>\n<h4><strong>iv. mtime<\/strong><\/h4>\n<p><span style=\"font-weight: 400\">On defining mtime, it is the time in milliseconds from an epoch\u00a0since this znode was last modified.<\/span><\/p>\n<h4><strong>v. version<\/strong><\/h4>\n<p><span style=\"font-weight: 400\">version shows the number of changes happens to the data of this znode.<\/span><\/p>\n<h4><strong>vi. cversion<\/strong><\/h4>\n<p>Similarly, the number of changes occurs to the children of this znode\u00a0is shown by cversion.<\/p>\n<h4><strong>vii. aversion<\/strong><\/h4>\n<p><span style=\"font-weight: 400\">Simply, the aversion is the number of changes to the ACL of this znode.<\/span><\/p>\n<p><strong>viii. ephemeralOwner<\/strong><\/p>\n<p><span style=\"font-weight: 400\">If the znode is an ephemeral node, so this is the session id of the owner of this znode. However, it will be zero, if it is not an ephemeral node.<\/span><\/p>\n<h4><strong>ix. dataLength<\/strong><\/h4>\n<p><span style=\"font-weight: 400\">It displays the length of the data field of this znode.<\/span><\/p>\n<h4><strong>x. numChildren<\/strong><\/h4>\n<p><span style=\"font-weight: 400\">As per its name, &#8220;numChildren&#8221;\u00a0signifies the number of children of this znode.<\/span><br \/>\nSo, this was all in the ZooKeeper Data Model. Hope you like our explanation.<\/p>\n<h2><span style=\"font-weight: 400\">Conclusion<\/span><\/h2>\n<p>Hence, we have learned the whole about ZooKeeper Data Model. Moreover, in this data model in ZooKeeper, we discussed Znodes, Time, and Stat Structure in detail. Still, if any doubt regarding ZooKeeper Data Model, ask in the comment tab.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In our last ZooKeeper Tutorial, we discussed ZooKeeper ZNodes. Today, we will see the ZooKeeper Data Model. First, we will discuss the meaning of the data Model in Apache ZooKeeper. Moreover, we will learn&#46;&#46;&#46;<\/p>\n","protected":false},"author":7,"featured_media":21224,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[77],"tags":[3389,14725,16041,16355,16382,16419,16430],"class_list":["post-21090","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-zookeeper","tag-data-models-in-zookeeper","tag-time-in-zookeeper","tag-what-is-zookeeper","tag-znode","tag-zookeeper-data-model","tag-zookeeper-stat-structure","tag-zookeeper-znode"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>ZooKeeper Data Model - Znodes, Time &amp; Stat Structure - DataFlair<\/title>\n<meta name=\"description\" content=\"ZooKeeper data Model Tutorial, Whar are Data models in Apache ZooKeeper, ZooKeeper ZNode, Time in ZooKeeper, ZooKeeper Stat Structure\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/data-flair.training\/blogs\/zookeeper-data-model\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ZooKeeper Data Model - Znodes, Time &amp; Stat Structure - DataFlair\" \/>\n<meta property=\"og:description\" content=\"ZooKeeper data Model Tutorial, Whar are Data models in Apache ZooKeeper, ZooKeeper ZNode, Time in ZooKeeper, ZooKeeper Stat Structure\" \/>\n<meta property=\"og:url\" content=\"https:\/\/data-flair.training\/blogs\/zookeeper-data-model\/\" \/>\n<meta property=\"og:site_name\" content=\"DataFlair\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DataFlairWS\/\" \/>\n<meta property=\"article:published_time\" content=\"2018-07-24T04:00:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-19T12:54:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/ZooKeeper-Data-Model-01.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"DataFlair Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:site\" content=\"@DataFlairWS\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DataFlair Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"ZooKeeper Data Model - Znodes, Time &amp; Stat Structure - DataFlair","description":"ZooKeeper data Model Tutorial, Whar are Data models in Apache ZooKeeper, ZooKeeper ZNode, Time in ZooKeeper, ZooKeeper Stat Structure","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:\/\/data-flair.training\/blogs\/zookeeper-data-model\/","og_locale":"en_US","og_type":"article","og_title":"ZooKeeper Data Model - Znodes, Time &amp; Stat Structure - DataFlair","og_description":"ZooKeeper data Model Tutorial, Whar are Data models in Apache ZooKeeper, ZooKeeper ZNode, Time in ZooKeeper, ZooKeeper Stat Structure","og_url":"https:\/\/data-flair.training\/blogs\/zookeeper-data-model\/","og_site_name":"DataFlair","article_publisher":"https:\/\/www.facebook.com\/DataFlairWS\/","article_published_time":"2018-07-24T04:00:29+00:00","article_modified_time":"2021-05-19T12:54:03+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/ZooKeeper-Data-Model-01.jpg","type":"image\/jpeg"}],"author":"DataFlair Team","twitter_card":"summary_large_image","twitter_creator":"@DataFlairWS","twitter_site":"@DataFlairWS","twitter_misc":{"Written by":"DataFlair Team","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/data-flair.training\/blogs\/zookeeper-data-model\/#article","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/zookeeper-data-model\/"},"author":{"name":"DataFlair Team","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/beb0cab24b7aa54423a3b50e669a9dcd"},"headline":"ZooKeeper Data Model &#8211; Znodes, Time &amp; Stat Structure","datePublished":"2018-07-24T04:00:29+00:00","dateModified":"2021-05-19T12:54:03+00:00","mainEntityOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/zookeeper-data-model\/"},"wordCount":862,"commentCount":0,"publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/zookeeper-data-model\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/ZooKeeper-Data-Model-01.jpg","keywords":["data Models in ZooKeeper","time in ZooKeeper","what is zookeeper","ZNode","ZooKeeper Data Model","ZooKeeper Stat Structure","ZooKeeper ZNode"],"articleSection":["Zookeeper Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/data-flair.training\/blogs\/zookeeper-data-model\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/data-flair.training\/blogs\/zookeeper-data-model\/","url":"https:\/\/data-flair.training\/blogs\/zookeeper-data-model\/","name":"ZooKeeper Data Model - Znodes, Time &amp; Stat Structure - DataFlair","isPartOf":{"@id":"https:\/\/data-flair.training\/blogs\/#website"},"primaryImageOfPage":{"@id":"https:\/\/data-flair.training\/blogs\/zookeeper-data-model\/#primaryimage"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/zookeeper-data-model\/#primaryimage"},"thumbnailUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/ZooKeeper-Data-Model-01.jpg","datePublished":"2018-07-24T04:00:29+00:00","dateModified":"2021-05-19T12:54:03+00:00","description":"ZooKeeper data Model Tutorial, Whar are Data models in Apache ZooKeeper, ZooKeeper ZNode, Time in ZooKeeper, ZooKeeper Stat Structure","breadcrumb":{"@id":"https:\/\/data-flair.training\/blogs\/zookeeper-data-model\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/data-flair.training\/blogs\/zookeeper-data-model\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/zookeeper-data-model\/#primaryimage","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/ZooKeeper-Data-Model-01.jpg","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2018\/07\/ZooKeeper-Data-Model-01.jpg","width":1200,"height":628,"caption":"ZooKeeper Data Model - Znodes, Time &amp; Stat Structure"},{"@type":"BreadcrumbList","@id":"https:\/\/data-flair.training\/blogs\/zookeeper-data-model\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Blog Home","item":"https:\/\/data-flair.training\/blogs\/"},{"@type":"ListItem","position":2,"name":"Zookeeper Tutorials","item":"https:\/\/data-flair.training\/blogs\/category\/zookeeper\/"},{"@type":"ListItem","position":3,"name":"ZooKeeper Data Model &#8211; Znodes, Time &amp; Stat Structure"}]},{"@type":"WebSite","@id":"https:\/\/data-flair.training\/blogs\/#website","url":"https:\/\/data-flair.training\/blogs\/","name":"DataFlair","description":"Learn Today. Lead Tomorrow.","publisher":{"@id":"https:\/\/data-flair.training\/blogs\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/data-flair.training\/blogs\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/data-flair.training\/blogs\/#organization","name":"DataFlair","url":"https:\/\/data-flair.training\/blogs\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/","url":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","contentUrl":"https:\/\/data-flair.training\/blogs\/wp-content\/uploads\/sites\/2\/2016\/07\/Data-Flair.png","width":106,"height":48,"caption":"DataFlair"},"image":{"@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DataFlairWS\/","https:\/\/x.com\/DataFlairWS","https:\/\/www.linkedin.com\/company\/dataflair-web-services-pvt-ltd\/","https:\/\/www.youtube.com\/user\/DataFlairWS"]},{"@type":"Person","@id":"https:\/\/data-flair.training\/blogs\/#\/schema\/person\/beb0cab24b7aa54423a3b50e669a9dcd","name":"DataFlair Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c322416204232f4dd97ef3901b0a499a5d34d7ba7fe333f4bfe53a907873d293?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c322416204232f4dd97ef3901b0a499a5d34d7ba7fe333f4bfe53a907873d293?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c322416204232f4dd97ef3901b0a499a5d34d7ba7fe333f4bfe53a907873d293?s=96&d=mm&r=g","caption":"DataFlair Team"},"description":"DataFlair Team specializes in creating clear, actionable content on programming, Java, Python, C++, DSA, AI, ML, data Science, Android, Flutter, MERN, Web Development, and technology. Backed by industry expertise, we make learning easy and career-oriented for beginners and pros alike.","url":"https:\/\/data-flair.training\/blogs\/author\/dfteam3\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/21090","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/comments?post=21090"}],"version-history":[{"count":9,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/21090\/revisions"}],"predecessor-version":[{"id":94222,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/posts\/21090\/revisions\/94222"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media\/21224"}],"wp:attachment":[{"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/media?parent=21090"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/categories?post=21090"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/data-flair.training\/blogs\/wp-json\/wp\/v2\/tags?post=21090"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}