我正在尝试理解Apache Ignite的B树和索引页面的用途,如下所述:https://apacheignite.readme.io/docs/page-memory
我有几个问题:
-
索引页包含什么?落入索引页面的键的哈希码值的有序列表,以及用于定位和索引数据页以存储/获取键值对的"other"信息?
-
由于在索引页面中使用了哈希码,如果发生冲突会发生什么?
-
对于"typical"应用程序,我们是否期望数据页面的数量远远高于索引页面的数量? (因为数据页包含键值对)
-
我们使用ignite.getOrCreateCache(name)创建的分布式缓存与内存区域之间存在什么类型的关系? 1比1,多对多,多对多,多对多?
-
考虑以下伪代码:
Ignite ignite = Ignition.start("two_server_node_config"); IgniteCache<Integer,String> cache = ignite.getOrCreateCache("my_cache"); cache.put(7, "abcd");
-
Ignite如何确定将密钥放入的节点?
-
确定放置密钥的节点后,Ignite如何找到密钥所属的特定内存区域?
谢谢
2 回答
回答最后两个问题:
多对一 . 相同的内存区域可用于多个缓存 .
这是基于亲和力的 . 基本上,缓存键被映射到关联键(默认情况下它们是相同的),然后调用affinity函数来确定分区和节点 . 关于亲和力的更多细节:https://apacheignite.readme.io/docs/affinity-collocation
索引页面包含有序的哈希值列表以及存储在持久内存中的键值对的链接 . 链接=页面内的页面ID偏移量
具有冲突哈希的对象的所有链接将出现在索引页面中 . 要执行查找,Ignite将取消引用链接并比较密钥 .
这取决于对象大小 . 您可以粗略估计"typical"应用程序中数据页与索引页的比率为90到10.但是,如果添加额外索引,索引页的份额将会增长:https://apacheignite.readme.io/v2.1/docs/indexes#section-registering-indexed-types
您可能还会发现最新版本的文档很有用:https://apacheignite.readme.io/v2.1/docs/memory-architecture