我正在尝试了解 Apache Ignite 的 B+ 树和索引页的用途,如下所述:https://apacheignite.readme.io/docs/page-memory
我有几个问题:
- 索引页到底包含什么?落入索引页的键的哈希码值的有序列表以及将用于定位和索引到数据页以存储/获取键值对的“其他”信息?
- 由于索引页中使用了哈希码,如果发生冲突会发生什么?
- 对于“典型”应用程序,我们是否期望数据页的数量远高于索引页的数量? (因为数据页包含键值对)
- 我们使用 ignite.getOrCreateCache(name) 创建的分布式缓存和内存区域之间存在什么类型的关系?一对一、多对一、一对多还是多对多?
- 考虑以下伪代码:
Ignite ignite = Ignition.start("two_server_node_config");
IgniteCache<Integer,String> cache = ignite.getOrCreateCache("my_cache");
cache.put(7, "abcd");
- Ignite 如何确定将 key 放入的节点?
- 一旦确定了放置key的节点,Ignite如何定位key所属的具体内存区域?
谢谢
最佳答案
- 索引页包含哈希值的有序列表以及存储在持久内存中的键值对的链接。链接=页面ID+页面内偏移量
- 所有指向具有冲突哈希值的对象的链接都将出现在索引页面中。为了执行查找,Ignite 将取消引用链接并比较键。
- 这取决于对象大小。您可以粗略估计“典型”应用程序中数据页与索引页的比率为 90 比 10。但是,如果添加额外的索引,索引页的份额将会增加: https://apacheignite.readme.io/v2.1/docs/indexes#section-registering-indexed-types
您可能还会发现最新版本的文档很有用:https://apacheignite.readme.io/v2.1/docs/memory-architecture
关于ignite - Apache Ignite 中的 B+ 树和索引页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45337691/