<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="canonical" href="https://ignite.apache.org/releases/1.8.0/dotnetdoc/class_apache_1_1_ignite_1_1_core_1_1_cache_1_1_affinity_1_1_affinity_key_mapped_attribute.html" />
<META NAME="ROBOTS" CONTENT="NOINDEX">

<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.9.1"/>
<title>Apache Ignite.NET: Apache.Ignite.Core.Cache.Affinity.AffinityKeyMappedAttribute Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-61232409-1', 'auto');
  ga('send', 'pageview');

</script></head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="ignite_logo.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">Apache Ignite.NET
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.9.1 -->
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('class_apache_1_1_ignite_1_1_core_1_1_cache_1_1_affinity_1_1_affinity_key_mapped_attribute.html','');});
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">Apache.Ignite.Core.Cache.Affinity.AffinityKeyMappedAttribute Class Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>Specifies cache key field to be used to determine a node on which given cache key will be stored. Only one field or property can be marked with this attribute.  
 <a href="class_apache_1_1_ignite_1_1_core_1_1_cache_1_1_affinity_1_1_affinity_key_mapped_attribute.html#details">More...</a></p>
<div class="dynheader">
Inheritance diagram for Apache.Ignite.Core.Cache.Affinity.AffinityKeyMappedAttribute:</div>
<div class="dyncontent">
 <div class="center">
  <img src="class_apache_1_1_ignite_1_1_core_1_1_cache_1_1_affinity_1_1_affinity_key_mapped_attribute.png" usemap="#Apache.Ignite.Core.Cache.Affinity.AffinityKeyMappedAttribute_map" alt=""/>
  <map id="Apache.Ignite.Core.Cache.Affinity.AffinityKeyMappedAttribute_map" name="Apache.Ignite.Core.Cache.Affinity.AffinityKeyMappedAttribute_map">
</map>
 </div></div>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>This attribute is an alternative to <a class="el" href="class_apache_1_1_ignite_1_1_core_1_1_binary_1_1_binary_type_configuration.html#a4e2a3063412152645964c6eb90f39c5e" title="Affinity key field name. ">BinaryTypeConfiguration.AffinityKeyFieldName</a> setting. This attribute has lower priority than <a class="el" href="class_apache_1_1_ignite_1_1_core_1_1_binary_1_1_binary_type_configuration.html#a4e2a3063412152645964c6eb90f39c5e" title="Affinity key field name. ">BinaryTypeConfiguration.AffinityKeyFieldName</a> setting. </p>
<p>One of the major use cases for this attribute is the routing of grid computations to the nodes where the data for this computation is cached, the concept otherwise known as Colocation Of Computations And Data. </p>
<p>For example, if a Person object is always accessed together with a Company object for which this person is an employee, then for better performance and scalability it makes sense to colocate Person objects together with their Company object when storing them in cache. To achieve that, cache key used to cache Person objects should have a field or property marked with <a class="el" href="class_apache_1_1_ignite_1_1_core_1_1_cache_1_1_affinity_1_1_affinity_key_mapped_attribute.html" title="Specifies cache key field to be used to determine a node on which given cache key will be stored...">AffinityKeyMappedAttribute</a> attribute, which will provide the value of the company key for which that person works. </p>
</div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="namespace_apache.html">Apache</a></li><li class="navelem"><a class="el" href="namespace_apache_1_1_ignite.html">Ignite</a></li><li class="navelem"><a class="el" href="namespace_apache_1_1_ignite_1_1_core.html">Core</a></li><li class="navelem"><a class="el" href="namespace_apache_1_1_ignite_1_1_core_1_1_cache.html">Cache</a></li><li class="navelem"><a class="el" href="namespace_apache_1_1_ignite_1_1_core_1_1_cache_1_1_affinity.html">Affinity</a></li><li class="navelem"><a class="el" href="class_apache_1_1_ignite_1_1_core_1_1_cache_1_1_affinity_1_1_affinity_key_mapped_attribute.html">AffinityKeyMappedAttribute</a></li>
    <li class="footer">Generated on Mon Dec 5 2016 14:37:39 for Apache Ignite.NET by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.9.1 </li>
  </ul>
</div>
</body>
</html>
