{"id":80226,"date":"2020-05-04T13:42:23","date_gmt":"2020-05-04T11:42:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/eksperiment-proverki-primenimosti-grafovoj-subd-janusgraph-dlya-resheniya-zadachi-poiska-podhodyashhih-putej"},"modified":"2020-05-04T13:42:23","modified_gmt":"2020-05-04T11:42:23","slug":"eksperiment-proverki-primenimosti-grafovoj-subd-janusgraph-dlya-resheniya-zadachi-poiska-podhodyashhih-putej","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/eksperiment-proverki-primenimosti-grafovoj-subd-janusgraph-dlya-resheniya-zadachi-poiska-podhodyashhih-putej","title":{"rendered":"JanusGraph graafikandmeid t\u00f6\u00f6tleva s\u00fcsteemi rakendatavuse eksperiment sobivate teede otsimise \u00fclesande t\u00e4itmiseks","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0439 \u0421\u0423\u0411\u0414 JanusGraph \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u0443\u0442\u0435\u0439\" src=\"\/wp-content\/uploads\/2020\/05\/b591306e4eebc604c7e3d668aeff1eb0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043e\u0444\u0444\u043b\u0430\u0439\u043d-\u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0435\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u043e\u043c \u043f\u0443\u0442\u0435\u0439 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u043c. <\/p>\n<p><\/p>\n<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430:<\/p>\n<p><\/p>\n<ul>\n<li>\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0448\u043b\u043e \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 &quot;A&quot; \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c &quot;\u0411&quot;;<\/li>\n<li>\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0448\u043b\u043e \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 &quot;A&quot; \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c &quot;\u0411&quot; \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u044c &quot;C&quot;, \u0430 \u0437\u0430\u0442\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u044c &quot;\u0414&quot;;<\/li>\n<li>\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u043d\u044f\u043b\u043e \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 &quot;\u0410&quot; \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c &quot;\u0411&quot;.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u0438 \u0435\u0449\u0435 \u0440\u044f\u0434 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432.<\/p>\n<p><\/p>\n<p>\u0414\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u044f \u043f\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444. \u041f\u043e\u0447\u0438\u0442\u0430\u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u044b, \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b, \u0447\u0442\u043e \u0433\u0440\u0430\u0444\u043e\u0432\u044b\u0435 \u0421\u0423\u0411\u0414 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0438 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0442\u0447\u0435\u0442\u043e\u0432. \u0423 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u0430\u043a \u0431\u0443\u0434\u0443\u0442 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u0433\u0440\u0430\u0444\u043e\u0432\u044b\u0435 \u0421\u0423\u0411\u0414 (<strong>TL;DR;<\/strong> \u043f\u043b\u043e\u0445\u043e). <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>\u042f \u0432\u044b\u0431\u0440\u0430\u043b \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0421\u0423\u0411\u0414 <noindex><a rel=\"nofollow\" href=\"https:\/\/janusgraph.org\/\" rel=\"nofollow\">JanusGraph<\/a><\/noindex>, \u043a\u0430\u043a \u0432\u044b\u0434\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0435\u043b\u044f \u0433\u0440\u0430\u0444\u043e\u0432\u044b\u0445 open-source \u0421\u0423\u0411\u0414, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0435\u043a \u0437\u0440\u0435\u043b\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 (\u043f\u043e \u043c\u043e\u0435\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e) \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0435\u0439 \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438:<\/p>\n<p><\/p>\n<ul>\n<li>\u0431\u044d\u043a\u0435\u043d\u0434 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 BerkeleyDB, Apache Cassandra, Scylla;<\/li>\n<li>\u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043c\u043e\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 Lucene, Elasticsearch, Solr.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u0410\u0432\u0442\u043e\u0440\u044b JanusGraph \u043f\u0438\u0448\u0443\u0442, \u0447\u0442\u043e \u043e\u043d\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043a\u0430\u043a \u0434\u043b\u044f OLTP, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f OLAP.<\/p>\n<p><\/p>\n<p>\u042f \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 BerkeleyDB, Apache Cassandra, Scylla \u0438 ES, \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u043d\u0430\u0448\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u043c\u043e\u043c \u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043d\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0439 \u0421\u0423\u0411\u0414. \u041c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u043c \u0432\u044b\u0431\u043e\u0440 BerkeleyDB, \u0430 \u043d\u0435 RocksDB, \u043d\u043e, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u043a \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u044f\u043c. \u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0434\u043b\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e, \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u044d\u043a\u0435\u043d\u0434 \u043d\u0430 Cassandra \u0438\u043b\u0438 Scylla.<\/p>\n<p><\/p>\n<blockquote><p>Neo4j \u044f \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c.<\/p><\/blockquote>\n<p>\u0413\u0440\u0430\u0444\u043e\u0432\u044b\u0435 \u0421\u0423\u0411\u0414 \u0433\u043e\u0432\u043e\u0440\u044f\u0442: &quot;\u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u0433\u0440\u0430\u0444 \u2014 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u043a\u0430\u043a \u0433\u0440\u0430\u0444!&quot; \u2014 \u043a\u0440\u0430\u0441\u043e\u0442\u0430! <\/p>\n<p><\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u043b \u0433\u0440\u0430\u0444, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0442 \u043f\u0440\u044f\u043c \u043f\u043e \u043a\u0430\u043d\u043e\u043d\u0430\u043c \u0433\u0440\u0430\u0444\u043e\u0432\u044b\u0445 \u0421\u0423\u0411\u0414 \u0441\u0434\u0435\u043b\u0430\u043d: <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0439 \u0421\u0423\u0411\u0414 JanusGraph \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u0443\u0442\u0435\u0439\" src=\"\/wp-content\/uploads\/2020\/05\/238f5d06e5271c682ddd0a36e05a8ee7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0415\u0441\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c <code>Zone<\/code>, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0430\u044f \u0437\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c. \u0415\u0441\u043b\u0438 <code>ZoneStep<\/code> \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u044d\u0442\u043e\u0439 <code>Zone<\/code>, \u0442\u043e \u043e\u043d \u043d\u0430 \u043d\u0435\u0435 \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f. \u041d\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 <code>Area<\/code>, <code>ZoneTrack<\/code>, <code>Person<\/code> \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435, \u043e\u043d\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u0434\u043e\u043c\u0435\u043d\u0443 \u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0442\u0435\u0441\u0442\u0430 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f. \u0418\u0442\u043e\u0433\u043e, \u043a \u0442\u0430\u043a\u043e\u0439 \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u0438\u0441\u043a\u0430 \u0446\u0435\u043f\u043e\u0447\u0435\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u0431\u044b \u043a\u0430\u043a:<\/p>\n<p><\/p>\n<pre><code class=\"python\">g.V().hasLabel('Zone').has('id',0).in_()\n       .repeat(__.out()).until(__.out().hasLabel('Zone').has('id',19)).count().next()<\/code><\/pre>\n<p><\/p>\n<p>\u0427\u0442\u043e \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a: \u043d\u0430\u0439\u0434\u0438 Zone \u0441 ID=0, \u0432\u043e\u0437\u044c\u043c\u0438 \u0432\u0441\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a \u043d\u0435\u0439 \u0438\u0434\u0435\u0442 \u0440\u0435\u0431\u0440\u043e (ZoneStep), \u0442\u043e\u043f\u0430\u0439 \u0431\u0435\u0437 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043d\u0430\u0437\u0430\u0434 \u043f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u0448\u044c \u0442\u0430\u043a\u0438\u0435 ZoneStep, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0434\u0435\u0442 \u0440\u0435\u0431\u0440\u043e \u0432 Zone \u0441 ID=19, \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0439 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0438\u0445 \u0446\u0435\u043f\u043e\u0447\u0435\u043a.<\/p>\n<p><\/p>\n<p>\u042f \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u043d\u0434\u0443\u044e \u043d\u0430 \u0437\u043d\u0430\u043d\u0438\u0435 \u0432\u0441\u0435 \u0442\u043e\u043d\u043a\u043e\u0441\u0442\u0435\u0439 \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0430 \u0433\u0440\u0430\u0444\u0430\u0445, \u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0431\u044b\u043b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u043e\u0442 \u044d\u0442\u043e\u0439 \u043a\u043d\u0438\u0433\u0438 (<noindex><a rel=\"nofollow\" href=\"https:\/\/kelvinlawrence.net\/book\/Gremlin-Graph-Guide.html\" rel=\"nofollow\">https:\/\/kelvinlawrence.net\/book\/Gremlin-Graph-Guide.html<\/a><\/noindex>).<\/p>\n<p><\/p>\n<p>\u042f \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b 50 \u0442\u044b\u0441\u044f\u0447 \u0442\u0440\u0435\u043a\u043e\u0432 \u0434\u043b\u0438\u043d\u043e\u0439 \u043e\u0442 3 \u0434\u043e 20 \u0442\u043e\u0447\u0435\u043a \u0432 \u0433\u0440\u0430\u0444\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443 JanusGraph, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0443\u044e \u0431\u044d\u043a\u0435\u043d\u0434 BerkeleyDB, \u0441\u043e\u0437\u0434\u0430\u043b \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.janusgraph.org\/index-management\/index-performance\/\" rel=\"nofollow\">\u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0443<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 Python:<\/p>\n<p><\/p>\n<pre><code class=\"python\">\nfrom random import random\nfrom time import time\n\nfrom init import g, graph\n\nif __name__ == '__main__':\n\n    points = []\n    max_zones = 19\n    zcache = dict()\n    for i in range(0, max_zones + 1):\n        zcache[i] = g.addV('Zone').property('id', i).next()\n\n    startZ = zcache[0]\n    endZ = zcache[max_zones]\n\n    for i in range(0, 10000):\n\n        if not i % 100:\n            print(i)\n\n        start = g.addV('ZoneStep').property('time', int(time())).next()\n        g.V(start).addE('belongs').to(startZ).iterate()\n\n        while True:\n            pt = g.addV('ZoneStep').property('time', int(time())).next()\n            end_chain = random()\n            if end_chain &lt; 0.3:\n                g.V(pt).addE('belongs').to(endZ).iterate()\n                g.V(start).addE('goes').to(pt).iterate()\n                break\n            else:\n                zone_id = int(random() * max_zones)\n                g.V(pt).addE('belongs').to(zcache[zone_id]).iterate()\n                g.V(start).addE('goes').to(pt).iterate()\n\n            start = pt\n\n    count = g.V().count().next()\n    print(count)<\/code><\/pre>\n<p><\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c VM c 4 \u044f\u0434\u0440\u0430\u043c\u0438 \u0438 16 GB RAM \u043d\u0430 SSD. JanusGraph \u0431\u044b\u043b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">docker run --name janusgraph -p8182:8182 janusgraph\/janusgraph:latest<\/code><\/pre>\n<p><\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u0442\u043e\u0447\u043d\u043e\u043c\u0443 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044e \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 BerkeleyDB. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u0437\u0430\u043f\u0440\u043e\u0441, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u043d\u0435\u0435, \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0432\u043d\u043e\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u043c \u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<p><\/p>\n<blockquote><p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0432 4 \u0432\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c, \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0421\u0423\u0411\u0414 \u0432 \u0442\u044b\u043a\u0432\u0443 \u0441 \u0432\u0435\u0441\u0435\u043b\u044b\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c \u0441\u0442\u0435\u043a\u0442\u0440\u0435\u0439\u0441\u043e\u0432 Java (\u0430 \u043c\u044b \u0432\u0441\u0435 \u043b\u044e\u0431\u0438\u043c \u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0435\u043a\u0442\u0440\u0435\u0439\u0441\u044b Java) \u0432 \u043b\u043e\u0433\u0430\u0445 Docker.<\/p><\/blockquote>\n<p>\u041f\u043e\u0440\u0430\u0437\u043c\u044b\u0448\u043b\u044f\u0432, \u044f \u0440\u0435\u0448\u0438\u043b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0441\u0445\u0435\u043c\u0443 \u0433\u0440\u0430\u0444\u0430 \u0434\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0439 \u0421\u0423\u0411\u0414 JanusGraph \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u0443\u0442\u0435\u0439\" src=\"\/wp-content\/uploads\/2020\/05\/472d916ff97e6eb5381a1ab496c95d81.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0420\u0435\u0448\u0438\u0432, \u0447\u0442\u043e \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0431\u0443\u0434\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0440\u0435\u0431\u0440\u0430\u043c. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">g.V().hasLabel('ZoneStep').has('id',0).repeat(__.out().simplePath()).until(__.hasLabel('ZoneStep').has('id',19)).count().next()<\/code><\/pre>\n<p><\/p>\n<p>\u0427\u0442\u043e \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a: \u043d\u0430\u0439\u0434\u0438 ZoneStep \u0441 ID=0, \u0442\u043e\u043f\u0430\u0439 \u0431\u0435\u0437 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043d\u0430\u0437\u0430\u0434 \u043f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u0448\u044c ZoneStep \u0441 ID=19, \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0439 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0430\u043a\u0438\u0445 \u0446\u0435\u043f\u043e\u0447\u0435\u043a.<\/p>\n<p><\/p>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435, \u044f \u0442\u043e\u0436\u0435 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0445 \u0441\u0432\u044f\u0437\u0435\u0439, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0448\u0438\u0441\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438.<\/p>\n<p><\/p>\n<p>\u0417\u0430\u043f\u0440\u043e\u0441 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u043a\u0443\u043d\u0434, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0439 AdHoc \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0438\u0434\u0430 \u044d\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u043e.<\/p>\n<p><\/p>\n<p>\u042f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c JanusGraph \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Scylla, \u043a\u0430\u043a \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Cassandra, \u043d\u043e \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u043d\u0435 \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p><\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e &quot;\u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u0433\u0440\u0430\u0444&quot;, \u043c\u043d\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u043e\u0432\u0443\u044e \u0421\u0423\u0411\u0414 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u044d\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u043e. \u0412\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e, \u0447\u0442\u043e \u044f \u0447\u0435\u0433\u043e-\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u044e \u0438 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c JanusGraph \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u043e\u0438\u0441\u043a \u0437\u0430 \u0434\u043e\u043b\u0438 \u0441\u0435\u043a\u0443\u043d\u0434\u044b, \u043e\u0434\u043d\u0430\u043a\u043e, \u043c\u043d\u0435 \u044d\u0442\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c. <\/p>\n<p><\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0435\u0448\u0438\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0443\u0436\u043d\u043e, \u044f \u043d\u0430\u0447\u0430\u043b \u0434\u0443\u043c\u0430\u0442\u044c \u043e JOIN-\u0430\u0445 \u0438 Pivot-\u0430\u0445 \u0442\u0430\u0431\u043b\u0438\u0446, \u0447\u0442\u043e \u043d\u0435 \u0432\u043d\u0443\u0448\u0430\u043b\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u043c\u0430 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0438\u0437\u044f\u0449\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u043c\u043e\u0433\u043b\u043e \u0431\u044b\u0442\u044c \u0432\u043f\u043e\u043b\u043d\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435.<\/p>\n<p><\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f Apache ClickHouse, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0438\u0437\u044b\u0441\u043a\u0430\u043d\u0438\u044f \u043d\u0430 \u044d\u0442\u043e\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0421\u0423\u0411\u0414.<\/p>\n<p><\/p>\n<p>\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b ClickHouse \u043f\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u043c\u0443 \u0440\u0435\u0446\u0435\u043f\u0442\u0443:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">sudo docker run -d --name clickhouse_1 \n     --ulimit nofile=262144:262144 \n     -v \/opt\/clickhouse\/log:\/var\/log\/clickhouse-server \n     -v \/opt\/clickhouse\/data:\/var\/lib\/clickhouse \n     yandex\/clickhouse-server<\/code><\/pre>\n<p><\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u043b \u0432 \u043d\u0435\u043c \u0411\u0414 \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432\u0438\u0434\u0430:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">CREATE TABLE \ndb.steps (`area` Int64, `when` DateTime64(1, 'Europe\/Moscow') DEFAULT now64(), `zone` Int64, `person` Int64) \nENGINE = MergeTree() ORDER BY (area, zone, person) SETTINGS index_granularity = 8192<\/code><\/pre>\n<p><\/p>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u043b \u0435\u0435 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c:<\/p>\n<p><\/p>\n<pre><code class=\"python\">from time import time\n\nfrom clickhouse_driver import Client\nfrom random import random\n\nclient = Client('vm-12c2c34c-df68-4a98-b1e5-a4d1cef1acff.domain',\n                database='db',\n                password='secret')\n\nmax = 20\n\nfor r in range(0, 100000):\n\n    if r % 1000 == 0:\n        print(&quot;CNT: {}, TS: {}&quot;.format(r, time()))\n\n    data = [{\n            'area': 0,\n            'zone': 0,\n            'person': r\n        }]\n\n    while True:\n        if random() &lt; 0.3:\n            break\n\n        data.append({\n                'area': 0,\n                'zone': int(random() * (max - 2)) + 1,\n                'person': r\n            })\n\n    data.append({\n            'area': 0,\n            'zone': max - 1,\n            'person': r\n        })\n\n    client.execute(\n        'INSERT INTO steps (area, zone, person) VALUES',\n        data\n    )<\/code><\/pre>\n<p><\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0438\u0434\u0443\u0442 \u0431\u0430\u0442\u0447\u0430\u043c\u0438, \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0434\u043b\u044f JanusGraph.<\/p>\n<p><\/p>\n<p>\u0421\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043b \u0434\u0432\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e JOIN. \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0438\u0437 \u0442\u043e\u0447\u043a\u0438 A \u0432 \u0442\u043e\u0447\u043a\u0443 \u0411:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">SELECT s1.person AS person,\n       s1.zone,\n       s1.when,\n       s2.zone,\n       s2.when\nFROM\n  (SELECT *\n   FROM steps\n   WHERE (area = 0)\n     AND (zone = 0)) AS s1 ANY INNER JOIN\n  (SELECT *\n   FROM steps AS s2\n   WHERE (area = 0)\n     AND (zone = 19)) AS s2 USING person\nWHERE s1.when &lt;= s2.when<\/code><\/pre>\n<p><\/p>\n<p>\u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 3 \u0442\u043e\u0447\u043a\u0438:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">SELECT s3.person,\n       s1z,\n       s1w,\n       s2z,\n       s2w,\n       s3.zone,\n       s3.when\nFROM\n  (SELECT s1.person AS person,\n          s1.zone AS s1z,\n          s1.when AS s1w,\n          s2.zone AS s2z,\n          s2.when AS s2w\n   FROM\n     (SELECT *\n      FROM steps\n      WHERE (area = 0)\n        AND (zone = 0)) AS s1 ANY INNER JOIN\n     (SELECT *\n      FROM steps AS s2\n      WHERE (area = 0)\n        AND (zone = 3)) AS s2 USING person\n   WHERE s1.when &lt;= s2.when) p ANY INNER JOIN\n  (SELECT *\n   FROM steps\n   WHERE (area = 0)\n     AND (zone = 19)) AS s3 USING person\nWHERE p.s2w &lt;= s3.when<\/code><\/pre>\n<p><\/p>\n<p>\u0417\u0430\u043f\u0440\u043e\u0441\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u043e, \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0443\u044e \u043e\u0431\u0432\u044f\u0437\u043a\u0443-\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440. \u041e\u0434\u043d\u0430\u043a\u043e, \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0431\u044b\u0441\u0442\u0440\u043e. \u0418 \u043f\u0435\u0440\u0432\u044b\u0439 \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u0437\u0430 0.1 \u0441\u0435\u043a. \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u043b\u044f count(*) \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u043f\u043e 3\u043c \u0442\u043e\u0447\u043a\u0430\u043c:<\/p>\n<p><\/p>\n<pre><code class=\"sql\">SELECT count(*)\nFROM \n(\n    SELECT \n        s1.person AS person, \n        s1.zone AS s1z, \n        s1.when AS s1w, \n        s2.zone AS s2z, \n        s2.when AS s2w\n    FROM \n    (\n        SELECT *\n        FROM steps\n        WHERE (area = 0) AND (zone = 0)\n    ) AS s1\n    ANY INNER JOIN \n    (\n        SELECT *\n        FROM steps AS s2\n        WHERE (area = 0) AND (zone = 3)\n    ) AS s2 USING (person)\n    WHERE s1.when &lt;= s2.when\n) AS p\nANY INNER JOIN \n(\n    SELECT *\n    FROM steps\n    WHERE (area = 0) AND (zone = 19)\n) AS s3 USING (person)\nWHERE p.s2w &lt;= s3.when\n\n\u250c\u2500count()\u2500\u2510\n\u2502   11592 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">1 rows in set. Elapsed: 0.068 sec. Processed 250.03 thousand rows, 8.00 MB (3.69 million rows\/s., 117.98 MB\/s.)<\/code><\/pre>\n<p><\/p>\n<p><strong>\u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u043f\u0440\u043e IOPS<\/strong>. \u041f\u0440\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, JanusGraph \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e IOPS (1000-1300 \u0434\u043b\u044f \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438), \u0430 IOWAIT \u0431\u044b\u043b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u0438\u043c. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f, ClickHouse \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430 \u0434\u0438\u0441\u043a\u043e\u0432\u0443\u044e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443.<\/p>\n<p><\/p>\n<h2 id=\"zaklyuchenie\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p><\/p>\n<p>\u041c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c ClickHouse \u0434\u043b\u044f \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430. \u041c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u043c \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043f\u043e\u0442\u043e\u043a\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Apache Flink \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0438\u0445 \u0432 ClickHouse. <\/p>\n<p><\/p>\n<p>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0445\u043e\u0440\u043e\u0448\u0430, \u0447\u0442\u043e \u043d\u0430\u043c, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u0443\u043c\u0430\u0442\u044c \u043e pivot-\u0430\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u043c\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043c\u0438. \u0420\u0430\u043d\u0435\u0435, \u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0434\u0435\u043b\u0430\u0442\u044c pivot-\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c\u044b\u0445 \u0438\u0437 Vertica \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0443 \u0432 Apache Parquet.<\/p>\n<p><\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0439 \u0421\u0423\u0411\u0414 \u043d\u0435 \u0443\u0432\u0435\u043d\u0447\u0430\u043b\u0430\u0441\u044c \u0443\u0441\u043f\u0435\u0445\u043e\u043c. \u042f \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b, \u0447\u0442\u043e \u0443 JanusGraph \u0434\u0440\u0443\u0436\u0435\u043b\u044e\u0431\u043d\u0430\u044f \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043e\u0441\u0432\u043e\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u043c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u043b\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0439 Java-way, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u044e\u0434\u0435\u0439 \u0441 Java \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0445 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442 \u043f\u043b\u0430\u043a\u0430\u0442\u044c \u043a\u0440\u043e\u0432\u0430\u0432\u044b\u043c\u0438 \u0441\u043b\u0435\u0437\u0430\u043c\u0438:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">host: 0.0.0.0\nport: 8182\nthreadPoolWorker: 1\ngremlinPool: 8\nscriptEvaluationTimeout: 30000\nchannelizer: org.janusgraph.channelizers.JanusGraphWsAndHttpChannelizer\n\ngraphManager: org.janusgraph.graphdb.management.JanusGraphManager\ngraphs: {\n  ConfigurationManagementGraph: conf\/janusgraph-cql-configurationgraph.properties,\n  airlines: conf\/airlines.properties\n}\n\nscriptEngines: {\n  gremlin-groovy: {\n    plugins: { org.janusgraph.graphdb.tinkerpop.plugin.JanusGraphGremlinPlugin: {},\n               org.apache.tinkerpop.gremlin.server.jsr223.GremlinServerGremlinPlugin: {},\n               org.apache.tinkerpop.gremlin.tinkergraph.jsr223.TinkerGraphGremlinPlugin: {},\n               org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin: {classImports: [java.lang.Math], methodImports: [java.lang.Math#*]},\n               org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {files: [scripts\/airline-sample.groovy]}}}}\n\nserializers:\n# GraphBinary is here to replace Gryo and Graphson\n  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}\n  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }}\n  # Gryo and Graphson, latest versions\n  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}\n  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }}\n  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}\n  # Older serialization versions for backwards compatibility:\n  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}\n  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}\n  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: {ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}\n  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}\n  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }}\n  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }}\n\nprocessors:\n  - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}\n  - { className: org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor, config: { cacheExpirationTime: 600000, cacheMaxSize: 1000 }}\n\nmetrics: {\n  consoleReporter: {enabled: false, interval: 180000},\n  csvReporter: {enabled: false, interval: 180000, fileName: \/tmp\/gremlin-server-metrics.csv},\n  jmxReporter: {enabled: false},\n  slf4jReporter: {enabled: true, interval: 180000},\n  gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST},\n  graphiteReporter: {enabled: false, interval: 180000}}\nthreadPoolBoss: 1\nmaxInitialLineLength: 4096\nmaxHeaderSize: 8192\nmaxChunkSize: 8192\nmaxContentLength: 65536\nmaxAccumulationBufferComponents: 1024\nresultIterationBatchSize: 64\nwriteBufferHighWaterMark: 32768\nwriteBufferHighWaterMark: 65536\nssl: {\n  enabled: false}<\/code><\/pre>\n<p><\/p>\n<p>\u041c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e &quot;\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c&quot; BerkeleyDB \u0432\u0435\u0440\u0441\u0438\u044e JanusGraph. <\/p>\n<p><\/p>\n<p>\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043a\u0440\u0438\u0432\u0430\u044f \u0432 \u0447\u0430\u0441\u0442\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0435 \u0448\u0430\u043c\u0430\u043d\u0441\u0442\u0432\u0430 \u043d\u0430 Groovy. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 Gremlin (\u043a\u043e\u0442\u043e\u0440\u043e\u0435, \u043a\u0441\u0442\u0430\u0442\u0438, \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438). \u0418\u0437 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 JanusGraph:<\/p>\n<p><\/p>\n<pre><code class=\"java\">graph.tx().rollback() \/\/Never create new indexes while a transaction is active\nmgmt = graph.openManagement()\nname = mgmt.getPropertyKey('name')\nage = mgmt.getPropertyKey('age')\nmgmt.buildIndex('byNameComposite', Vertex.class).addKey(name).buildCompositeIndex()\nmgmt.buildIndex('byNameAndAgeComposite', Vertex.class).addKey(name).addKey(age).buildCompositeIndex()\nmgmt.commit()\n\n\/\/Wait for the index to become available\nManagementSystem.awaitGraphIndexStatus(graph, 'byNameComposite').call()\nManagementSystem.awaitGraphIndexStatus(graph, 'byNameAndAgeComposite').call()\n\/\/Reindex the existing data\nmgmt = graph.openManagement()\nmgmt.updateIndex(mgmt.getGraphIndex(&quot;byNameComposite&quot;), SchemaAction.REINDEX).get()\nmgmt.updateIndex(mgmt.getGraphIndex(&quot;byNameAndAgeComposite&quot;), SchemaAction.REINDEX).get()\nmgmt.commit()<\/code><\/pre>\n<p><\/p>\n<h2 id=\"posleslovie\">\u041f\u043e\u0441\u043b\u0435\u0441\u043b\u043e\u0432\u0438\u0435<\/h2>\n<p><\/p>\n<p>\u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u043c\u044b\u0441\u043b\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u2014 \u044d\u0442\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0442\u0435\u043f\u043b\u043e\u0433\u043e \u0441 \u043c\u044f\u0433\u043a\u0438\u043c. \u0415\u0441\u043b\u0438 \u0432\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f, \u0442\u043e \u0433\u0440\u0430\u0444\u043e\u0432\u0430\u044f \u0421\u0423\u0411\u0414 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432. \u041e\u0434\u043d\u0430\u043a\u043e, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u044f \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u0432\u0438\u0434\u0430:<\/p>\n<p><\/p>\n<pre><code class=\"python\">g.V().hasLabel('ZoneStep').has('id',0)\n    .repeat(__.out().simplePath()).until(__.hasLabel('ZoneStep').has('id',1)).count().next()<\/code><\/pre>\n<p><\/p>\n<p>\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0448\u0430\u0433\u043e\u0432\u0443\u044e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c. \u041e\u0434\u043d\u0430\u043a\u043e \u0438 \u043d\u0430 \u0442\u0430\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u043e\u0432\u0430\u044f \u0421\u0423\u0411\u0414 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0445\u043e\u0434\u0438\u043b \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0435\u043a\u0443\u043d\u0434\u2026 \u042d\u0442\u043e, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0436\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0431\u044b\u043b\u0438 \u043f\u0443\u0442\u0438 \u0432\u0438\u0434\u0430 <code>0 -&gt; X -&gt; Y ... -&gt; 1<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0433\u0440\u0430\u0444\u043e\u0432\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0442\u043e\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b. <\/p>\n<p><\/p>\n<p>\u0414\u0430\u0436\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432\u0438\u0434\u0430:<\/p>\n<p><\/p>\n<pre><code class=\"python\">g.V().hasLabel('ZoneStep').has('id',0).out().has('id',1)).count().next()<\/code><\/pre>\n<p><\/p>\n<p>\u043c\u043d\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u0435\u043a\u0443\u043d\u0434\u044b.<\/p>\n<p><\/p>\n<p>\u041c\u043e\u0440\u0430\u043b\u044c \u0431\u0430\u0441\u043d\u0438 \u0442\u0430\u043a\u043e\u0432\u0430, \u0447\u0442\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f \u0438\u0434\u0435\u044f \u0438 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0430\u0442\u0438\u0447\u043d\u043e\u0435 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0432\u0435\u0434\u0443\u0442 \u043a \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 ClickHouse. \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u044f\u0432\u043d\u044b\u0439 \u0430\u043d\u0442\u0438\u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0434\u043b\u044f \u0433\u0440\u0430\u0444\u043e\u0432\u044b\u0445 \u0421\u0423\u0411\u0414, \u0445\u043e\u0442\u044f \u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0434\u043b\u044f \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0438\u0445 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0435.<\/p>\n<p>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/499960\/\">habr.com<\/a> <\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043e\u0444\u0444\u043b\u0430\u0439\u043d-\u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0435\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u043e\u043c \u043f\u0443\u0442\u0435\u0439 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u043c. \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0448\u043b\u043e \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 &quot;A&quot; \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c &quot;\u0411&quot;; \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0448\u043b\u043e \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 &quot;A&quot; \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c &quot;\u0411&quot; \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u044c &quot;C&quot;, \u0430 \u0437\u0430\u0442\u0435\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":80227,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-80226","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043e\u0444\u0444\u043b\u0430\u0439\u043d-\u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0435\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u043e\u043c \u043f\u0443\u0442\u0435\u0439 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u043c. \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0448\u043b\u043e \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 &quot;A&quot; \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c &quot;\u0411&quot;; \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0448\u043b\u043e \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 &quot;A&quot; \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c &quot;\u0411&quot; \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u044c &quot;C&quot;, \u0430 \u0437\u0430\u0442\u0435\u043c\" \/>\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\/et\/blog\/administrirovanie\/eksperiment-proverki-primenimosti-grafovoj-subd-janusgraph-dlya-resheniya-zadachi-poiska-podhodyashhih-putej\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0439 \u0421\u0423\u0411\u0414 JanusGraph \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u0443\u0442\u0435\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043e\u0444\u0444\u043b\u0430\u0439\u043d-\u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0435\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u043e\u043c \u043f\u0443\u0442\u0435\u0439 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u043c. \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0448\u043b\u043e \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 &quot;A&quot; \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c &quot;\u0411&quot;; \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0448\u043b\u043e \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 &quot;A&quot; \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c &quot;\u0411&quot; \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u044c &quot;C&quot;, \u0430 \u0437\u0430\u0442\u0435\u043c\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/eksperiment-proverki-primenimosti-grafovoj-subd-janusgraph-dlya-resheniya-zadachi-poiska-podhodyashhih-putej\" \/>\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=\"2020-05-04T11:42:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-04T11:42:23+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\udd47Katsed graafiteabeandmete haldamise JanusGraph rakendatavuse kontrollimiseks sobivate teede leidmise \u00fclesande lahendamiseks | ProHoster","description":"Tere k\u00f5igile. Me arendame toodet offline-liikluse anal\u00fc\u00fcsimiseks. Projekti raames on \u00fclesanne, mis on seotud k\u00fclastajate liikumisteekondade statistilise anal\u00fc\u00fcsiga. Selle \u00fclesande raames saavad kasutajad esitada s\u00fcsteemile taotlusi j\u00e4rgmist laadi: kui palju k\u00fclastajaid liikus piirkonnast \"A\" piirkonda \"B\"; kui palju k\u00fclastajaid liikus piirkonnast \"A\" piirkonda \"B\" l\u00e4bi piirkonna \"C\", ja seej\u00e4rel","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/eksperiment-proverki-primenimosti-grafovoj-subd-janusgraph-dlya-resheniya-zadachi-poiska-podhodyashhih-putej","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u0433\u0440\u0430\u0444\u043e\u0432\u043e\u0439 \u0421\u0423\u0411\u0414 JanusGraph \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u0443\u0442\u0435\u0439 | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043e\u0444\u0444\u043b\u0430\u0439\u043d-\u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0435\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0430, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0430\u044f \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u043e\u043c \u043f\u0443\u0442\u0435\u0439 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u043c. \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430: \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0448\u043b\u043e \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 &quot;A&quot; \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c &quot;\u0411&quot;; \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0448\u043b\u043e \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 &quot;A&quot; \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c &quot;\u0411&quot; \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u044c &quot;C&quot;, \u0430 \u0437\u0430\u0442\u0435\u043c","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/eksperiment-proverki-primenimosti-grafovoj-subd-janusgraph-dlya-resheniya-zadachi-poiska-podhodyashhih-putej","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":"2020-05-04T11:42:23+00:00","article:modified_time":"2020-05-04T11:42:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"80226","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:22:48","updated":"2022-09-28 02:50:50"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/80226","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=80226"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/80226\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/80227"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=80226"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=80226"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=80226"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}