Apache Ignite中的B + Tree和Index页面

时间:2017-07-26 21:24:17

标签: ignite

我试图了解Apache Ignite的B + Tree和Index Pages的目的,如下所述:https://apacheignite.readme.io/docs/page-memory

我有几个问题:

  1. 索引页包含什么?落入索引页面的键的哈希码值的有序列表,"其他"用于定位和索引数据页以存储/获取键值对的信息?
  2. 由于哈希码正在索引页面中使用,如果发生冲突会发生什么?
  3. 对于"典型的"应用程序,我们是否期望数据页面的数量远远高于索引页面的数量? (因为数据页包含键值对)
  4. 我们使用ignite.getOrCreateCache(name)创建的分布式缓存与内存区域之间存在什么类型的关系? 1比1,多对多,多对多,多对多?
  5. 请考虑以下伪代码:
  6. Ignite ignite = Ignition.start("two_server_node_config"); IgniteCache<Integer,String> cache = ignite.getOrCreateCache("my_cache"); cache.put(7, "abcd");

    1. Ignite如何确定将密钥放入的节点?
    2. 确定放置密钥的节点后,Ignite如何找到密钥所属的特定内存区域?
    3. 由于

2 个答案:

答案 0 :(得分:2)

  1. 索引页面包含有序的哈希值列表以及存储在持久内存中的键值对的链接。链接=页面ID +页面内的偏移量
  2. 具有冲突哈希的对象的所有链接都将出现在索引页面中。要执行查找,Ignite将取消引用链接并比较密钥。
  3. 这取决于对象大小。您可以粗略估计“典型”应用程序中数据页与索引页的比例为90到10.但是,如果添加额外索引,索引页的份额将会增加:https://apacheignite.readme.io/v2.1/docs/indexes#section-registering-indexed-types
  4. 您可能还会发现最新版本的文档很有用:https://apacheignite.readme.io/v2.1/docs/memory-architecture

答案 1 :(得分:1)

回答最后两个问题:

  1. 多对一1。相同的内存区域可用于多个缓存。
  2. 这是基于亲和力。基本上,缓存键被映射到关联键(默认情况下它们是相同的),然后调用affinity函数来确定分区和节点。有关亲和力的更多详细信息,请访问:https://apacheignite.readme.io/docs/affinity-collocation