Apache Ignite 中的 B+ 树和索引页

B+ Tree and Index Page in Apache Ignite

我正在尝试了解 Apache Ignite 的 B+ 树和索引页的用途,如下所述:https://apacheignite.readme.io/docs/page-memory

我有几个问题:

  1. 索引页具体包含什么?落入索引页的键的哈希码值的有序列表和 "other" 将用于定位和索引到数据页到 store/get 键值对的信息?
  2. 由于索引页中使用了哈希码,如果发生冲突会怎样?
  3. 对于 "typical" 应用程序,我们是否期望数据页的数量远高于索引页的数量? (因为数据页包含键值对)
  4. 我们使用 ignite.getOrCreateCache(name) 创建的分布式缓存与内存区域之间存在什么类型的关系?一对一、多对一、一对多还是多对多?
  5. 考虑以下伪代码:

Ignite ignite = Ignition.start("two_server_node_config"); IgniteCache<Integer,String> cache = ignite.getOrCreateCache("my_cache"); cache.put(7, "abcd");

  1. Ignite 如何确定将密钥放入的节点?[​​=29=]
  2. 确定了放置key的节点后,Ignite如何定位key所属的具体内存区域?

谢谢

  1. 索引页包含哈希值的有序列表以及指向存储在持久内存中的键值对的链接。 Link = 页面 ID + 页面内偏移量
  2. 所有指向具有冲突哈希的对象的链接都将出现在索引页面中。为了执行查找,Ignite 将取消引用链接并比较键。
  3. 这取决于对象大小。您可以粗略估计 "typical" 应用程序中数据页与索引页的比例为 90 比 10。但是,如果添加额外的索引,索引页的份额将会增加:https://apacheignite.readme.io/v2.1/docs/indexes#section-registering-indexed-types

您可能还会发现有用的最新版本文档:https://apacheignite.readme.io/v2.1/docs/memory-architecture

回答最后两个问题:

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