| <!DOCTYPE html> |
| |
| |
| |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <!-- Global site tag (gtag.js) - Google Analytics --> |
| <script async src="https://www.googletagmanager.com/gtag/js?id=UA-61232409-1"></script> |
| <script> |
| window.dataLayer = window.dataLayer || []; |
| function gtag(){dataLayer.push(arguments);} |
| gtag('js', new Date()); |
| gtag('config', 'UA-61232409-1'); |
| </script> |
| |
| <!-- Yandex.Metrika counter --> |
| <script type="text/javascript" > |
| (function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; |
| m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)}) |
| (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); |
| |
| ym(72949126, "init", { |
| clickmap:true, |
| trackLinks:true, |
| accurateTrackBounce:true, |
| webvisor:true |
| }); |
| </script> |
| <noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript> |
| <!-- /Yandex.Metrika counter --> |
| |
| <!-- Bugyard widget embed --> |
| <script type="text/javascript">!function(){if("function"!=typeof window.bugyard){var a=function(){a.c(arguments)};a.q=[],a.c=function(b){a.q.push(b)},window.bugyard=a;var b=document.createElement("script");b.setAttribute("data-bugyard","610961912c35ff001493163a"),b.setAttribute("async","async"),b.setAttribute("defer","defer"),b.setAttribute("src","https://widget.bugyard.io/bugyard.min.js"),document.getElementsByTagName("head")[0].appendChild(b)}}(); window.bugyard("hideButton"); </script> |
| |
| |
| |
| |
| |
| <link rel="preload" href='/assets/js/code-tabs.js?1' as="script" crossorigin> |
| <link rel="preload" href='/assets/js/page-nav.js' as="script" crossorigin> |
| <link rel="preload" href='/assets/js/docs-menu.js?20201005' as="script" crossorigin> |
| |
| <style>:root{--gg-red:#ec1c24;--gg-orange:#ec1c24;--gg-orange-dark:#bc440b;--gg-orange-filter:invert(47%) sepia(61%) saturate(1950%) hue-rotate(345deg) brightness(100%) contrast(95%);--gg-dark-gray:#333333;--orange-line-thickness:3px;--block-code-background:rgba(241, 241, 241, 20%);--inline-code-background:rgba(241, 241, 241, 90%);--padding-top:25px;--link-color:#ec1c24;--body-background:#fcfcfc}header{min-height:var(--header-height);background:#fff;box-shadow:0 4px 10px 0 #eee,0 0 4px 0 #d5d5d5;z-index:1}header>.container{display:grid;grid-template-columns:auto auto 1fr auto auto auto;grid-template-areas:'left-toggle home nav ver api search lang';grid-template-rows:40px;flex-direction:row;align-items:center;justify-content:flex-start;padding:12px 20px;max-width:1400px;margin:0 auto}header nav>ul{padding:0;margin:0;list-style:none;display:inherit}header .dropdown{display:none;position:fixed;top:calc(var(--header-height) - 12px);width:auto;background:#fff;box-shadow:0 4px 4px 0 rgba(0,0,0,.24),0 0 4px 0 rgba(0,0,0,.12);border-radius:4px;padding-top:10px;padding-bottom:12px;z-index:2}header .dropdown li{display:flex}header .dropdown a{color:grey!important;font-size:16px;padding-top:5px;padding-bottom:4px}header .menu{border:none;background:0 0;width:40px;height:40px;margin-right:12px;grid-area:left-toggle}header .menu img{width:18px;height:12px}header .search-close,header .top-nav-toggle{background:0 0;border:none;padding:0;width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;color:var(--gg-dark-gray);font-size:26px}header .search-toggle{grid-area:search}header .top-nav-toggle{grid-area:top-toggle}header .home{grid-area:home;margin-right:auto}header .home img{height:36px}header #api-docs{grid-area:api;margin:0;display:flex}header #api-docs .dropdown{padding:.5em 0}header #api-docs a{padding:9px 14px;color:var(--gg-dark-gray)!important;text-decoration:none;white-space:nowrap}header #api-docs .dropdown-item a{font-weight:400;display:block;width:100%;min-width:150px}header #lang-selector li{list-style:none;display:flex;padding:9px 14px}header #lang-selector li a{display:flex;color:#000;align-items:center}header #lang-selector li a span{font-size:10px;margin-left:5px}header #lang-selector li a img{width:25px}header #lang-selector li .dropdown{margin-left:-70px}header #lang-selector li .dropdown .dropdown-item{padding:0 1em;margin-bottom:8px}header #lang-selector li .dropdown .dropdown-item a span{font-size:14px}header .search{margin-left:auto;margin-right:20px;grid-area:search}header .search input[type=search]{color:var(--gg-dark-gray);background:rgba(255,255,255,.8);border:1px solid #ccc;padding:10px 15px;font-family:inherit;max-width:148px;height:37px;font-size:14px;-webkit-appearance:unset;appearance:unset}header #version-selector{list-style:none;grid-area:ver;line-height:28px;border-radius:0;margin-right:10px;border:none;color:var(--gg-dark-gray);padding:5px 16px 5px 10px;white-space:nowrap;font-size:14px;width:auto;text-align:right;box-sizing:border-box;text-align-last:right;-moz-appearance:none;-webkit-appearance:none;appearance:none;direction:rtl}header #version-selector option{direction:ltr}header>nav{grid-area:nav;font-size:18px;display:flex;flex-direction:row;margin:0 20px}header #lang-selector{grid-area:lang}header .search-close{margin-right:10px}@media (max-width:600px){header .search{margin-right:5px}header .search input[type=search]{max-width:110px}}header:not(.narrow-header) .search-close,header:not(.narrow-header) .top-nav-toggle{display:none}@media (max-width:670px){header>.container{grid-template-columns:auto 1fr auto;grid-template-areas:'left-toggle home search' 'ver api lang'}header #lang-selector li{justify-content:flex-end}}pre,pre.rouge{padding:8px 15px;background:var(--block-code-background)!important;border-radius:5px;border:1px solid #e5e5e5;overflow-x:auto;min-height:36px;line-height:18px;color:#545454}code{color:#545454}pre.rouge code{background:0 0!important}:not(pre)>code{background:var(--inline-code-background);padding:.1em .5em;background-clip:padding-box;border-radius:3px;color:#545454;font-size:90%}.listingblock .content{position:relative}.highlight{color:#586e75}.highlight .c1{color:#657b83}.highlight .nt{color:#b58900}.highlight .o{color:#93a1a1}.highlight .k{color:#6c71c4}.highlight .kt{color:#cb4b16}.highlight .s,.highlight .s1{color:#859900}.highlight .nc{color:#b58900}.highlight .na{color:#268bd2}body{font-family:'Open Sans',sans-serif}h1,h2{color:#000;font-weight:400;font-family:'Open Sans'}h1{font-size:36px;line-height:40px}a{text-decoration:none;color:var(--link-color)}section{color:#545454}.admonitionblock .icon .title{display:none}body{--header-height:64px;--promotion-bar-height:35px;--footer-height:104px;--footer-gap:60px;padding:0;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:var(--body-background);font-family:'Open Sans',sans-serif}body>section{flex:1}header{position:-webkit-sticky;position:sticky;top:0;z-index:2}*{box-sizing:border-box}@media (max-width:670px){body{--header-height:97px}}.left-nav{padding:10px 20px;width:289px;overflow-y:auto;top:calc(var(--header-height) + var(--promotion-bar-height));height:calc(100vh - var(--header-height) - var(--promotion-bar-height));font-family:'Open Sans';padding-top:var(--padding-top);background-color:var(--body-background)}.left-nav li{list-style:none}.left-nav a,.left-nav button{text-decoration:none;color:#757575;font-size:16px;display:inline-flex;width:100%;margin:2px 0;padding:.25em .375em;background:0 0;border:none;font:inherit;text-align:left}.left-nav a.active{color:var(--link-color)}.left-nav .nav-group{margin-left:6px;font-size:14px}.left-nav nav{border-left:2px solid #ddd;margin-bottom:5px}.left-nav nav.collapsed{display:none}.left-nav nav>li>a,.left-nav nav>li>button{padding-left:20px;text-align:left}.left-nav nav>li>a.active{border-left:var(--orange-line-thickness) solid var(--active-color);padding-left:calc(20px - var(--orange-line-thickness))}.left-nav nav.sub_pages{border:none}.left-nav nav.sub_pages a{padding-left:32px}.left-nav .state-indicator{margin-left:auto;margin-top:5px;width:6.2px;height:10px;flex:0 0 auto;filter:invert(49%) sepia(4%) saturate(5%) hue-rotate(23deg) brightness(92%) contrast(90%)}.left-nav button.expanded .state-indicator{transform:rotate(90deg)}.right-nav{width:289px;padding:12px 26px;overflow-y:auto;height:calc(100vh - var(--header-height));top:0;position:-webkit-sticky;position:sticky;display:flex;flex-direction:column;font-family:'Open sans';padding-top:var(--padding-top);background-color:#fff}.right-nav ul{list-style:none;padding:0;margin:0}.right-nav li{padding:0}.right-nav a{--border-width:0px;font-size:14px;color:#757575;padding-left:calc(15px * var(--nesting-level) + 8px - var(--border-width));margin:.3em 0;display:inline-block}.right-nav .sectlevel1{border-left:2px solid #ddd}.right-nav .sectlevel1{--nesting-level:0}.right-nav .sectlevel2{--nesting-level:1}.right-nav .sectlevel3{--nesting-level:2}@media (max-width:1200px){.right-nav{width:230px}}.right-nav footer{font-size:12px;padding:calc(var(--footer-gap) * .3) 0 5px;text-align:left;margin:auto 0 0}section.page-docs{display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:100%;grid-template-areas:'left-nav content right-nav';line-height:20px;max-width:1440px;margin:auto;width:100%}section.page-docs>article{border-left:1px solid #eee;background-color:#fff;padding:0 50px 30px;grid-area:content;overflow:hidden;font-family:sans-serif;font-size:16px;color:#545454;line-height:1.6em}section.page-docs>article h1,section.page-docs>article h2{font-family:'Open Sans'}@media (max-width:800px){section.page-docs>article{padding-left:15px;padding-right:15px}}section.page-docs .edit-link{position:relative;top:10px;right:10px;float:right;padding-top:calc(var(--header-height) + var(--padding-top));margin-top:calc((-1 * var(--header-height)))}section.page-docs h1,section.page-docs h2{margin-bottom:0}section.page-docs h2[id]{margin-top:var(--margin-top);margin-bottom:calc(var(--margin-top) * .5);z-index:-1}section.page-docs .title{font-style:italic}section.page-docs h2[id]{--margin-top:1.2em}.left-nav{bottom:0;position:-webkit-sticky;position:sticky}.left-nav{grid-area:left-nav}.right-nav{grid-area:right-nav}.left-nav__overlay{display:none;background:rgba(0,0,0,.5);z-index:1;position:fixed;top:var(--header-height);bottom:0;left:0;right:0}@media (max-width:990px){body:not(.hide-left-nav) .left-nav__overlay{display:block}nav.left-nav{background:#fafafa;grid-area:left-nav;box-shadow:0 4px 4px 0 rgba(0,0,0,.24),0 0 4px 0 rgba(0,0,0,.12);min-height:calc(100vh - var(--header-height));max-height:calc(100vh - var(--header-height));position:fixed;bottom:0;top:var(--header-height);z-index:2}section.page-docs>article{grid-column-start:left-nav;grid-column-end:content;grid-row:content}}@media (max-width:800px){nav.right-nav{display:none}}:target:before{content:"";display:block;margin-top:calc(var(--header-height) * -1);height:var(--header-height);width:1px}@media (min-width:600px) and (max-width:900px){:target:before{content:"";display:block;width:1px;margin-top:-150px;height:150px}} |
| #header #promotion-bar { background-color: #333333; padding: 8px; } |
| #header #promotion-bar p { font-size: 14px; line-height: 1.4em; font-weight: 600; padding: 0; margin: 0; color: #f0f0f0; text-align: center;} |
| #header #promotion-bar p a { color: #FCB903; } </style> |
| |
| |
| |
| |
| <meta name="ignite-version" content="2.13.0" /> |
| <title>Distributed Computing | Ignite Documentation</title> |
| |
| <link rel="canonical" href="/docs/latest/distributed-computing/distributed-computing" /> |
| |
| |
| <link rel="shortcut icon" href="/favicon.ico"> |
| <meta name='viewport' content='width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0'> |
| |
| <link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600;700&display=swap" /> |
| <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600;700&display=swap" media="print" onload="this.media='all'"> |
| <noscript> |
| <link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600;700&display=swap" rel="stylesheet"> |
| </noscript> |
| |
| <script> |
| // AnchorJS - v4.2.0 - 2019-01-01 |
| // https://github.com/bryanbraun/anchorjs |
| // Copyright (c) 2019 Bryan Braun; Licensed MIT |
| !function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(this,function(){"use strict";return function(A){function f(A){A.icon=A.hasOwnProperty("icon")?A.icon:"",A.visible=A.hasOwnProperty("visible")?A.visible:"hover",A.placement=A.hasOwnProperty("placement")?A.placement:"right",A.ariaLabel=A.hasOwnProperty("ariaLabel")?A.ariaLabel:"Anchor",A.class=A.hasOwnProperty("class")?A.class:"",A.base=A.hasOwnProperty("base")?A.base:"",A.truncate=A.hasOwnProperty("truncate")?Math.floor(A.truncate):64,A.titleText=A.hasOwnProperty("titleText")?A.titleText:""}function p(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new Error("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}this.options=A||{},this.elements=[],f(this.options),this.isTouchDevice=function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(A){var e,t,i,n,o,s,a,r,c,h,l,u,d=[];if(f(this.options),"touch"===(l=this.options.visible)&&(l=this.isTouchDevice()?"always":"hover"),A||(A="h2, h3, h4, h5, h6"),0===(e=p(A)).length)return this;for(function(){if(null===document.head.querySelector("style.anchorjs")){var A,e=document.createElement("style");e.className="anchorjs",e.appendChild(document.createTextNode("")),void 0===(A=document.head.querySelector('[rel="stylesheet"], style'))?document.head.appendChild(e):document.head.insertBefore(e,A),e.sheet.insertRule(" .anchorjs-link { opacity: 0; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }",e.sheet.cssRules.length),e.sheet.insertRule(" *:hover > .anchorjs-link, .anchorjs-link:focus { opacity: 1; }",e.sheet.cssRules.length),e.sheet.insertRule(" [data-anchorjs-icon]::after { content: attr(data-anchorjs-icon); }",e.sheet.cssRules.length),e.sheet.insertRule(' @font-face { font-family: "anchorjs-icons"; src: url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype"); }',e.sheet.cssRules.length)}}(),t=document.querySelectorAll("[id]"),i=[].map.call(t,function(A){return A.id}),o=0;o<e.length;o++)if(this.hasAnchorJSLink(e[o]))d.push(o);else{if(e[o].hasAttribute("id"))n=e[o].getAttribute("id");else if(e[o].hasAttribute("data-anchor-id"))n=e[o].getAttribute("data-anchor-id");else{for(c=r=this.urlify(e[o].textContent),a=0;void 0!==s&&(c=r+"-"+a),a+=1,-1!==(s=i.indexOf(c)););s=void 0,i.push(c),e[o].setAttribute("id",c),n=c}n.replace(/-/g," "),(h=document.createElement("a")).className="anchorjs-link "+this.options.class,h.setAttribute("aria-label",this.options.ariaLabel),h.setAttribute("data-anchorjs-icon",this.options.icon),this.options.titleText&&(h.title=this.options.titleText),u=document.querySelector("base")?window.location.pathname+window.location.search:"",u=this.options.base||u,h.href=u+"#"+n,"always"===l&&(h.style.opacity="1"),""===this.options.icon&&(h.style.font="1em/1 anchorjs-icons","left"===this.options.placement&&(h.style.lineHeight="inherit")),"left"===this.options.placement?(h.style.position="absolute",h.style.marginLeft="-1em",h.style.paddingRight="0.5em",e[o].insertBefore(h,e[o].firstChild)):(h.style.paddingLeft="0.375em",e[o].appendChild(h))}for(o=0;o<d.length;o++)e.splice(d[o]-o,1);return this.elements=this.elements.concat(e),this},this.remove=function(A){for(var e,t,i=p(A),n=0;n<i.length;n++)(t=i[n].querySelector(".anchorjs-link"))&&(-1!==(e=this.elements.indexOf(i[n]))&&this.elements.splice(e,1),i[n].removeChild(t));return this},this.removeAll=function(){this.remove(this.elements)},this.urlify=function(A){return this.options.truncate||f(this.options),A.trim().replace(/\'/gi,"").replace(/[& +$,:;=?@"#{}|^~[`%!'<>\]\.\/\(\)\*\\\n\t\b\v]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),t=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||t||!1}}}); |
| </script> |
| |
| </head> |
| <body> |
| <header> |
| <!--#include virtual="/includes/promotion_banner.html" --> |
| <div class="container"> |
| <button type='button' class='menu' title='Docs menu'> |
| <img src="/assets/images/menu-icon.svg" width="18" height="12" alt="menu icon" /> |
| </button> |
| <div class='home'> |
| <a href="/" class='home' title='Apache Ignite home'> |
| <img src="/assets/images/apache_ignite_logo.svg" alt="Apache Ignite logo" width="103" height="36" > |
| </a> |
| </div> |
| |
| |
| <select id="version-selector"> |
| <option value="2.13.0">2.13.0</option> |
| </select> |
| |
| <nav id="api-docs"><ul> |
| <li><a href="#">APIs</a> |
| <nav class='dropdown'> |
| <ul> |
| <li class="dropdown-item"><a href="/releases/latest/javadoc/index.html">Java</a></li> |
| |
| <li class="dropdown-item"><a href="/releases/latest/dotnetdoc/api/">C#/.NET</a></li> |
| |
| <li class="dropdown-item"><a href="/releases/latest/cppdoc/index.html">C++</a></li> |
| |
| <li class="dropdown-item"><a href="/releases/latest/scaladoc/scalar/index.html#org.apache.ignite.scalar.scalar$">Scala</a></li> |
| </ul> |
| </nav> |
| </li> |
| |
| <li><a href="#">Examples</a> |
| <nav class="dropdown"> |
| <ul> |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/examples" target="_blank" rel="noopener" title="Apache Ignite Java examples">Java</a></li> |
| |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/dotnet/examples" target="_blank" rel="noopener" title="Apache Ignite C#/.NET examples">C#/.NET</a></li> |
| |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/cpp/examples" target="_blank" rel="noopener" title="Apache Ignite C++ examples">C++</a></li> |
| |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/python/examples" target="_blank" rel="noopener" title="Apache Ignite Python examples">Python</a></li> |
| |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/nodejs/examples" target="_blank" rel="noopener" title="Apache Ignite NodeJS examples">NodeJS</a></li> |
| |
| <li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/php/examples" target="_blank" rel="noopener" title="Apache Ignite PHP examples">PHP</a></li> |
| </ul> |
| </nav> |
| </li></ul> |
| </nav> |
| |
| <form class='search'> |
| <button class="search-close" type='button'><img src='/assets/images/cancel.svg' alt="close" width="10" height="10" /></button> |
| <input type="search" placeholder="Search…" id="search-input"> |
| </form> |
| |
| |
| <nav id="lang-selector"><ul> |
| <li><a href="#"><img src="/assets/images/icon_lang_en_75x75.jpg" alt="English language icon" width="25" height="25" /><span>▼</span></a> |
| <nav class="dropdown"> |
| <li class="dropdown-item"><a href="/docs/latest/" ><img src="/assets/images/icon_lang_en_75x75.jpg" alt="English language icon" width="25" height="25" /><span>English</span></a></li> |
| <li class="dropdown-item"><a href="https://www.ignite-service.cn/doc/java/" target="_blank" rel="noopener"><img src="/assets/images/icon_lang_cn_75x75.jpg" width="25" height="25" alt="Chinese language icon" /><span>Chinese</span></a></li> |
| </nav> |
| </li></ul> |
| </nav> |
| |
| <button type='button' class='top-nav-toggle'>⋮</button> |
| |
| |
| |
| </div> |
| </header> |
| |
| |
| <link rel="stylesheet" href="/assets/css/docs.css"> |
| <section class='page-docs'> |
| |
| |
| |
| |
| |
| |
| <nav class='left-nav' data-swiftype-index='false'> |
| |
| |
| <li> |
| |
| |
| <a href="/docs/latest/index" class='' >Documentation Overview</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Quick Start Guides<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/quick-start/java" |
| class='' |
| >Java</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/quick-start/dotnet" |
| class='' |
| >.NET/C#</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/quick-start/cpp" |
| class='' |
| >C++</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/quick-start/python" |
| class='' |
| >Python</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/quick-start/nodejs" |
| class='' |
| >Node.JS</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/quick-start/sql" |
| class='' |
| >SQL</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/quick-start/php" |
| class='' |
| >PHP</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/quick-start/restapi" |
| class='' |
| >REST API</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Installation<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/installation/installing-using-zip" |
| class='' |
| >Installing Using ZIP Archive</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/installation/installing-using-docker" |
| class='' |
| >Installing Using Docker</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/installation/deb-rpm" |
| class='' |
| >Installing DEB or RPM package</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Kubernetes<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/latest/installation/kubernetes/amazon-eks-deployment" class=''>Amazon EKS</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/installation/kubernetes/azure-deployment" class=''>Azure Kubernetes Service</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/installation/kubernetes/gke-deployment" class=''>Google Kubernetes Engine</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/installation/vmware-installation" |
| class='' |
| >VMWare</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Setting Up<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/understanding-configuration" |
| class='' |
| >Understanding Configuration</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/setup" |
| class='' |
| >Setting Up</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/logging" |
| class='' |
| >Configuring Logging</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/resources-injection" |
| class='' |
| >Resources Injection</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/latest/starting-nodes" class='' >Starting and Stopping Nodes</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Clustering<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/clustering/clustering" |
| class='' |
| >Overview</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/clustering/tcp-ip-discovery" |
| class='' |
| >TCP/IP Discovery</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/clustering/zookeeper-discovery" |
| class='' |
| >ZooKeeper Discovery</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/clustering/discovery-in-the-cloud" |
| class='' |
| >Discovery in the Cloud</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/clustering/network-configuration" |
| class='' |
| >Network Configuration</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/clustering/connect-client-nodes" |
| class='' |
| >Connecting Client Nodes</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/clustering/baseline-topology" |
| class='' |
| >Baseline Topology</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/clustering/running-client-nodes-behind-nat" |
| class='' |
| >Running Client Nodes Behind NAT</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Thin Clients<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/thin-clients/getting-started-with-thin-clients" |
| class='' |
| >Thin Clients Overview</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/thin-clients/java-thin-client" |
| class='' |
| >Java Thin Client</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/thin-clients/dotnet-thin-client" |
| class='' |
| >.NET Thin Client</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/thin-clients/cpp-thin-client" |
| class='' |
| >C++ Thin Client</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/thin-clients/python-thin-client" |
| class='' |
| >Python Thin Client</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/thin-clients/php-thin-client" |
| class='' |
| >PHP Thin Client</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/thin-clients/nodejs-thin-client" |
| class='' |
| >Node.js Thin Client</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Binary Client Protocol<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/latest/binary-client-protocol/binary-client-protocol" class=''>Binary Client Protocol</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/binary-client-protocol/data-format" class=''>Data Format</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/binary-client-protocol/key-value-queries" class=''>Key-Value Queries</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/binary-client-protocol/sql-and-scan-queries" class=''>SQL and Scan Queries</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/binary-client-protocol/binary-type-metadata" class=''>Binary Types Metadata</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/binary-client-protocol/cache-configuration" class=''>Cache Configuration</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Data Modeling<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/data-modeling/data-modeling" |
| class='' |
| >Introduction</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/data-modeling/data-partitioning" |
| class='' |
| >Data Partitioning</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/data-modeling/affinity-collocation" |
| class='' |
| >Affinity Colocation</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/data-modeling/binary-marshaller" |
| class='' |
| >Binary Marshaller</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Configuring Memory<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/memory-architecture" |
| class='' |
| >Memory Architecture</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/memory-configuration/data-regions" |
| class='' |
| >Configuring Data Regions</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/memory-configuration/eviction-policies" |
| class='' |
| >Eviction Policies</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/memory-configuration/replacement-policies" |
| class='' |
| >Replacement Policies</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Configuring Persistence<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/persistence/native-persistence" |
| class='' |
| >Ignite Persistence</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/persistence/external-storage" |
| class='' |
| >External Storage</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/persistence/swap" |
| class='' |
| >Swapping</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/persistence/custom-cache-store" |
| class='' |
| >Implementing Custom Cache Store</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/persistence/snapshot-directory" |
| class='' |
| >Configuring Snapshot Directory</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/persistence/disk-compression" |
| class='' |
| >Disk Compression</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/persistence/persistence-tuning" |
| class='' |
| >Tuning Persistence</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/persistence/change-data-capture" |
| class='' |
| >Change Data Capture</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/latest/snapshots/snapshots" class='' >Cluster Snapshots</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Configuring Caches<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/configuring-caches/configuration-overview" |
| class='' |
| >Cache Configuration</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/configuring-caches/configuring-backups" |
| class='' |
| >Configuring Partition Backups</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/configuring-caches/partition-loss-policy" |
| class='' |
| >Partition Loss Policy</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/configuring-caches/atomicity-modes" |
| class='' |
| >Atomicity Modes</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/configuring-caches/expiry-policies" |
| class='' |
| >Expiry Policy</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/configuring-caches/on-heap-caching" |
| class='' |
| >On-Heap Caching</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/configuring-caches/cache-groups" |
| class='' |
| >Cache Groups</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/configuring-caches/near-cache" |
| class='' |
| >Near Caches</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/latest/data-rebalancing" class='' >Data Rebalancing</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/latest/data-streaming" class='' >Data Streaming</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Using Key-Value API<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/key-value-api/basic-cache-operations" |
| class='' |
| >Basic Cache Operations</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/key-value-api/binary-objects" |
| class='' |
| >Working with Binary Objects</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/key-value-api/using-cache-queries" |
| class='' |
| >Using Cache Queries</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/read-repair" |
| class='' |
| >Read Repair</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/latest/key-value-api/transactions" class='' >Performing Transactions</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Working with SQL<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/SQL/sql-introduction" |
| class='' |
| >Introduction</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/SQL/schemas" |
| class='' |
| >Understanding Schemas</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/SQL/indexes" |
| class='' |
| >Defining Indexes</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/SQL/sql-api" |
| class='' |
| >Using SQL API</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/SQL/distributed-joins" |
| class='' |
| >Distributed Joins</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/SQL/custom-sql-func" |
| class='' |
| >Custom SQL Functions</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/SQL/JDBC/jdbc-driver" |
| class='' |
| >JDBC Driver</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/SQL/JDBC/jdbc-client-driver" |
| class='' |
| >JDBC Client Driver</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>ODBC Driver<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/latest/SQL/ODBC/odbc-driver" class=''>ODBC Driver</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest//SQL/ODBC/connection-string-dsn" class=''>Connection String and DSN</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/SQL/ODBC/querying-modifying-data" class=''>Querying and Modifying Data</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/SQL/ODBC/specification" class=''>Specification</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/SQL/ODBC/data-types" class=''>Data Types</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/SQL/ODBC/error-codes" class=''>Error Codes</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/transactions/mvcc" |
| class='' |
| >Multiversion Concurrency Control</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/SQL/sql-statistics" |
| class='' |
| >SQL Statistics</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/SQL/sql-calcite" |
| class='' |
| >Calcite-based SQL Engine</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>SQL Reference<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/sql-reference/sql-conformance" |
| class='' |
| >SQL Conformance</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/sql-reference/ddl" |
| class='' |
| >Data Definition Language (DDL)</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/sql-reference/dml" |
| class='' |
| >Data Manipulation Language (DML)</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/sql-reference/transactions" |
| class='' |
| >Transactions</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/sql-reference/operational-commands" |
| class='' |
| >Operational Commands</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/sql-reference/aggregate-functions" |
| class='' |
| >Aggregate functions</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/sql-reference/numeric-functions" |
| class='' |
| >Numeric Functions</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/sql-reference/string-functions" |
| class='' |
| >String Functions</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/sql-reference/date-time-functions" |
| class='' |
| >Data and Time Functions</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/sql-reference/system-functions" |
| class='' |
| >System Functions</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/sql-reference/data-types" |
| class='' |
| >Data Types</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle expanded '>Distributed Computing<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group expanded'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/distributed-computing/distributed-computing" |
| class='active' |
| >Distributed Computing API</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/distributed-computing/cluster-groups" |
| class='' |
| >Cluster Groups</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/distributed-computing/executor-service" |
| class='' |
| >Executor Service</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/distributed-computing/map-reduce" |
| class='' |
| >MapReduce API</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/distributed-computing/load-balancing" |
| class='' |
| >Load Balancing</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/distributed-computing/fault-tolerance" |
| class='' |
| >Fault Tolerance</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/distributed-computing/job-scheduling" |
| class='' |
| >Job Scheduling</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/distributed-computing/collocated-computations" |
| class='' |
| >Colocating Computations with Data</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Code Deployment<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/code-deployment/deploying-user-code" |
| class='' |
| >Deploying User Code</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/code-deployment/peer-class-loading" |
| class='' |
| >Peer Class Loading</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Machine Learning<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/machine-learning/machine-learning" |
| class='' |
| >Machine Learning</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/machine-learning/partition-based-dataset" |
| class='' |
| >Partition Based Dataset</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/machine-learning/updating-trained-models" |
| class='' |
| >Updating Trained Models</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Binary Classification<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/binary-classification/introduction" class=''>Introduction</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/binary-classification/linear-svm" class=''>Linear SVM (Support Vector Machine)</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/binary-classification/decision-trees" class=''>Decision Trees</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/binary-classification/multilayer-perceptron" class=''>Multilayer Perceptron</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/binary-classification/logistic-regression" class=''>Logistic Regression</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/binary-classification/knn-classification" class=''>k-NN Classification</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/binary-classification/ann" class=''>ANN (Approximate Nearest Neighbor)</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/binary-classification/naive-bayes" class=''>Naive Bayes</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Regression<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/regression/introduction" class=''>Introduction</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/regression/linear-regression" class=''>Linear Regression</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/regression/decision-trees-regression" class=''>Decision Trees Regression</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/regression/knn-regression" class=''>k-NN Regression</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Clustering<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/clustering/introduction" class=''>Introduction</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/clustering/k-means-clustering" class=''>K-Means Clustering</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/clustering/gaussian-mixture" class=''>Gaussian mixture (GMM)</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/machine-learning/preprocessing" |
| class='' |
| >Preprocessing</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Model Selection<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/model-selection/introduction" class=''>Introduction</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/model-selection/evaluator" class=''>Evaluator</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/model-selection/split-the-dataset-on-test-and-train-datasets" class=''>Split the dataset on test and train datasets</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/model-selection/hyper-parameter-tuning" class=''>Hyper-parameter tuning</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/model-selection/pipeline-api" class=''>Pipeline API</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/machine-learning/multiclass-classification" |
| class='' |
| >Multiclass Classification</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Ensemble Methods<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/ensemble-methods/introduction" class=''></a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/ensemble-methods/stacking" class=''>Stacking</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/ensemble-methods/baggin" class=''>Bagging</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/ensemble-methods/random-forest" class=''>Random Forest</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/ensemble-methods/gradient-boosting" class=''>Gradient Boosting</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/machine-learning/recommendation-systems" |
| class='' |
| >Recommendation Systems</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Importing Model<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/importing-model/introduction" class=''>Introduction</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/importing-model/model-import-from-gxboost" class=''>Import Model from XGBoost</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/machine-learning/importing-model/model-import-from-apache-spark" class=''>Import Model from Apache Spark</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/latest/key-value-api/continuous-queries" class='' >Using Continuous Queries</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/latest/services/services" class='' >Using Ignite Services</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/latest/messaging" class='' >Using Ignite Messaging</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Distributed Data Structures<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/data-structures/queue-and-set" |
| class='' |
| >Queue and Set</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/data-structures/atomic-types" |
| class='' |
| >Atomic Types</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/data-structures/countdownlatch" |
| class='' |
| >CountDownLatch</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/data-structures/atomic-sequence" |
| class='' |
| >Atomic Sequence</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/data-structures/semaphore" |
| class='' |
| >Semaphore</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/data-structures/id-generator" |
| class='' |
| >ID Generator</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/latest/distributed-locks" class='' >Distributed Locks</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/latest/restapi" class='' >REST API</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>.NET Specific<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/net-specific/net-configuration-options" |
| class='' |
| >Configuration Options</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/net-specific/net-deployment-options" |
| class='' |
| >Deployment Options</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/net-specific/net-standalone-nodes" |
| class='' |
| >Standalone Nodes</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/net-specific/net-async" |
| class='' |
| >Asynchronous APIs</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/net-specific/net-logging" |
| class='' |
| >Logging</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/net-specific/net-linq" |
| class='' |
| >LINQ</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/net-specific/net-java-services-execution" |
| class='' |
| >Java Services Execution</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/net-specific/net-platform-cache" |
| class='' |
| >.NET Platform Cache</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/net-specific/net-plugins" |
| class='' |
| >Plugins</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/net-specific/net-serialization" |
| class='' |
| >Serialization</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/net-specific/net-cross-platform-support" |
| class='' |
| >Cross-Platform Support</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/net-specific/net-platform-interoperability" |
| class='' |
| >Platform Interoperability</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/net-specific/net-remote-assembly-loading" |
| class='' |
| >Remote Assembly Loading</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/net-specific/net-troubleshooting" |
| class='' |
| >Troubleshooting</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Integrations<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/latest/net-specific/asp-net-output-caching" class=''>ASP.NET Output Caching</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/net-specific/asp-net-session-state-caching" class=''>ASP.NET Session State Caching</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/net-specific/net-entity-framework-cache" class=''>Entity Framework 2nd Level Cache</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>C++ Specific<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/cpp-specific/cpp-serialization" |
| class='' |
| >Serialization</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/cpp-specific/cpp-platform-interoperability" |
| class='' |
| >Platform Interoperability</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/cpp-specific/cpp-objects-lifetime" |
| class='' |
| >Objects Lifetime</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Monitoring<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/monitoring-metrics/intro" |
| class='' |
| >Introduction</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/monitoring-metrics/cluster-id" |
| class='' |
| >Cluster ID and Tag</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/monitoring-metrics/cluster-states" |
| class='' |
| >Cluster States</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Metrics<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/latest/monitoring-metrics/configuring-metrics" class=''>Configuring Metrics</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/monitoring-metrics/metrics" class=''>JMX Metrics</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>New Metrics System<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/latest/monitoring-metrics/new-metrics-system" class=''>Introduction</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/monitoring-metrics/new-metrics" class=''>Metrics</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/monitoring-metrics/system-views" |
| class='' |
| >System Views</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/monitoring-metrics/performance-statistics" |
| class='' |
| >Performance Statistics</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/monitoring-metrics/tracing" |
| class='' |
| >Tracing</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Working with Events<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/events/listening-to-events" |
| class='' |
| >Enabling and Listenting to Events</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/events/events" |
| class='' |
| >Events</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Tools<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/tools/control-script" |
| class='' |
| >Control Script</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/tools/visor-cmd" |
| class='' |
| >Visor CMD</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/tools/gg-control-center" |
| class='' |
| >GridGain Control Center</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/tools/sqlline" |
| class='' |
| >SQLLine</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/tools/tableau" |
| class='' |
| >Tableau</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/tools/informatica" |
| class='' |
| >Informatica</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/tools/pentaho" |
| class='' |
| >Pentaho</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Security<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/security/authentication" |
| class='' |
| >Authentication</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/security/ssl-tls" |
| class='' |
| >SSL/TLS</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Transparent Data Encryption<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/latest/security/tde" class=''>Introduction</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/security/master-key-rotation" class=''>Master key rotation</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/security/cache-encryption-key-rotation" class=''>Cache encryption key rotation</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/security/sandbox" |
| class='' |
| >Sandbox</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Extensions and Integrations<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Spring<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/spring/spring-boot" class=''>Spring Boot</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/spring/spring-data" class=''>Spring Data</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/spring/spring-caching" class=''>Spring Caching</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/spring/spring-tx" class=''>Spring Transactions</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Ignite for Spark<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/ignite-for-spark/overview" class=''>Overview</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/ignite-for-spark/ignitecontext-and-rdd" class=''>IgniteContext and IgniteRDD</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/ignite-for-spark/ignite-dataframe" class=''>Ignite DataFrame</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/ignite-for-spark/installation" class=''>Installation</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/ignite-for-spark/spark-shell" class=''>Test Ignite with Spark-shell</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/ignite-for-spark/troubleshooting" class=''>Troubleshooting</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/extensions-and-integrations/hibernate-l2-cache" |
| class='' |
| >Hibernate L2 Cache</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/extensions-and-integrations/mybatis-l2-cache" |
| class='' |
| >MyBatis L2 Cache</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Streaming<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/streaming/kafka-streamer" class=''>Kafka Streamer</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/streaming/camel-streamer" class=''>Camel Streamer</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/streaming/flink-streamer" class=''>Flink Streamer</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/streaming/flume-sink" class=''>Flume Sink</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/streaming/jms-streamer" class=''>JMS Streamer</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/streaming/mqtt-streamer" class=''>MQTT Streamer</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/streaming/rocketmq-streamer" class=''>RocketMQ Streamer</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/streaming/storm-streamer" class=''>Storm Streamer</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/streaming/zeromq-streamer" class=''>ZeroMQ Streamer</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/streaming/twitter-streamer" class=''>Twitter Streamer</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| |
| |
| <button |
| type='button' |
| class='collapsed '>Cassandra Integration<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class="sub_pages collapsed"> |
| |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/cassandra/overview" class=''>Overview</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/cassandra/configuration" class=''>Configuration</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/cassandra/usage-examples" class=''>Usage Examples</a></li> |
| |
| |
| |
| |
| <li><a href="/docs/latest/extensions-and-integrations/cassandra/ddl-generator" class=''>DDL Generator</a></li> |
| |
| </nav> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/extensions-and-integrations/php-pdo" |
| class='' |
| >PHP PDO</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/extensions-and-integrations/performance-statistics" |
| class='' |
| >Performance Statistics</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/extensions-and-integrations/change-data-capture-extensions" |
| class='' |
| >Change Data Capture</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| <li> |
| |
| |
| <a href="/docs/latest/plugins" class='' >Plugins</a> |
| |
| </li> |
| |
| <li> |
| |
| |
| |
| |
| |
| |
| <button type='button' class='group-toggle collapsed '>Performance and Troubleshooting<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button> |
| <nav class='nav-group collapsed'> |
| |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/perf-and-troubleshooting/general-perf-tips" |
| class='' |
| >General Performance Tips</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/perf-and-troubleshooting/memory-tuning" |
| class='' |
| >Memory and JVM Tuning</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/perf-and-troubleshooting/persistence-tuning" |
| class='' |
| >Persistence Tuning</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/perf-and-troubleshooting/sql-tuning" |
| class='' |
| >SQL Tuning</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/perf-and-troubleshooting/thread-pools-tuning" |
| class='' |
| >Thread Pools Tuning</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/perf-and-troubleshooting/troubleshooting" |
| class='' |
| >Troubleshooting and Debugging</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/perf-and-troubleshooting/handling-exceptions" |
| class='' |
| >Handling Exceptions</a> |
| |
| </li> |
| |
| |
| |
| |
| |
| |
| <li> |
| |
| <a href="/docs/latest/perf-and-troubleshooting/yardstick-benchmarking" |
| class='' |
| >Benchmarking With Yardstick</a> |
| |
| </li> |
| |
| |
| |
| </nav> |
| |
| </li> |
| |
| </nav> |
| <div class="left-nav__overlay"></div> |
| |
| |
| <article data-swiftype-index='true'> |
| <a class='edit-link' href="https://github.com/apache/ignite/tree/IGNITE-7595/docs/_docs/distributed-computing/distributed-computing.adoc" target="_blank">Edit</a> |
| |
| <h1>Distributed Computing</h1> |
| |
| <div id="preamble"> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Ignite provides an API for distributing computations across cluster nodes in a balanced and fault-tolerant manner. You can submit individual tasks for execution as well as implement the MapReduce pattern with automatic task splitting. The API provides fine-grained control over the <a href="/docs/latest/distributed-computing/load-balancing">job distribution strategy</a>.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="getting-the-compute-interface">Getting the Compute Interface</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>The main entry point for running distributed computations is the compute interface, which can be obtained from an instance of <code>Ignite</code>.</p> |
| </div> |
| <code-tabs><code-tab data-tab='Java'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="java"><span class="nc">Ignite</span> <span class="n">ignite</span> <span class="o">=</span> <span class="nc">Ignition</span><span class="o">.</span><span class="na">start</span><span class="o">();</span> |
| |
| <span class="nc">IgniteCompute</span> <span class="n">compute</span> <span class="o">=</span> <span class="n">ignite</span><span class="o">.</span><span class="na">compute</span><span class="o">();</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C#/.NET'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="csharp"><span class="kt">var</span> <span class="n">ignite</span> <span class="p">=</span> <span class="n">Ignition</span><span class="p">.</span><span class="nf">Start</span><span class="p">();</span> |
| <span class="kt">var</span> <span class="n">compute</span> <span class="p">=</span> <span class="n">ignite</span><span class="p">.</span><span class="nf">GetCompute</span><span class="p">();</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C++'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="cpp"><span class="n">Ignite</span> <span class="n">ignite</span> <span class="o">=</span> <span class="n">Ignition</span><span class="o">::</span><span class="n">Start</span><span class="p">(</span><span class="n">cfg</span><span class="p">);</span> |
| |
| <span class="n">Compute</span> <span class="n">compute</span> <span class="o">=</span> <span class="n">ignite</span><span class="p">.</span><span class="n">GetCompute</span><span class="p">();</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| <div class="paragraph"> |
| <p>The compute interface provides methods for distributing different types of tasks over cluster nodes and running <a href="/docs/latest/distributed-computing/collocated-computations">colocated computations</a>.</p> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="specifying-the-set-of-nodes-for-computations">Specifying the Set of Nodes for Computations</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Each instance of the compute interface is associated with a <a href="/docs/latest/distributed-computing/cluster-groups">set of nodes</a> on which the tasks are executed. |
| When called without arguments, <code>ignite.compute()</code> returns the compute interface that is associated with all server nodes. |
| To obtain an instance for a specific subset of nodes, use <code>Ignite.compute(ClusterGroup group)</code>. |
| In the following example, the compute interface is bound to the remote nodes only, i.e. all nodes except for the one that runs this code.</p> |
| </div> |
| <code-tabs><code-tab data-tab='Java'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="java"><span class="nc">Ignite</span> <span class="n">ignite</span> <span class="o">=</span> <span class="nc">Ignition</span><span class="o">.</span><span class="na">start</span><span class="o">();</span> |
| |
| <span class="nc">IgniteCompute</span> <span class="n">compute</span> <span class="o">=</span> <span class="n">ignite</span><span class="o">.</span><span class="na">compute</span><span class="o">(</span><span class="n">ignite</span><span class="o">.</span><span class="na">cluster</span><span class="o">().</span><span class="na">forRemotes</span><span class="o">());</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C#/.NET'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="csharp"><span class="kt">var</span> <span class="n">ignite</span> <span class="p">=</span> <span class="n">Ignition</span><span class="p">.</span><span class="nf">Start</span><span class="p">();</span> |
| <span class="kt">var</span> <span class="n">compute</span> <span class="p">=</span> <span class="n">ignite</span><span class="p">.</span><span class="nf">GetCluster</span><span class="p">().</span><span class="nf">ForRemotes</span><span class="p">().</span><span class="nf">GetCompute</span><span class="p">();</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C++' data-unavailable='true'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code>This API is not presently available for C++.</code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="executing-tasks">Executing Tasks</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>Ignite provides three interfaces that can be implemented to represent a task and executed via the compute interface:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p><code>IgniteRunnable</code> — an extension of <code>java.lang.Runnable</code> that can be used to implement calculations that do not have input parameters and return no result.</p> |
| </li> |
| <li> |
| <p><code>IgniteCallable</code> — an extension of <code>java.util.concurrent.Callable</code> that returns a specific value.</p> |
| </li> |
| <li> |
| <p><code>IgniteClosure</code> — a functional interface that accepts a parameter and returns a value.</p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>You can execute a task once (on one of the nodes) or broadcast it to all nodes.</p> |
| </div> |
| <div class="admonitionblock important"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <div class="title">Important</div> |
| </td> |
| <td class="content"> |
| <div class="paragraph"> |
| <p>In order to run tasks on the remote nodes, make sure the class definitions of the tasks are available on the nodes. |
| You can do this in two ways:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p>Add the classes to the classpath of the nodes;</p> |
| </li> |
| <li> |
| <p>Enable <a href="/docs/latest/code-deployment/peer-class-loading">peer class loading</a>.</p> |
| </li> |
| </ul> |
| </div> |
| </td> |
| </tr> |
| </table> |
| </div> |
| <div class="sect2"> |
| <h3 id="executing-a-runnable-task">Executing a Runnable Task</h3> |
| <div class="paragraph"> |
| <p>To execute a runnable task, use the <code>run(…​)</code> method of the compute interface. The task is sent to one of the nodes associated with the compute instance.</p> |
| </div> |
| <code-tabs><code-tab data-tab='Java'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="java"><span class="nc">IgniteCompute</span> <span class="n">compute</span> <span class="o">=</span> <span class="n">ignite</span><span class="o">.</span><span class="na">compute</span><span class="o">();</span> |
| |
| <span class="c1">// Iterate through all words and print</span> |
| <span class="c1">// each word on a different cluster node.</span> |
| <span class="k">for</span> <span class="o">(</span><span class="nc">String</span> <span class="n">word</span> <span class="o">:</span> <span class="s">"Print words on different cluster nodes"</span><span class="o">.</span><span class="na">split</span><span class="o">(</span><span class="s">" "</span><span class="o">))</span> <span class="o">{</span> |
| <span class="n">compute</span><span class="o">.</span><span class="na">run</span><span class="o">(()</span> <span class="o">-></span> <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">word</span><span class="o">));</span> |
| <span class="o">}</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C#/.NET'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="csharp"><span class="k">class</span> <span class="nc">PrintWordAction</span> <span class="p">:</span> <span class="n">IComputeAction</span> |
| <span class="p">{</span> |
| <span class="k">public</span> <span class="k">void</span> <span class="nf">Invoke</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="k">foreach</span> <span class="p">(</span><span class="kt">var</span> <span class="n">s</span> <span class="k">in</span> <span class="s">"Print words on different cluster nodes"</span><span class="p">.</span><span class="nf">Split</span><span class="p">(</span><span class="s">" "</span><span class="p">))</span> |
| <span class="p">{</span> |
| <span class="n">Console</span><span class="p">.</span><span class="nf">WriteLine</span><span class="p">(</span><span class="n">s</span><span class="p">);</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| |
| <span class="k">public</span> <span class="k">static</span> <span class="k">void</span> <span class="nf">ComputeRunDemo</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="kt">var</span> <span class="n">ignite</span> <span class="p">=</span> <span class="n">Ignition</span><span class="p">.</span><span class="nf">Start</span><span class="p">(</span> |
| <span class="k">new</span> <span class="n">IgniteConfiguration</span> |
| <span class="p">{</span> |
| <span class="n">DiscoverySpi</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TcpDiscoverySpi</span> |
| <span class="p">{</span> |
| <span class="n">LocalPort</span> <span class="p">=</span> <span class="m">48500</span><span class="p">,</span> |
| <span class="n">LocalPortRange</span> <span class="p">=</span> <span class="m">20</span><span class="p">,</span> |
| <span class="n">IpFinder</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TcpDiscoveryStaticIpFinder</span> |
| <span class="p">{</span> |
| <span class="n">Endpoints</span> <span class="p">=</span> <span class="k">new</span><span class="p">[]</span> |
| <span class="p">{</span> |
| <span class="s">"127.0.0.1:48500..48520"</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| <span class="p">);</span> |
| <span class="n">ignite</span><span class="p">.</span><span class="nf">GetCompute</span><span class="p">().</span><span class="nf">Run</span><span class="p">(</span><span class="k">new</span> <span class="nf">PrintWordAction</span><span class="p">());</span> |
| <span class="p">}</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C++'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="cpp"><span class="cm">/* |
| * Function class. |
| */</span> |
| <span class="k">class</span> <span class="nc">PrintWord</span> <span class="o">:</span> <span class="k">public</span> <span class="n">compute</span><span class="o">::</span><span class="n">ComputeFunc</span><span class="o"><</span><span class="kt">void</span><span class="o">></span> |
| <span class="p">{</span> |
| <span class="k">friend</span> <span class="k">struct</span> <span class="nc">ignite</span><span class="o">::</span><span class="n">binary</span><span class="o">::</span><span class="n">BinaryType</span><span class="o"><</span><span class="n">PrintWord</span><span class="o">></span><span class="p">;</span> |
| <span class="nl">public:</span> |
| <span class="cm">/* |
| * Default constructor. |
| */</span> |
| <span class="n">PrintWord</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="c1">// No-op.</span> |
| <span class="p">}</span> |
| |
| <span class="cm">/* |
| * Constructor. |
| * |
| * @param text Text. |
| */</span> |
| <span class="n">PrintWord</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">word</span><span class="p">)</span> <span class="o">:</span> |
| <span class="n">word</span><span class="p">(</span><span class="n">word</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="c1">// No-op.</span> |
| <span class="p">}</span> |
| |
| <span class="cm">/** |
| * Callback. |
| */</span> |
| <span class="k">virtual</span> <span class="kt">void</span> <span class="n">Call</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="n">word</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="cm">/** Word to print. */</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">word</span><span class="p">;</span> |
| |
| <span class="p">};</span> |
| |
| <span class="cm">/** |
| * Binary type structure. Defines a set of functions required for type to be serialized and deserialized. |
| */</span> |
| <span class="k">namespace</span> <span class="n">ignite</span> |
| <span class="p">{</span> |
| <span class="k">namespace</span> <span class="n">binary</span> |
| <span class="p">{</span> |
| <span class="k">template</span><span class="o"><</span><span class="p">></span> |
| <span class="k">struct</span> <span class="nc">BinaryType</span><span class="o"><</span><span class="n">PrintWord</span><span class="o">></span> |
| <span class="p">{</span> |
| <span class="k">static</span> <span class="kt">int32_t</span> <span class="n">GetTypeId</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="n">GetBinaryStringHashCode</span><span class="p">(</span><span class="s">"PrintWord"</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="n">GetTypeName</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">dst</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="n">dst</span> <span class="o">=</span> <span class="s">"PrintWord"</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">int32_t</span> <span class="n">GetFieldId</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">name</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="n">GetBinaryStringHashCode</span><span class="p">(</span><span class="n">name</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">int32_t</span> <span class="n">GetHashCode</span><span class="p">(</span><span class="k">const</span> <span class="n">PrintWord</span><span class="o">&</span> <span class="n">obj</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">bool</span> <span class="n">IsNull</span><span class="p">(</span><span class="k">const</span> <span class="n">PrintWord</span><span class="o">&</span> <span class="n">obj</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="nb">false</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="n">GetNull</span><span class="p">(</span><span class="n">PrintWord</span><span class="o">&</span> <span class="n">dst</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="n">dst</span> <span class="o">=</span> <span class="n">PrintWord</span><span class="p">(</span><span class="s">""</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="n">Write</span><span class="p">(</span><span class="n">BinaryWriter</span><span class="o">&</span> <span class="n">writer</span><span class="p">,</span> <span class="k">const</span> <span class="n">PrintWord</span><span class="o">&</span> <span class="n">obj</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="n">writer</span><span class="p">.</span><span class="n">RawWriter</span><span class="p">().</span><span class="n">WriteString</span><span class="p">(</span><span class="n">obj</span><span class="p">.</span><span class="n">word</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="n">Read</span><span class="p">(</span><span class="n">BinaryReader</span><span class="o">&</span> <span class="n">reader</span><span class="p">,</span> <span class="n">PrintWord</span><span class="o">&</span> <span class="n">dst</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="n">dst</span><span class="p">.</span><span class="n">word</span> <span class="o">=</span> <span class="n">reader</span><span class="p">.</span><span class="n">RawReader</span><span class="p">().</span><span class="n">ReadString</span><span class="p">();</span> |
| <span class="p">}</span> |
| <span class="p">};</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| |
| <span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="n">IgniteConfiguration</span> <span class="n">cfg</span><span class="p">;</span> |
| <span class="n">cfg</span><span class="p">.</span><span class="n">springCfgPath</span> <span class="o">=</span> <span class="s">"/path/to/configuration.xml"</span><span class="p">;</span> |
| |
| <span class="n">Ignite</span> <span class="n">ignite</span> <span class="o">=</span> <span class="n">Ignition</span><span class="o">::</span><span class="n">Start</span><span class="p">(</span><span class="n">cfg</span><span class="p">);</span> |
| |
| <span class="c1">// Get binding instance.</span> |
| <span class="n">IgniteBinding</span> <span class="n">binding</span> <span class="o">=</span> <span class="n">ignite</span><span class="p">.</span><span class="n">GetBinding</span><span class="p">();</span> |
| |
| <span class="c1">// Registering our class as a compute function.</span> |
| <span class="n">binding</span><span class="p">.</span><span class="n">RegisterComputeFunc</span><span class="o"><</span><span class="n">PrintWord</span><span class="o">></span><span class="p">();</span> |
| |
| <span class="c1">// Get compute instance.</span> |
| <span class="n">compute</span><span class="o">::</span><span class="n">Compute</span> <span class="n">compute</span> <span class="o">=</span> <span class="n">ignite</span><span class="p">.</span><span class="n">GetCompute</span><span class="p">();</span> |
| |
| <span class="n">std</span><span class="o">::</span><span class="n">istringstream</span> <span class="n">iss</span><span class="p">(</span><span class="s">"Print words on different cluster nodes"</span><span class="p">);</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">words</span><span class="p">((</span><span class="n">std</span><span class="o">::</span><span class="n">istream_iterator</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="p">(</span><span class="n">iss</span><span class="p">)),</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">istream_iterator</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="p">());</span> |
| |
| <span class="c1">// Iterate through all words and print</span> |
| <span class="c1">// each word on a different cluster node.</span> |
| <span class="k">for</span> <span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">word</span> <span class="o">:</span> <span class="n">words</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="c1">// Run compute task.</span> |
| <span class="n">compute</span><span class="p">.</span><span class="n">Run</span><span class="p">(</span><span class="n">PrintWord</span><span class="p">(</span><span class="n">word</span><span class="p">));</span> |
| <span class="p">}</span> |
| <span class="p">}</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| </div> |
| <div class="sect2"> |
| <h3 id="executing-a-callable-task">Executing a Callable Task</h3> |
| <div class="paragraph"> |
| <p>To execute a callable task, use the <code>call(…​)</code> method of the compute interface.</p> |
| </div> |
| <code-tabs><code-tab data-tab='Java'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="java"><span class="nc">Collection</span><span class="o"><</span><span class="nc">IgniteCallable</span><span class="o"><</span><span class="nc">Integer</span><span class="o">>></span> <span class="n">calls</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">ArrayList</span><span class="o"><>();</span> |
| |
| <span class="c1">// Iterate through all words in the sentence and create callable jobs.</span> |
| <span class="k">for</span> <span class="o">(</span><span class="nc">String</span> <span class="n">word</span> <span class="o">:</span> <span class="s">"How many characters"</span><span class="o">.</span><span class="na">split</span><span class="o">(</span><span class="s">" "</span><span class="o">))</span> |
| <span class="n">calls</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="nl">word:</span><span class="o">:</span><span class="n">length</span><span class="o">);</span> |
| |
| <span class="c1">// Execute the collection of callables on the cluster.</span> |
| <span class="nc">Collection</span><span class="o"><</span><span class="nc">Integer</span><span class="o">></span> <span class="n">res</span> <span class="o">=</span> <span class="n">ignite</span><span class="o">.</span><span class="na">compute</span><span class="o">().</span><span class="na">call</span><span class="o">(</span><span class="n">calls</span><span class="o">);</span> |
| |
| <span class="c1">// Add all the word lengths received from cluster nodes.</span> |
| <span class="kt">int</span> <span class="n">total</span> <span class="o">=</span> <span class="n">res</span><span class="o">.</span><span class="na">stream</span><span class="o">().</span><span class="na">mapToInt</span><span class="o">(</span><span class="nl">Integer:</span><span class="o">:</span><span class="n">intValue</span><span class="o">).</span><span class="na">sum</span><span class="o">();</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C#/.NET'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="csharp"><span class="k">class</span> <span class="nc">CharCounter</span> <span class="p">:</span> <span class="n">IComputeFunc</span><span class="p"><</span><span class="kt">int</span><span class="p">></span> |
| <span class="p">{</span> |
| <span class="k">private</span> <span class="k">readonly</span> <span class="kt">string</span> <span class="n">arg</span><span class="p">;</span> |
| |
| <span class="k">public</span> <span class="nf">CharCounter</span><span class="p">(</span><span class="kt">string</span> <span class="n">arg</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="k">this</span><span class="p">.</span><span class="n">arg</span> <span class="p">=</span> <span class="n">arg</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">public</span> <span class="kt">int</span> <span class="nf">Invoke</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="n">arg</span><span class="p">.</span><span class="n">Length</span><span class="p">;</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| |
| <span class="k">public</span> <span class="k">static</span> <span class="k">void</span> <span class="nf">ComputeFuncDemo</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="kt">var</span> <span class="n">ignite</span> <span class="p">=</span> <span class="n">Ignition</span><span class="p">.</span><span class="nf">Start</span><span class="p">(</span> |
| <span class="k">new</span> <span class="n">IgniteConfiguration</span> |
| <span class="p">{</span> |
| <span class="n">DiscoverySpi</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TcpDiscoverySpi</span> |
| <span class="p">{</span> |
| <span class="n">LocalPort</span> <span class="p">=</span> <span class="m">48500</span><span class="p">,</span> |
| <span class="n">LocalPortRange</span> <span class="p">=</span> <span class="m">20</span><span class="p">,</span> |
| <span class="n">IpFinder</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TcpDiscoveryStaticIpFinder</span> |
| <span class="p">{</span> |
| <span class="n">Endpoints</span> <span class="p">=</span> <span class="k">new</span><span class="p">[]</span> |
| <span class="p">{</span> |
| <span class="s">"127.0.0.1:48500..48520"</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| <span class="p">);</span> |
| |
| <span class="c1">// Iterate through all words in the sentence and create callable jobs.</span> |
| <span class="kt">var</span> <span class="n">calls</span> <span class="p">=</span> <span class="s">"How many characters"</span><span class="p">.</span><span class="nf">Split</span><span class="p">(</span><span class="s">" "</span><span class="p">).</span><span class="nf">Select</span><span class="p">(</span><span class="n">s</span> <span class="p">=></span> <span class="k">new</span> <span class="nf">CharCounter</span><span class="p">(</span><span class="n">s</span><span class="p">)).</span><span class="nf">ToList</span><span class="p">();</span> |
| |
| <span class="c1">// Execute the collection of calls on the cluster.</span> |
| <span class="kt">var</span> <span class="n">res</span> <span class="p">=</span> <span class="n">ignite</span><span class="p">.</span><span class="nf">GetCompute</span><span class="p">().</span><span class="nf">Call</span><span class="p">(</span><span class="n">calls</span><span class="p">);</span> |
| |
| <span class="c1">// Add all the word lengths received from cluster nodes.</span> |
| <span class="kt">var</span> <span class="n">total</span> <span class="p">=</span> <span class="n">res</span><span class="p">.</span><span class="nf">Sum</span><span class="p">();</span> |
| <span class="p">}</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C++'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="cpp"><span class="cm">/* |
| * Function class. |
| */</span> |
| <span class="k">class</span> <span class="nc">CountLength</span> <span class="o">:</span> <span class="k">public</span> <span class="n">compute</span><span class="o">::</span><span class="n">ComputeFunc</span><span class="o"><</span><span class="kt">int32_t</span><span class="o">></span> |
| <span class="p">{</span> |
| <span class="k">friend</span> <span class="k">struct</span> <span class="nc">ignite</span><span class="o">::</span><span class="n">binary</span><span class="o">::</span><span class="n">BinaryType</span><span class="o"><</span><span class="n">CountLength</span><span class="o">></span><span class="p">;</span> |
| <span class="nl">public:</span> |
| <span class="cm">/* |
| * Default constructor. |
| */</span> |
| <span class="n">CountLength</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="c1">// No-op.</span> |
| <span class="p">}</span> |
| |
| <span class="cm">/* |
| * Constructor. |
| * |
| * @param text Text. |
| */</span> |
| <span class="n">CountLength</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">word</span><span class="p">)</span> <span class="o">:</span> |
| <span class="n">word</span><span class="p">(</span><span class="n">word</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="c1">// No-op.</span> |
| <span class="p">}</span> |
| |
| <span class="cm">/** |
| * Callback. |
| * Counts number of characters in provided word. |
| * |
| * @return Word's length. |
| */</span> |
| <span class="k">virtual</span> <span class="kt">int32_t</span> <span class="n">Call</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="n">word</span><span class="p">.</span><span class="n">length</span><span class="p">();</span> |
| <span class="p">}</span> |
| |
| <span class="cm">/** Word to print. */</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">word</span><span class="p">;</span> |
| |
| <span class="p">};</span> |
| |
| <span class="cm">/** |
| * Binary type structure. Defines a set of functions required for type to be serialized and deserialized. |
| */</span> |
| <span class="k">namespace</span> <span class="n">ignite</span> |
| <span class="p">{</span> |
| <span class="k">namespace</span> <span class="n">binary</span> |
| <span class="p">{</span> |
| <span class="k">template</span><span class="o"><</span><span class="p">></span> |
| <span class="k">struct</span> <span class="nc">BinaryType</span><span class="o"><</span><span class="n">CountLength</span><span class="o">></span> |
| <span class="p">{</span> |
| <span class="k">static</span> <span class="kt">int32_t</span> <span class="n">GetTypeId</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="n">GetBinaryStringHashCode</span><span class="p">(</span><span class="s">"CountLength"</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="n">GetTypeName</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">dst</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="n">dst</span> <span class="o">=</span> <span class="s">"CountLength"</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">int32_t</span> <span class="n">GetFieldId</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">name</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="n">GetBinaryStringHashCode</span><span class="p">(</span><span class="n">name</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">int32_t</span> <span class="n">GetHashCode</span><span class="p">(</span><span class="k">const</span> <span class="n">CountLength</span><span class="o">&</span> <span class="n">obj</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">bool</span> <span class="n">IsNull</span><span class="p">(</span><span class="k">const</span> <span class="n">CountLength</span><span class="o">&</span> <span class="n">obj</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="nb">false</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="n">GetNull</span><span class="p">(</span><span class="n">CountLength</span><span class="o">&</span> <span class="n">dst</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="n">dst</span> <span class="o">=</span> <span class="n">CountLength</span><span class="p">(</span><span class="s">""</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="n">Write</span><span class="p">(</span><span class="n">BinaryWriter</span><span class="o">&</span> <span class="n">writer</span><span class="p">,</span> <span class="k">const</span> <span class="n">CountLength</span><span class="o">&</span> <span class="n">obj</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="n">writer</span><span class="p">.</span><span class="n">RawWriter</span><span class="p">().</span><span class="n">WriteString</span><span class="p">(</span><span class="n">obj</span><span class="p">.</span><span class="n">word</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="n">Read</span><span class="p">(</span><span class="n">BinaryReader</span><span class="o">&</span> <span class="n">reader</span><span class="p">,</span> <span class="n">CountLength</span><span class="o">&</span> <span class="n">dst</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="n">dst</span><span class="p">.</span><span class="n">word</span> <span class="o">=</span> <span class="n">reader</span><span class="p">.</span><span class="n">RawReader</span><span class="p">().</span><span class="n">ReadString</span><span class="p">();</span> |
| <span class="p">}</span> |
| <span class="p">};</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| |
| <span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="n">IgniteConfiguration</span> <span class="n">cfg</span><span class="p">;</span> |
| <span class="n">cfg</span><span class="p">.</span><span class="n">springCfgPath</span> <span class="o">=</span> <span class="s">"/path/to/configuration.xml"</span><span class="p">;</span> |
| |
| <span class="n">Ignite</span> <span class="n">ignite</span> <span class="o">=</span> <span class="n">Ignition</span><span class="o">::</span><span class="n">Start</span><span class="p">(</span><span class="n">cfg</span><span class="p">);</span> |
| |
| <span class="c1">// Get binding instance.</span> |
| <span class="n">IgniteBinding</span> <span class="n">binding</span> <span class="o">=</span> <span class="n">ignite</span><span class="p">.</span><span class="n">GetBinding</span><span class="p">();</span> |
| |
| <span class="c1">// Registering our class as a compute function.</span> |
| <span class="n">binding</span><span class="p">.</span><span class="n">RegisterComputeFunc</span><span class="o"><</span><span class="n">CountLength</span><span class="o">></span><span class="p">();</span> |
| |
| <span class="c1">// Get compute instance.</span> |
| <span class="n">compute</span><span class="o">::</span><span class="n">Compute</span> <span class="n">compute</span> <span class="o">=</span> <span class="n">ignite</span><span class="p">.</span><span class="n">GetCompute</span><span class="p">();</span> |
| |
| <span class="n">std</span><span class="o">::</span><span class="n">istringstream</span> <span class="n">iss</span><span class="p">(</span><span class="s">"How many characters"</span><span class="p">);</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">words</span><span class="p">((</span><span class="n">std</span><span class="o">::</span><span class="n">istream_iterator</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="p">(</span><span class="n">iss</span><span class="p">)),</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">istream_iterator</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="p">());</span> |
| |
| <span class="kt">int32_t</span> <span class="n">total</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> |
| |
| <span class="c1">// Iterate through all words in the sentence, create and call jobs.</span> |
| <span class="k">for</span> <span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">word</span> <span class="o">:</span> <span class="n">words</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="c1">// Add word length received from cluster node.</span> |
| <span class="n">total</span> <span class="o">+=</span> <span class="n">compute</span><span class="p">.</span><span class="n">Call</span><span class="o"><</span><span class="kt">int32_t</span><span class="o">></span><span class="p">(</span><span class="n">CountLength</span><span class="p">(</span><span class="n">word</span><span class="p">));</span> |
| <span class="p">}</span> |
| <span class="p">}</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| </div> |
| <div class="sect2"> |
| <h3 id="executing-an-igniteclosure">Executing an IgniteClosure</h3> |
| <div class="paragraph"> |
| <p>To execute an <code>IgniteClosure</code>, use the <code>apply(…​)</code> method of the compute interface. The method accepts a task and an input parameter for the task. The parameter is passed to the given <code>IgniteClosure</code> at the execution time.</p> |
| </div> |
| <code-tabs><code-tab data-tab='Java'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="java"><span class="nc">IgniteCompute</span> <span class="n">compute</span> <span class="o">=</span> <span class="n">ignite</span><span class="o">.</span><span class="na">compute</span><span class="o">();</span> |
| |
| <span class="c1">// Execute closure on all cluster nodes.</span> |
| <span class="nc">Collection</span><span class="o"><</span><span class="nc">Integer</span><span class="o">></span> <span class="n">res</span> <span class="o">=</span> <span class="n">compute</span><span class="o">.</span><span class="na">apply</span><span class="o">(</span><span class="nl">String:</span><span class="o">:</span><span class="n">length</span><span class="o">,</span> <span class="nc">Arrays</span><span class="o">.</span><span class="na">asList</span><span class="o">(</span><span class="s">"How many characters"</span><span class="o">.</span><span class="na">split</span><span class="o">(</span><span class="s">" "</span><span class="o">)));</span> |
| |
| <span class="c1">// Add all the word lengths received from cluster nodes.</span> |
| <span class="kt">int</span> <span class="n">total</span> <span class="o">=</span> <span class="n">res</span><span class="o">.</span><span class="na">stream</span><span class="o">().</span><span class="na">mapToInt</span><span class="o">(</span><span class="nl">Integer:</span><span class="o">:</span><span class="n">intValue</span><span class="o">).</span><span class="na">sum</span><span class="o">();</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C#/.NET'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="csharp"><span class="k">class</span> <span class="nc">CharCountingFunc</span> <span class="p">:</span> <span class="n">IComputeFunc</span><span class="p"><</span><span class="kt">string</span><span class="p">,</span> <span class="kt">int</span><span class="p">></span> |
| <span class="p">{</span> |
| <span class="k">public</span> <span class="kt">int</span> <span class="nf">Invoke</span><span class="p">(</span><span class="kt">string</span> <span class="n">arg</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="n">arg</span><span class="p">.</span><span class="n">Length</span><span class="p">;</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| |
| <span class="k">public</span> <span class="k">static</span> <span class="k">void</span> <span class="nf">Foo</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="kt">var</span> <span class="n">ignite</span> <span class="p">=</span> <span class="n">Ignition</span><span class="p">.</span><span class="nf">Start</span><span class="p">(</span> |
| <span class="k">new</span> <span class="n">IgniteConfiguration</span> |
| <span class="p">{</span> |
| <span class="n">DiscoverySpi</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TcpDiscoverySpi</span> |
| <span class="p">{</span> |
| <span class="n">LocalPort</span> <span class="p">=</span> <span class="m">48500</span><span class="p">,</span> |
| <span class="n">LocalPortRange</span> <span class="p">=</span> <span class="m">20</span><span class="p">,</span> |
| <span class="n">IpFinder</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TcpDiscoveryStaticIpFinder</span> |
| <span class="p">{</span> |
| <span class="n">Endpoints</span> <span class="p">=</span> <span class="k">new</span><span class="p">[]</span> |
| <span class="p">{</span> |
| <span class="s">"127.0.0.1:48500..48520"</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| <span class="p">);</span> |
| |
| <span class="kt">var</span> <span class="n">res</span> <span class="p">=</span> <span class="n">ignite</span><span class="p">.</span><span class="nf">GetCompute</span><span class="p">().</span><span class="nf">Apply</span><span class="p">(</span><span class="k">new</span> <span class="nf">CharCountingFunc</span><span class="p">(),</span> <span class="s">"How many characters"</span><span class="p">.</span><span class="nf">Split</span><span class="p">());</span> |
| |
| <span class="kt">int</span> <span class="n">total</span> <span class="p">=</span> <span class="n">res</span><span class="p">.</span><span class="nf">Sum</span><span class="p">();</span> |
| <span class="p">}</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C++' data-unavailable='true'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code>This API is not presently available for C++.</code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| </div> |
| <div class="sect2"> |
| <h3 id="broadcasting-a-task">Broadcasting a Task</h3> |
| <div class="paragraph"> |
| <p>The <code>broadcast()</code> method executes a task on <em>all nodes</em> associated with the compute instance.</p> |
| </div> |
| <code-tabs><code-tab data-tab='Java'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="java"><span class="c1">// Limit broadcast to remote nodes only.</span> |
| <span class="nc">IgniteCompute</span> <span class="n">compute</span> <span class="o">=</span> <span class="n">ignite</span><span class="o">.</span><span class="na">compute</span><span class="o">(</span><span class="n">ignite</span><span class="o">.</span><span class="na">cluster</span><span class="o">().</span><span class="na">forRemotes</span><span class="o">());</span> |
| |
| <span class="c1">// Print out hello message on remote nodes in the cluster group.</span> |
| <span class="n">compute</span><span class="o">.</span><span class="na">broadcast</span><span class="o">(()</span> <span class="o">-></span> <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Hello Node: "</span> <span class="o">+</span> <span class="n">ignite</span><span class="o">.</span><span class="na">cluster</span><span class="o">().</span><span class="na">localNode</span><span class="o">().</span><span class="na">id</span><span class="o">()));</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C#/.NET'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="csharp"><span class="k">class</span> <span class="nc">PrintNodeIdAction</span> <span class="p">:</span> <span class="n">IComputeAction</span> |
| <span class="p">{</span> |
| <span class="k">public</span> <span class="k">void</span> <span class="nf">Invoke</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="n">Console</span><span class="p">.</span><span class="nf">WriteLine</span><span class="p">(</span><span class="s">"Hello node: "</span> <span class="p">+</span> |
| <span class="n">Ignition</span><span class="p">.</span><span class="nf">GetIgnite</span><span class="p">().</span><span class="nf">GetCluster</span><span class="p">().</span><span class="nf">GetLocalNode</span><span class="p">().</span><span class="n">Id</span><span class="p">);</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| |
| <span class="k">public</span> <span class="k">static</span> <span class="k">void</span> <span class="nf">BroadcastDemo</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="kt">var</span> <span class="n">ignite</span> <span class="p">=</span> <span class="n">Ignition</span><span class="p">.</span><span class="nf">Start</span><span class="p">(</span> |
| <span class="k">new</span> <span class="n">IgniteConfiguration</span> |
| <span class="p">{</span> |
| <span class="n">DiscoverySpi</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TcpDiscoverySpi</span> |
| <span class="p">{</span> |
| <span class="n">LocalPort</span> <span class="p">=</span> <span class="m">48500</span><span class="p">,</span> |
| <span class="n">LocalPortRange</span> <span class="p">=</span> <span class="m">20</span><span class="p">,</span> |
| <span class="n">IpFinder</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TcpDiscoveryStaticIpFinder</span> |
| <span class="p">{</span> |
| <span class="n">Endpoints</span> <span class="p">=</span> <span class="k">new</span><span class="p">[]</span> |
| <span class="p">{</span> |
| <span class="s">"127.0.0.1:48500..48520"</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| <span class="p">);</span> |
| |
| <span class="c1">// Limit broadcast to remote nodes only.</span> |
| <span class="kt">var</span> <span class="n">compute</span> <span class="p">=</span> <span class="n">ignite</span><span class="p">.</span><span class="nf">GetCluster</span><span class="p">().</span><span class="nf">ForRemotes</span><span class="p">().</span><span class="nf">GetCompute</span><span class="p">();</span> |
| <span class="c1">// Print out hello message on remote nodes in the cluster group.</span> |
| <span class="n">compute</span><span class="p">.</span><span class="nf">Broadcast</span><span class="p">(</span><span class="k">new</span> <span class="nf">PrintNodeIdAction</span><span class="p">());</span> |
| <span class="p">}</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C++'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="cpp"><span class="cm">/* |
| * Function class. |
| */</span> |
| <span class="k">class</span> <span class="nc">Hello</span> <span class="o">:</span> <span class="k">public</span> <span class="n">compute</span><span class="o">::</span><span class="n">ComputeFunc</span><span class="o"><</span><span class="kt">void</span><span class="o">></span> |
| <span class="p">{</span> |
| <span class="k">friend</span> <span class="k">struct</span> <span class="nc">ignite</span><span class="o">::</span><span class="n">binary</span><span class="o">::</span><span class="n">BinaryType</span><span class="o"><</span><span class="n">Hello</span><span class="o">></span><span class="p">;</span> |
| <span class="nl">public:</span> |
| <span class="cm">/* |
| * Default constructor. |
| */</span> |
| <span class="n">Hello</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="c1">// No-op.</span> |
| <span class="p">}</span> |
| |
| <span class="cm">/** |
| * Callback. |
| */</span> |
| <span class="k">virtual</span> <span class="kt">void</span> <span class="n">Call</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Hello"</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="p">};</span> |
| |
| <span class="cm">/** |
| * Binary type structure. Defines a set of functions required for type to be serialized and deserialized. |
| */</span> |
| <span class="k">namespace</span> <span class="n">ignite</span> |
| <span class="p">{</span> |
| <span class="k">namespace</span> <span class="n">binary</span> |
| <span class="p">{</span> |
| <span class="k">template</span><span class="o"><</span><span class="p">></span> |
| <span class="k">struct</span> <span class="nc">BinaryType</span><span class="o"><</span><span class="n">Hello</span><span class="o">></span> |
| <span class="p">{</span> |
| <span class="k">static</span> <span class="kt">int32_t</span> <span class="n">GetTypeId</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="n">GetBinaryStringHashCode</span><span class="p">(</span><span class="s">"Hello"</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="n">GetTypeName</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">dst</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="n">dst</span> <span class="o">=</span> <span class="s">"Hello"</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">int32_t</span> <span class="n">GetFieldId</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">name</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="n">GetBinaryStringHashCode</span><span class="p">(</span><span class="n">name</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">int32_t</span> <span class="n">GetHashCode</span><span class="p">(</span><span class="k">const</span> <span class="n">Hello</span><span class="o">&</span> <span class="n">obj</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">bool</span> <span class="n">IsNull</span><span class="p">(</span><span class="k">const</span> <span class="n">Hello</span><span class="o">&</span> <span class="n">obj</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="nb">false</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="n">GetNull</span><span class="p">(</span><span class="n">Hello</span><span class="o">&</span> <span class="n">dst</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="n">dst</span> <span class="o">=</span> <span class="n">Hello</span><span class="p">();</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="n">Write</span><span class="p">(</span><span class="n">BinaryWriter</span><span class="o">&</span> <span class="n">writer</span><span class="p">,</span> <span class="k">const</span> <span class="n">Hello</span><span class="o">&</span> <span class="n">obj</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="c1">// No-op.</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="n">Read</span><span class="p">(</span><span class="n">BinaryReader</span><span class="o">&</span> <span class="n">reader</span><span class="p">,</span> <span class="n">Hello</span><span class="o">&</span> <span class="n">dst</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="c1">// No-op.</span> |
| <span class="p">}</span> |
| <span class="p">};</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| |
| <span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="n">IgniteConfiguration</span> <span class="n">cfg</span><span class="p">;</span> |
| <span class="n">cfg</span><span class="p">.</span><span class="n">springCfgPath</span> <span class="o">=</span> <span class="s">"/path/to/configuration.xml"</span><span class="p">;</span> |
| |
| <span class="n">Ignite</span> <span class="n">ignite</span> <span class="o">=</span> <span class="n">Ignition</span><span class="o">::</span><span class="n">Start</span><span class="p">(</span><span class="n">cfg</span><span class="p">);</span> |
| |
| <span class="c1">// Get binding instance.</span> |
| <span class="n">IgniteBinding</span> <span class="n">binding</span> <span class="o">=</span> <span class="n">ignite</span><span class="p">.</span><span class="n">GetBinding</span><span class="p">();</span> |
| |
| <span class="c1">// Registering our class as a compute function.</span> |
| <span class="n">binding</span><span class="p">.</span><span class="n">RegisterComputeFunc</span><span class="o"><</span><span class="n">Hello</span><span class="o">></span><span class="p">();</span> |
| |
| <span class="c1">// Broadcast to all nodes.</span> |
| <span class="n">compute</span><span class="o">::</span><span class="n">Compute</span> <span class="n">compute</span> <span class="o">=</span> <span class="n">ignite</span><span class="p">.</span><span class="n">GetCompute</span><span class="p">();</span> |
| |
| <span class="c1">// Declaring function instance.</span> |
| <span class="n">Hello</span> <span class="n">hello</span><span class="p">;</span> |
| |
| <span class="c1">// Print out hello message on nodes in the cluster group.</span> |
| <span class="n">compute</span><span class="p">.</span><span class="n">Broadcast</span><span class="p">(</span><span class="n">hello</span><span class="p">);</span> |
| <span class="p">}</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| </div> |
| <div class="sect2"> |
| <h3 id="asynchronous-execution">Asynchronous Execution</h3> |
| <div class="paragraph"> |
| <p>All methods described in the previous sections have asynchronous counterparts:</p> |
| </div> |
| <div class="ulist"> |
| <ul> |
| <li> |
| <p><code>callAsync(…​)</code></p> |
| </li> |
| <li> |
| <p><code>runAsync(…​)</code></p> |
| </li> |
| <li> |
| <p><code>applyAsync(…​)</code></p> |
| </li> |
| <li> |
| <p><code>broadcastAsync(…​)</code></p> |
| </li> |
| </ul> |
| </div> |
| <div class="paragraph"> |
| <p>The asynchronous methods return an <code>IgniteFuture</code> that represents the result of the operation. In the following example, a collection of callable tasks is executed asynchronously.</p> |
| </div> |
| <code-tabs><code-tab data-tab='Java'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="java"><span class="nc">IgniteCompute</span> <span class="n">compute</span> <span class="o">=</span> <span class="n">ignite</span><span class="o">.</span><span class="na">compute</span><span class="o">();</span> |
| |
| <span class="nc">Collection</span><span class="o"><</span><span class="nc">IgniteCallable</span><span class="o"><</span><span class="nc">Integer</span><span class="o">>></span> <span class="n">calls</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">ArrayList</span><span class="o"><>();</span> |
| |
| <span class="c1">// Iterate through all words in the sentence and create callable jobs.</span> |
| <span class="k">for</span> <span class="o">(</span><span class="nc">String</span> <span class="n">word</span> <span class="o">:</span> <span class="s">"Count characters using a callable"</span><span class="o">.</span><span class="na">split</span><span class="o">(</span><span class="s">" "</span><span class="o">))</span> |
| <span class="n">calls</span><span class="o">.</span><span class="na">add</span><span class="o">(</span><span class="nl">word:</span><span class="o">:</span><span class="n">length</span><span class="o">);</span> |
| |
| <span class="nc">IgniteFuture</span><span class="o"><</span><span class="nc">Collection</span><span class="o"><</span><span class="nc">Integer</span><span class="o">>></span> <span class="n">future</span> <span class="o">=</span> <span class="n">compute</span><span class="o">.</span><span class="na">callAsync</span><span class="o">(</span><span class="n">calls</span><span class="o">);</span> |
| |
| <span class="n">future</span><span class="o">.</span><span class="na">listen</span><span class="o">(</span><span class="n">fut</span> <span class="o">-></span> <span class="o">{</span> |
| <span class="c1">// Total number of characters.</span> |
| <span class="kt">int</span> <span class="n">total</span> <span class="o">=</span> <span class="n">fut</span><span class="o">.</span><span class="na">get</span><span class="o">().</span><span class="na">stream</span><span class="o">().</span><span class="na">mapToInt</span><span class="o">(</span><span class="nl">Integer:</span><span class="o">:</span><span class="n">intValue</span><span class="o">).</span><span class="na">sum</span><span class="o">();</span> |
| |
| <span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Total number of characters: "</span> <span class="o">+</span> <span class="n">total</span><span class="o">);</span> |
| <span class="o">});</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C#/.NET'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="csharp"><span class="k">class</span> <span class="nc">CharCounter</span> <span class="p">:</span> <span class="n">IComputeFunc</span><span class="p"><</span><span class="kt">int</span><span class="p">></span> |
| <span class="p">{</span> |
| <span class="k">private</span> <span class="k">readonly</span> <span class="kt">string</span> <span class="n">arg</span><span class="p">;</span> |
| |
| <span class="k">public</span> <span class="nf">CharCounter</span><span class="p">(</span><span class="kt">string</span> <span class="n">arg</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="k">this</span><span class="p">.</span><span class="n">arg</span> <span class="p">=</span> <span class="n">arg</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">public</span> <span class="kt">int</span> <span class="nf">Invoke</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="n">arg</span><span class="p">.</span><span class="n">Length</span><span class="p">;</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| <span class="k">public</span> <span class="k">static</span> <span class="k">void</span> <span class="nf">AsyncDemo</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="kt">var</span> <span class="n">ignite</span> <span class="p">=</span> <span class="n">Ignition</span><span class="p">.</span><span class="nf">Start</span><span class="p">(</span> |
| <span class="k">new</span> <span class="n">IgniteConfiguration</span> |
| <span class="p">{</span> |
| <span class="n">DiscoverySpi</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TcpDiscoverySpi</span> |
| <span class="p">{</span> |
| <span class="n">LocalPort</span> <span class="p">=</span> <span class="m">48500</span><span class="p">,</span> |
| <span class="n">LocalPortRange</span> <span class="p">=</span> <span class="m">20</span><span class="p">,</span> |
| <span class="n">IpFinder</span> <span class="p">=</span> <span class="k">new</span> <span class="n">TcpDiscoveryStaticIpFinder</span> |
| <span class="p">{</span> |
| <span class="n">Endpoints</span> <span class="p">=</span> <span class="k">new</span><span class="p">[]</span> |
| <span class="p">{</span> |
| <span class="s">"127.0.0.1:48500..48520"</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| <span class="p">);</span> |
| |
| <span class="kt">var</span> <span class="n">calls</span> <span class="p">=</span> <span class="s">"Count character using async compute"</span> |
| <span class="p">.</span><span class="nf">Split</span><span class="p">(</span><span class="s">" "</span><span class="p">).</span><span class="nf">Select</span><span class="p">(</span><span class="n">s</span> <span class="p">=></span> <span class="k">new</span> <span class="nf">CharCounter</span><span class="p">(</span><span class="n">s</span><span class="p">)).</span><span class="nf">ToList</span><span class="p">();</span> |
| |
| <span class="kt">var</span> <span class="n">future</span> <span class="p">=</span> <span class="n">ignite</span><span class="p">.</span><span class="nf">GetCompute</span><span class="p">().</span><span class="nf">CallAsync</span><span class="p">(</span><span class="n">calls</span><span class="p">);</span> |
| |
| <span class="n">future</span><span class="p">.</span><span class="nf">ContinueWith</span><span class="p">(</span><span class="n">fut</span> <span class="p">=></span> |
| <span class="p">{</span> |
| <span class="kt">var</span> <span class="n">total</span> <span class="p">=</span> <span class="n">fut</span><span class="p">.</span><span class="n">Result</span><span class="p">.</span><span class="nf">Sum</span><span class="p">();</span> |
| <span class="n">Console</span><span class="p">.</span><span class="nf">WriteLine</span><span class="p">(</span><span class="s">"Total number of characters: "</span> <span class="p">+</span> <span class="n">total</span><span class="p">);</span> |
| <span class="p">});</span> |
| <span class="p">}</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C++'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="cpp"><span class="cm">/* |
| * Function class. |
| */</span> |
| <span class="k">class</span> <span class="nc">CountLength</span> <span class="o">:</span> <span class="k">public</span> <span class="n">compute</span><span class="o">::</span><span class="n">ComputeFunc</span><span class="o"><</span><span class="kt">int32_t</span><span class="o">></span> |
| <span class="p">{</span> |
| <span class="k">friend</span> <span class="k">struct</span> <span class="nc">ignite</span><span class="o">::</span><span class="n">binary</span><span class="o">::</span><span class="n">BinaryType</span><span class="o"><</span><span class="n">CountLength</span><span class="o">></span><span class="p">;</span> |
| <span class="nl">public:</span> |
| <span class="cm">/* |
| * Default constructor. |
| */</span> |
| <span class="n">CountLength</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="c1">// No-op.</span> |
| <span class="p">}</span> |
| |
| <span class="cm">/* |
| * Constructor. |
| * |
| * @param text Text. |
| */</span> |
| <span class="n">CountLength</span><span class="p">(</span><span class="k">const</span> <span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">word</span><span class="p">)</span> <span class="o">:</span> |
| <span class="n">word</span><span class="p">(</span><span class="n">word</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="c1">// No-op.</span> |
| <span class="p">}</span> |
| |
| <span class="cm">/** |
| * Callback. |
| * Counts number of characters in provided word. |
| * |
| * @return Word's length. |
| */</span> |
| <span class="k">virtual</span> <span class="kt">int32_t</span> <span class="n">Call</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="n">word</span><span class="p">.</span><span class="n">length</span><span class="p">();</span> |
| <span class="p">}</span> |
| |
| <span class="cm">/** Word to print. */</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">word</span><span class="p">;</span> |
| |
| <span class="p">};</span> |
| |
| <span class="cm">/** |
| * Binary type structure. Defines a set of functions required for type to be serialized and deserialized. |
| */</span> |
| <span class="k">namespace</span> <span class="n">ignite</span> |
| <span class="p">{</span> |
| <span class="k">namespace</span> <span class="n">binary</span> |
| <span class="p">{</span> |
| <span class="k">template</span><span class="o"><</span><span class="p">></span> |
| <span class="k">struct</span> <span class="nc">BinaryType</span><span class="o"><</span><span class="n">CountLength</span><span class="o">></span> |
| <span class="p">{</span> |
| <span class="k">static</span> <span class="kt">int32_t</span> <span class="n">GetTypeId</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="n">GetBinaryStringHashCode</span><span class="p">(</span><span class="s">"CountLength"</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="n">GetTypeName</span><span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">&</span> <span class="n">dst</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="n">dst</span> <span class="o">=</span> <span class="s">"CountLength"</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">int32_t</span> <span class="n">GetFieldId</span><span class="p">(</span><span class="k">const</span> <span class="kt">char</span><span class="o">*</span> <span class="n">name</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="n">GetBinaryStringHashCode</span><span class="p">(</span><span class="n">name</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">int32_t</span> <span class="n">GetHashCode</span><span class="p">(</span><span class="k">const</span> <span class="n">CountLength</span><span class="o">&</span> <span class="n">obj</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="mi">0</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">bool</span> <span class="n">IsNull</span><span class="p">(</span><span class="k">const</span> <span class="n">CountLength</span><span class="o">&</span> <span class="n">obj</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="k">return</span> <span class="nb">false</span><span class="p">;</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="n">GetNull</span><span class="p">(</span><span class="n">CountLength</span><span class="o">&</span> <span class="n">dst</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="n">dst</span> <span class="o">=</span> <span class="n">CountLength</span><span class="p">(</span><span class="s">""</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="n">Write</span><span class="p">(</span><span class="n">BinaryWriter</span><span class="o">&</span> <span class="n">writer</span><span class="p">,</span> <span class="k">const</span> <span class="n">CountLength</span><span class="o">&</span> <span class="n">obj</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="n">writer</span><span class="p">.</span><span class="n">RawWriter</span><span class="p">().</span><span class="n">WriteString</span><span class="p">(</span><span class="n">obj</span><span class="p">.</span><span class="n">word</span><span class="p">);</span> |
| <span class="p">}</span> |
| |
| <span class="k">static</span> <span class="kt">void</span> <span class="n">Read</span><span class="p">(</span><span class="n">BinaryReader</span><span class="o">&</span> <span class="n">reader</span><span class="p">,</span> <span class="n">CountLength</span><span class="o">&</span> <span class="n">dst</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="n">dst</span><span class="p">.</span><span class="n">word</span> <span class="o">=</span> <span class="n">reader</span><span class="p">.</span><span class="n">RawReader</span><span class="p">().</span><span class="n">ReadString</span><span class="p">();</span> |
| <span class="p">}</span> |
| <span class="p">};</span> |
| <span class="p">}</span> |
| <span class="p">}</span> |
| |
| <span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="n">IgniteConfiguration</span> <span class="n">cfg</span><span class="p">;</span> |
| <span class="n">cfg</span><span class="p">.</span><span class="n">springCfgPath</span> <span class="o">=</span> <span class="s">"/path/to/configuration.xml"</span><span class="p">;</span> |
| |
| <span class="n">Ignite</span> <span class="n">ignite</span> <span class="o">=</span> <span class="n">Ignition</span><span class="o">::</span><span class="n">Start</span><span class="p">(</span><span class="n">cfg</span><span class="p">);</span> |
| |
| <span class="c1">// Get binding instance.</span> |
| <span class="n">IgniteBinding</span> <span class="n">binding</span> <span class="o">=</span> <span class="n">ignite</span><span class="p">.</span><span class="n">GetBinding</span><span class="p">();</span> |
| |
| <span class="c1">// Registering our class as a compute function.</span> |
| <span class="n">binding</span><span class="p">.</span><span class="n">RegisterComputeFunc</span><span class="o"><</span><span class="n">CountLength</span><span class="o">></span><span class="p">();</span> |
| |
| <span class="c1">// Get compute instance.</span> |
| <span class="n">compute</span><span class="o">::</span><span class="n">Compute</span> <span class="n">asyncCompute</span> <span class="o">=</span> <span class="n">ignite</span><span class="p">.</span><span class="n">GetCompute</span><span class="p">();</span> |
| |
| <span class="n">std</span><span class="o">::</span><span class="n">istringstream</span> <span class="n">iss</span><span class="p">(</span><span class="s">"Count characters using callable"</span><span class="p">);</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span> <span class="n">words</span><span class="p">((</span><span class="n">std</span><span class="o">::</span><span class="n">istream_iterator</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="p">(</span><span class="n">iss</span><span class="p">)),</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">istream_iterator</span><span class="o"><</span><span class="n">std</span><span class="o">::</span><span class="n">string</span><span class="o">></span><span class="p">());</span> |
| |
| <span class="n">std</span><span class="o">::</span><span class="n">vector</span><span class="o"><</span><span class="n">Future</span><span class="o"><</span><span class="kt">int32_t</span><span class="o">>></span> <span class="n">futures</span><span class="p">;</span> |
| |
| <span class="c1">// Iterate through all words in the sentence, create and call jobs.</span> |
| <span class="k">for</span> <span class="p">(</span><span class="n">std</span><span class="o">::</span><span class="n">string</span> <span class="n">word</span> <span class="o">:</span> <span class="n">words</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="c1">// Counting number of characters remotely.</span> |
| <span class="n">futures</span><span class="p">.</span><span class="n">push_back</span><span class="p">(</span><span class="n">asyncCompute</span><span class="p">.</span><span class="n">CallAsync</span><span class="o"><</span><span class="kt">int32_t</span><span class="o">></span><span class="p">(</span><span class="n">CountLength</span><span class="p">(</span><span class="n">word</span><span class="p">)));</span> |
| <span class="p">}</span> |
| |
| <span class="kt">int32_t</span> <span class="n">total</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> |
| |
| <span class="c1">// Counting total number of characters.</span> |
| <span class="k">for</span> <span class="p">(</span><span class="n">Future</span><span class="o"><</span><span class="kt">int32_t</span><span class="o">></span> <span class="n">future</span> <span class="o">:</span> <span class="n">futures</span><span class="p">)</span> |
| <span class="p">{</span> |
| <span class="c1">// Waiting for results.</span> |
| <span class="n">future</span><span class="p">.</span><span class="n">Wait</span><span class="p">();</span> |
| |
| <span class="n">total</span> <span class="o">+=</span> <span class="n">future</span><span class="p">.</span><span class="n">GetValue</span><span class="p">();</span> |
| <span class="p">}</span> |
| |
| <span class="c1">// Printing result.</span> |
| <span class="n">std</span><span class="o">::</span><span class="n">cout</span> <span class="o"><<</span> <span class="s">"Total number of characters: "</span> <span class="o"><<</span> <span class="n">total</span> <span class="o"><<</span> <span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span> |
| <span class="p">}</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| </div> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="task-execution-timeout">Task Execution Timeout</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>You can set a timeout for task execution. |
| If the task does not finish within the given time frame, it be stopped and all jobs produced by this task are cancelled.</p> |
| </div> |
| <div class="paragraph"> |
| <p>To execute a task with a timeout, use the <code>withTimeout(…​)</code> method of the compute interface. |
| The method returns a compute interface that executes the first task given to it in a time-limited manner. |
| Consequent tasks do not have a timeout: you need to call <code>withTimeout(…​)</code> for every task that should have a timeout.</p> |
| </div> |
| <code-tabs><code-tab data-tab='Java'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="java"><span class="nc">IgniteCompute</span> <span class="n">compute</span> <span class="o">=</span> <span class="n">ignite</span><span class="o">.</span><span class="na">compute</span><span class="o">();</span> |
| |
| <span class="n">compute</span><span class="o">.</span><span class="na">withTimeout</span><span class="o">(</span><span class="mi">300_000</span><span class="o">).</span><span class="na">run</span><span class="o">(()</span> <span class="o">-></span> <span class="o">{</span> |
| <span class="c1">// your computation</span> |
| <span class="c1">// ...</span> |
| <span class="o">});</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="sharing-state-between-jobs-on-local-node">Sharing State Between Jobs on Local Node</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>It is often useful to share a state between different compute jobs executed on one node. For this purpose, there is a shared concurrent local map available on each node.</p> |
| </div> |
| <code-tabs><code-tab data-tab='Java'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="java"><span class="nc">IgniteCluster</span> <span class="n">cluster</span> <span class="o">=</span> <span class="n">ignite</span><span class="o">.</span><span class="na">cluster</span><span class="o">();</span> |
| |
| <span class="nc">ConcurrentMap</span><span class="o"><</span><span class="nc">String</span><span class="o">,</span> <span class="nc">Integer</span><span class="o">></span> <span class="n">nodeLocalMap</span> <span class="o">=</span> <span class="n">cluster</span><span class="o">.</span><span class="na">nodeLocalMap</span><span class="o">();</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C#/.NET' data-unavailable='true'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code>This API is not presently available for C#/.NET.</code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C++' data-unavailable='true'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code>This API is not presently available for C++.</code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| <div class="paragraph"> |
| <p>Node-local values are similar to thread local variables in that these values are not distributed and kept only on the local node. |
| Node-local data can be used to share the state between compute jobs. |
| It can also be used by deployed services.</p> |
| </div> |
| <div class="paragraph"> |
| <p>In the following example, a job increments a node-local counter every time it executes on some node. As a result, the node-local counter on each node tells us how many times the job has executed on that node.</p> |
| </div> |
| <code-tabs><code-tab data-tab='Java'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="java"><span class="nc">IgniteCallable</span><span class="o"><</span><span class="nc">Long</span><span class="o">></span> <span class="n">job</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">IgniteCallable</span><span class="o"><</span><span class="nc">Long</span><span class="o">>()</span> <span class="o">{</span> |
| <span class="nd">@IgniteInstanceResource</span> |
| <span class="kd">private</span> <span class="nc">Ignite</span> <span class="n">ignite</span><span class="o">;</span> |
| |
| <span class="nd">@Override</span> |
| <span class="kd">public</span> <span class="nc">Long</span> <span class="nf">call</span><span class="o">()</span> <span class="o">{</span> |
| <span class="c1">// Get a reference to node local.</span> |
| <span class="nc">ConcurrentMap</span><span class="o"><</span><span class="nc">String</span><span class="o">,</span> <span class="nc">AtomicLong</span><span class="o">></span> <span class="n">nodeLocalMap</span> <span class="o">=</span> <span class="n">ignite</span><span class="o">.</span><span class="na">cluster</span><span class="o">().</span><span class="na">nodeLocalMap</span><span class="o">();</span> |
| |
| <span class="nc">AtomicLong</span> <span class="n">cntr</span> <span class="o">=</span> <span class="n">nodeLocalMap</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="s">"counter"</span><span class="o">);</span> |
| |
| <span class="k">if</span> <span class="o">(</span><span class="n">cntr</span> <span class="o">==</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span> |
| <span class="nc">AtomicLong</span> <span class="n">old</span> <span class="o">=</span> <span class="n">nodeLocalMap</span><span class="o">.</span><span class="na">putIfAbsent</span><span class="o">(</span><span class="s">"counter"</span><span class="o">,</span> <span class="n">cntr</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">AtomicLong</span><span class="o">());</span> |
| |
| <span class="k">if</span> <span class="o">(</span><span class="n">old</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> |
| <span class="n">cntr</span> <span class="o">=</span> <span class="n">old</span><span class="o">;</span> |
| <span class="o">}</span> |
| |
| <span class="k">return</span> <span class="n">cntr</span><span class="o">.</span><span class="na">incrementAndGet</span><span class="o">();</span> |
| <span class="o">}</span> |
| <span class="o">};</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C#/.NET' data-unavailable='true'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code>This API is not presently available for C#/.NET.</code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C++' data-unavailable='true'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code>This API is not presently available for C++.</code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| </div> |
| </div> |
| <div class="sect1"> |
| <h2 id="accessing-data-from-computational-tasks">Accessing Data from Computational Tasks</h2> |
| <div class="sectionbody"> |
| <div class="paragraph"> |
| <p>If your computational task needs to access the data stored in caches, you can do it via the instance of <code>Ignite</code>:</p> |
| </div> |
| <code-tabs><code-tab data-tab='Java'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="java"><span class="kd">public</span> <span class="kd">class</span> <span class="nc">MyCallableTask</span> <span class="kd">implements</span> <span class="nc">IgniteCallable</span><span class="o"><</span><span class="nc">Integer</span><span class="o">></span> <span class="o">{</span> |
| |
| <span class="nd">@IgniteInstanceResource</span> |
| <span class="kd">private</span> <span class="nc">Ignite</span> <span class="n">ignite</span><span class="o">;</span> |
| |
| <span class="nd">@Override</span> |
| <span class="kd">public</span> <span class="nc">Integer</span> <span class="nf">call</span><span class="o">()</span> <span class="kd">throws</span> <span class="nc">Exception</span> <span class="o">{</span> |
| |
| <span class="nc">IgniteCache</span><span class="o"><</span><span class="nc">Long</span><span class="o">,</span> <span class="nc">Person</span><span class="o">></span> <span class="n">cache</span> <span class="o">=</span> <span class="n">ignite</span><span class="o">.</span><span class="na">cache</span><span class="o">(</span><span class="s">"person"</span><span class="o">);</span> |
| |
| <span class="c1">// Get the data you need</span> |
| <span class="nc">Person</span> <span class="n">person</span> <span class="o">=</span> <span class="n">cache</span><span class="o">.</span><span class="na">get</span><span class="o">(</span><span class="mi">1L</span><span class="o">);</span> |
| |
| <span class="c1">// do with the data what you need to do</span> |
| |
| <span class="k">return</span> <span class="mi">1</span><span class="o">;</span> |
| <span class="o">}</span> |
| <span class="o">}</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C#/.NET'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="csharp"><span class="k">class</span> <span class="nc">FuncWithDataAccess</span> <span class="p">:</span> <span class="n">IComputeFunc</span><span class="p"><</span><span class="kt">int</span><span class="p">></span> |
| <span class="p">{</span> |
| <span class="p">[</span><span class="n">InstanceResource</span><span class="p">]</span> <span class="k">private</span> <span class="n">IIgnite</span> <span class="n">_ignite</span><span class="p">;</span> |
| |
| <span class="k">public</span> <span class="kt">int</span> <span class="nf">Invoke</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="kt">var</span> <span class="n">cache</span> <span class="p">=</span> <span class="n">_ignite</span><span class="p">.</span><span class="n">GetCache</span><span class="p"><</span><span class="kt">int</span><span class="p">,</span> <span class="kt">string</span><span class="p">>(</span><span class="s">"someCache"</span><span class="p">);</span> |
| |
| <span class="c1">// get the data you need</span> |
| <span class="kt">string</span> <span class="n">cached</span> <span class="p">=</span> <span class="n">cache</span><span class="p">.</span><span class="nf">Get</span><span class="p">(</span><span class="m">1</span><span class="p">);</span> |
| |
| <span class="c1">// do with data what you need to do, for example:</span> |
| <span class="n">Console</span><span class="p">.</span><span class="nf">WriteLine</span><span class="p">(</span><span class="n">cached</span><span class="p">);</span> |
| |
| <span class="k">return</span> <span class="m">1</span><span class="p">;</span> |
| <span class="p">}</span> |
| <span class="p">}</span></code></pre> |
| </div> |
| </div></code-tab><code-tab data-tab='C++'><div class="listingblock"> |
| <div class="content"> |
| <pre class="rouge highlight"><code data-lang="cpp"><span class="cm">/* |
| * Function class. |
| */</span> |
| <span class="k">class</span> <span class="nc">GetValue</span> <span class="o">:</span> <span class="k">public</span> <span class="n">compute</span><span class="o">::</span><span class="n">ComputeFunc</span><span class="o"><</span><span class="kt">void</span><span class="o">></span> |
| <span class="p">{</span> |
| <span class="k">friend</span> <span class="k">struct</span> <span class="nc">ignite</span><span class="o">::</span><span class="n">binary</span><span class="o">::</span><span class="n">BinaryType</span><span class="o"><</span><span class="n">GetValue</span><span class="o">></span><span class="p">;</span> |
| <span class="nl">public:</span> |
| <span class="cm">/* |
| * Default constructor. |
| */</span> |
| <span class="n">GetValue</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="c1">// No-op.</span> |
| <span class="p">}</span> |
| |
| <span class="cm">/** |
| * Callback. |
| */</span> |
| <span class="k">virtual</span> <span class="kt">void</span> <span class="n">Call</span><span class="p">()</span> |
| <span class="p">{</span> |
| <span class="n">Ignite</span><span class="o">&</span> <span class="n">node</span> <span class="o">=</span> <span class="n">GetIgnite</span><span class="p">();</span> |
| |
| <span class="c1">// Get the data you need</span> |
| <span class="n">Cache</span><span class="o"><</span><span class="kt">int64_t</span><span class="p">,</span> <span class="n">Person</span><span class="o">></span> <span class="n">cache</span> <span class="o">=</span> <span class="n">node</span><span class="p">.</span><span class="n">GetCache</span><span class="o"><</span><span class="kt">int64_t</span><span class="p">,</span> <span class="n">Person</span><span class="o">></span><span class="p">(</span><span class="s">"person"</span><span class="p">);</span> |
| |
| <span class="c1">// do with the data what you need to do</span> |
| <span class="n">Person</span> <span class="n">person</span> <span class="o">=</span> <span class="n">cache</span><span class="p">.</span><span class="n">Get</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span> |
| <span class="p">}</span> |
| <span class="p">};</span></code></pre> |
| </div> |
| </div></code-tab></code-tabs> |
| <div class="paragraph"> |
| <p>Note that the example shown above may not be the most effective way. |
| The reason is that the person object that corresponds to key <code>1</code> may be located on a node that is different from the node where the task is executed. |
| In this case, the object is fetched via network. This can be avoided by <a href="/docs/latest/distributed-computing/collocated-computations">colocating the task with the data</a>.</p> |
| </div> |
| <div class="admonitionblock caution"> |
| <table> |
| <tr> |
| <td class="icon"> |
| <div class="title">Caution</div> |
| </td> |
| <td class="content"> |
| <div class="paragraph"> |
| <p>If you want to use the key and value objects inside <code>IgniteCallable</code> and <code>IgniteRunnable</code> tasks, make sure the key and value classes are deployed on all cluster nodes.</p> |
| </div> |
| </td> |
| </tr> |
| </table> |
| </div> |
| </div> |
| </div> |
| <div class="copyright"> |
| © 2022 The Apache Software Foundation.<br/> |
| Apache, Apache Ignite, the Apache feather and the Apache Ignite logo are either registered trademarks or trademarks of The Apache Software Foundation. |
| |
| </div> |
| |
| </article> |
| <nav class="right-nav" data-swiftype-index='false'> |
| <div class="toc-wrapper"> |
| <ul class="sectlevel1"> |
| <li><a href="#getting-the-compute-interface">Getting the Compute Interface</a></li> |
| <li><a href="#specifying-the-set-of-nodes-for-computations">Specifying the Set of Nodes for Computations</a></li> |
| <li><a href="#executing-tasks">Executing Tasks</a> |
| <ul class="sectlevel2"> |
| <li><a href="#executing-a-runnable-task">Executing a Runnable Task</a></li> |
| <li><a href="#executing-a-callable-task">Executing a Callable Task</a></li> |
| <li><a href="#executing-an-igniteclosure">Executing an IgniteClosure</a></li> |
| <li><a href="#broadcasting-a-task">Broadcasting a Task</a></li> |
| <li><a href="#asynchronous-execution">Asynchronous Execution</a></li> |
| </ul> |
| </li> |
| <li><a href="#task-execution-timeout">Task Execution Timeout</a></li> |
| <li><a href="#sharing-state-between-jobs-on-local-node">Sharing State Between Jobs on Local Node</a></li> |
| <li><a href="#accessing-data-from-computational-tasks">Accessing Data from Computational Tasks</a></li> |
| </ul> |
| </div> |
| |
| |
| <nav class="promo-nav"> |
| <!--#include virtual="/includes/docs_rightnav_promotion.html" --> |
| <a href="#" data-trigger-bugyard-feedback="true" id="doc-feedback-btn">Docs Feedback</a> |
| </nav> |
| |
| </nav> |
| |
| </section> |
| <script type='module' src='/assets/js/code-copy-to-clipboard.js' async crossorigin></script> |
| |
| <script> |
| // inits deep anchors -- needs to be done here because of https://www.bryanbraun.com/anchorjs/#dont-run-it-too-late |
| anchors.add('.page-docs h1, .page-docs h2, .page-docs h3:not(.discrete), .page-docs h4, .page-docs h5'); |
| anchors.options = { |
| placement: 'right', |
| visible: 'always' |
| }; |
| </script> |
| |
| <script src="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js"></script> |
| <script> |
| docsearch({ |
| // Your apiKey and indexName will be given to you once |
| // we create your config |
| apiKey: '3eee686c0ebe39eff3baeb18c56fa5f8', |
| indexName: 'apache_ignite', |
| // Replace inputSelector with a CSS selector |
| // matching your search input |
| inputSelector: '#search-input', |
| // algoliaOptions: { 'facetFilters': ["version:$VERSION"] }, |
| |
| // Set debug to true to inspect the dropdown |
| debug: false, |
| }); |
| </script> |
| <script type='module' src='/assets/js/index.js?1651232566' async crossorigin></script> |
| <script type='module' src='/assets/js/versioning.js?1651232566' async crossorigin></script> |
| |
| <link rel="stylesheet" href="/assets/css/styles.css?1651232566" media="print" onload="this.media='all'"> |
| <noscript><link media="all" rel="stylesheet" href="/assets/css/styles.css?1651232566"></noscript> |
| |
| <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css" media="print" onload="this.media='all'"> |
| <noscript><link media="all" rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css"></noscript> |
| |
| |
| </body> |
| |
| </html> |