{"id":36634,"date":"2019-10-31T22:12:47","date_gmt":"2019-10-31T19:12:47","guid":{"rendered":"https:\/\/prohoster.info\/blog\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-derevya-chast-1\/"},"modified":"2019-10-31T22:12:47","modified_gmt":"2019-10-31T19:12:47","slug":"globaly-mechi-kladentsy-dlya-hraneniya-dannyh-derevya-chast-1","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-derevya-chast-1","title":{"rendered":"Globals are data storage swords. Trees. Part 1.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/263791\/\"><img decoding=\"async\" alt=\"Globals are data storage swords. Trees. Part 1.\" src=\"\/wp-content\/uploads\/2019\/07\/83b8e36bff66516e2c331d75d8434e13.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex> Real database globals are well-known but still, few know how to use this superweapon effectively.<\/p>\n<p>By using globals for the tasks they excel at, impressive results can be achieved, either in performance or in simplifying the solution.<noindex><a rel=\"nofollow\" href=\"http:\/\/www.intersystems.ru\/press\/2013\/gaia-mission-1yr-later.html\">1<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/intersystems.ru\/cache\/technology\/techguide\/cache_tech-guide_01.html\">2<\/a><\/noindex>).<\/p>\n<p>Globals are a special way of storing and processing data, fundamentally different from tables in SQL. They appeared in 1966 in the language <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/MUMPS\">M(UMPS)<\/a><\/noindex> (an evolutionary development \u2014 <noindex><a rel=\"nofollow\" href=\"http:\/\/www.intersystems.com\/our-products\/cache\/tech-guide\/chapter-3\/#cache-objectscript\">Cach\u00e9 ObjectScript<\/a><\/noindex>, later COS) in medical databases and are still <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/VistA\">actively used<\/a><\/noindex>, as well as penetrating some other areas requiring reliability and high performance: finance, trading, etc.<\/p>\n<p>Modern DBMS support transactions, logging, replication, and partitioning for globals. That is, they can be built into modern, reliable, distributed, and fast systems.<\/p>\n<p>Globals do not constrain you within the limits of the relational model. They provide freedom to develop data structures optimized for specific tasks. For many applications, the judicious use of globals can be a truly secret weapon, delivering performance that relational application developers can only dream of.<\/p>\n<p>Data storage via globals can be used in many modern programming languages, both high-level and low-level. Therefore, in this article, I will focus specifically on globals, not on the language from which they originated.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>2. How globals work<\/h2>\n<p>\nLet's first understand how globals work and what their strengths are. Globals can be viewed from different perspectives. In this section of the article, we will look at them as trees or hierarchical data storage.<\/p>\n<p>Simply put, a global is a persistent array. An array that is automatically saved to disk.<br \/>\nIt's hard to imagine anything simpler for data storage. In the code (in COS\/M languages), it differs from an ordinary associative array only by the symbol <b>^<\/b> before the name.<\/p>\n<p>To store data in a global, you don't need to learn SQL query language; the commands to work with them are very simple. They can be learned in an hour. <\/p>\n<p>Let's start with the simplest example. A single-level tree with 2 branches. The examples are written in COS.<\/p>\n<p><img decoding=\"async\" alt=\"Globals are data storage swords. Trees. Part 1.\" src=\"\/wp-content\/uploads\/2019\/07\/5e1503716eac1eaadf49fcf3651e7fbf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<pre><code class=\"bash\">Set ^a(\"+7926X\") = \"John Sidorov\"\nSet ^a(\"+7916Y\") = \"Sergey Smith\"<\/code><\/pre>\n<p><br clear=\"left\"\/><br \/>\nWhen inserting information into a global (Set command), three things happen automatically:<\/p>\n<ol>\n<li><b>Data is saved to disk.<\/b>\n<\/li>\n<li><b>Indexing.<\/b> What is in the parentheses serves as the key (in English literature - \"subscript\"), and what is to the right of the equals sign is the value (\"node value\").\n<\/li>\n<li><b>Sorting.<\/b> Data is sorted by key. Thus, during traversal of the array, the first element will be \"Sergey Smith\", and the second will be \"John Sidorov\". When retrieving a user list from the global, the database does not spend time sorting. Moreover, a sorted list can be requested starting from any key, even a non-existent one (the output will start with the first real key that follows the non-existent one).\n<\/li>\n<\/ol>\n<p>\nAll these operations occur incredibly quickly. On a home computer, I was achieving values of up to 750,000 inserts\/sec in a single process. On multi-core processors, values can reach <noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/257501\/\">tens of millions<\/a><\/noindex> inserts\/sec.<\/p>\n<p>Of course, the insert speed itself doesn't say much. For example, you can record information very quickly in text files \u2014 that\u2019s how <noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/post\/176345\/#comment_6220633\">it is rumored<\/a><\/noindex> the Visa processing works. But in the case of globals, we get a structured, indexed storage that can be easily and quickly worked with in the future.<\/p>\n<p><img decoding=\"async\" alt=\"Globals are data storage swords. Trees. Part 1.\" src=\"\/wp-content\/uploads\/2019\/07\/ce447c81cf3a7d570518711c7103dbf0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<ul>\n<li><b>The strongest aspect of globals is the speed of inserting new nodes.<\/b>\n<\/li>\n<li><b>Data in the global is always indexed. Their traversal, both at the same level and down the tree, is always fast.<\/b><\/li>\n<\/ul>\n<p>\nLet's add a few more branches at the second and third levels to the global.<\/p>\n<pre><code class=\"bash\">Set ^a(\"+7926X\", \"city\") = \"Moscow\"\nSet ^a(\"+7926X\", \"city\", \"street\") = \"Req Square\"\nSet ^a(\"+7926X\", \"age\") = 25\nSet ^a(\"+7916Y\", \"city\") = \"London\"\nSet ^a(\"+7916Y\", \"city\", \"street\") = \"Baker Street\"\nSet ^a(\"+7916Y\", \"age\") = 36<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Globals are data storage swords. Trees. Part 1.\" src=\"\/wp-content\/uploads\/2019\/07\/47244a6d96b589ada53ba9f53b2b3a2f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIt is clear that based on globals, multi-level trees can be built. Moreover, access to any node is practically instantaneous due to auto-indexing during insertion. And at any level of the tree, all branches are sorted by key.<\/p>\n<p>As can be seen, information can be stored both in the key and in the value. The total length of the key (the sum of the lengths of all indices) can reach <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/ens20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=GGBL_structure#GGBL_structure_maxsubscrlen\">511 bytes<\/a><\/noindex>, while the values <noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=GORIENT_appx_limits_long_string\">3.6 MB<\/a><\/noindex> for Cach\u00e9. The number of levels in the tree (number of dimensions) is 31.<\/p>\n<p>Another interesting point. You can build a tree without specifying the values of the upper-level nodes.<\/p>\n<p><img decoding=\"async\" alt=\"Globals are data storage swords. Trees. Part 1.\" src=\"\/wp-content\/uploads\/2019\/07\/f37f81a87a13adb13bbd3583dda06928.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<pre><code class=\"bash\">Set ^b(\"a\", \"b\", \"c\", \"d\") = 1\nSet ^b(\"a\", \"b\", \"c\", \"e\") = 2\nSet ^b(\"a\", \"b\", \"f\", \"g\") = 3<\/code><\/pre>\n<p>\nEmpty nodes are those that have no assigned value.<br clear=\"left\"\/><br \/>\nTo better understand globals, let's compare them to other trees: garden trees and file system trees.<\/p>\n<p>Let's compare the trees in globals with the most familiar hierarchical structures: ordinary trees that grow in gardens and fields, as well as file systems.<\/p>\n<p><img decoding=\"async\" alt=\"Globals are data storage swords. Trees. Part 1.\" src=\"\/wp-content\/uploads\/2019\/07\/c6b00c70867c3eb2e2d8233e0fc6b6c6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAs we see in garden trees, leaves and fruits are located only at the ends of the branches.<br \/>\nIn file systems, information is stored only at the ends of branches, which are complete file names.<\/p>\n<p>Here is the data structure of a global.<\/p>\n<p><img decoding=\"async\" alt=\"Globals are data storage swords. Trees. Part 1.\" src=\"\/wp-content\/uploads\/2019\/07\/288a5d964b4bf859944c0a0ecd000bc7.jpg\" style=\"display:block;margin: 0 auto;\" \/>Differences:<\/p>\n<ol>\n<li><b>Internal nodes:<\/b> Information in a global can be stored in each node, not just at the ends of the branches.<\/li>\n<li><b>External nodes:<\/b> A global must have defined values at the ends of the branches, while file system and garden trees do not.<\/li>\n<\/ol>\n<p><br clear=\"left\"\/><br \/>\nIn terms of internal nodes, we can say that the structure of a global is a superset of the structure of file system name trees and garden trees. That is, it is more flexible.<\/p>\n<p>In general, a global represents <b>an ordered tree that allows data storage at each node.<\/b>.<\/p>\n<p>To better understand how globals work, let's imagine what it would be like if the creators of file systems used an approach similar to globals for data storage.<\/p>\n<ol>\n<li>When deleting a single file in a directory, the directory would automatically be deleted, as well as all parent directories containing only the just deleted directory.\n<\/li>\n<li>The need for directories would disappear. There would simply be files with subfiles and files without subfiles. If we compare this with an ordinary tree, each branch would become a fruit.\n<p><img decoding=\"async\" alt=\"Globals are data storage swords. Trees. Part 1.\" src=\"\/wp-content\/uploads\/2019\/07\/8e5e5681c191869da23c32da6e6d8d7b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\n<\/li>\n<li>Things like README.txt files might have disappeared. Everything that needed to be said about the contents of a directory could be recorded in the directory file itself. In path space, a file name is indistinguishable from a directory name, so we could manage with files alone.\n<\/li>\n<li>The speed of deleting directories with nested subdirectories and files would have increased dramatically. Many times articles have appeared on Habr about how long and difficult it is to delete millions of small files (<noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/post\/152193\/\">1<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/post\/157613\/\">2<\/a><\/noindex>). However, creating a pseudo-file system on a global level would take seconds or fractions of a second. When I tested the deletion of subtrees on my home computer, I was able to delete 96-341 million nodes from a two-tier tree on an HDD (not SSD) in just 1 second. This refers to deleting part of the tree, not just the entire file with globals.<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Globals are data storage swords. Trees. Part 1.\" src=\"\/wp-content\/uploads\/2019\/07\/7f700eeafb3e552923139024f38c6661.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<b>Deleting subtrees is another strong point of globals. Recursion is not needed for this.<\/b> It happens incredibly fast.<\/p>\n<p>In our tree, this could be done with the command <b>Kill<\/b>.<\/p>\n<pre><code class=\"bash\">Kill ^a(\"+7926X\")<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Globals are data storage swords. Trees. Part 1.\" src=\"\/wp-content\/uploads\/2019\/07\/89d5b69c6e80832c6865824782d9754d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo better understand the actions available for globals, here is a brief table.<\/p>\n<p>Main commands and functions for working with globals in COS<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_cset\">Set<\/a><\/noindex><br \/>\nSetting branches up to a node (if not defined yet) and the node's value<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_cmerge\">Merge<\/a><\/noindex><br \/>\nCopying a subtree<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_ckill\">Kill<\/a><\/noindex><br \/>\nDeleting a subtree<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_czkill\">ZKill<\/a><\/noindex><br \/>\nDeleting the value of a specific node. The subtree coming from the node remains untouched.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_fquery\">$Query<\/a><\/noindex><br \/>\nFull traversal of the tree with deep access<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_forder\">$Order<\/a><\/noindex><br \/>\nTraversing the branches of a specific node<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_fdata\">$Data<\/a><\/noindex><br \/>\nChecking if the node is defined<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"http:\/\/docs.intersystems.com\/cache20152\/csp\/docbook\/DocBook.UI.Page.cls?KEY=RCOS_fincrement\">$Increment<\/a><\/noindex><br \/>\nAtomic increment of the node's value. To avoid reads and writes for ACID. Recently, it is recommended to change to <noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/263793\/\">$Sequence<\/a><\/noindex><\/p>\n<p>Thank you for your attention, we are ready to answer your questions.<\/p>\n<p><b>Disclaimer<\/b>: <i>This article and my comments on it reflect my opinion and do not represent the official position of InterSystems.<\/i><\/p>\n<p><i><b>Continued<\/b> <noindex><a rel=\"nofollow\" href=\"http:\/\/habrahabr.ru\/company\/intersystems\/blog\/264173\/\">Globals are key-value stores for data storage. Trees. Part 2<\/a><\/noindex>. You will learn what types of data can be displayed on globals and in which tasks they provide the maximum benefit.<\/i><br \/>\n<br \/>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/263791\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u043c\u0435\u0447\u0438-\u043a\u043b\u0430\u0434\u0435\u043d\u0446\u044b \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u0433\u043b\u043e\u0431\u0430\u043b\u044b \u2014 \u0434\u0430\u0432\u043d\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b, \u043d\u043e \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435\u043c\u043d\u043e\u0433\u0438\u0435 \u0443\u043c\u0435\u044e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043b\u0438 \u0432\u043e\u0432\u0441\u0435 \u043d\u0435 \u0432\u043b\u0430\u0434\u0435\u044e\u0442 \u044d\u0442\u0438\u043c \u0441\u0443\u043f\u0435\u0440\u043e\u0440\u0443\u0436\u0438\u0435\u043c. \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044b \u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0442\u0435\u0445 \u0437\u0430\u0434\u0430\u0447, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043d\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0438, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0432\u044b\u0434\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432. \u041b\u0438\u0431\u043e \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043b\u0438\u0431\u043e \u0432 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 (1, 2). \u0413\u043b\u043e\u0431\u0430\u043b\u044b \u2014 \u044d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27434,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-36634","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-derevya-chast-1\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0413\u043b\u043e\u0431\u0430\u043b\u044b \u2014 \u043c\u0435\u0447\u0438-\u043a\u043b\u0430\u0434\u0435\u043d\u0446\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u0435\u0440\u0435\u0432\u044c\u044f. \u0427\u0430\u0441\u0442\u044c 1 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-derevya-chast-1\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:12:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:12:47+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Globals are treasure swords for data storage. Trees. Part 1 | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-derevya-chast-1","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0413\u043b\u043e\u0431\u0430\u043b\u044b \u2014 \u043c\u0435\u0447\u0438-\u043a\u043b\u0430\u0434\u0435\u043d\u0446\u044b \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u0435\u0440\u0435\u0432\u044c\u044f. \u0427\u0430\u0441\u0442\u044c 1 | ProHoster","og:url":"https:\/\/prohoster.info\/en\/blog\/administrirovanie\/globaly-mechi-kladentsy-dlya-hraneniya-dannyh-derevya-chast-1","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:12:47+00:00","article:modified_time":"2019-10-31T19:12:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36634","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 04:13:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:41:52","updated":"2026-01-22 04:13:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/36634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=36634"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/36634\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media\/27434"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=36634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=36634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=36634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}