缓存组|点燃文档

点燃2023年峰会-按需观看-立即注册!

编辑

缓存组

对于部署在集群中的每个缓存,总是存在开销:缓存被拆分为分区,必须在每个集群节点上跟踪分区的状态。

如果本机持久性则对于每个分区,磁盘上都有一个打开的文件,Ignite会主动写入和读取该文件。因此,您拥有的缓存和分区越多:

  • 分区映射占用的Java堆越多。每个缓存都有自己的分区映射。

  • 新节点加入集群所需的时间可能越长。

  • 如果节点离开集群,启动重新平衡可能需要的时间越长。

  • 打开的分区文件越多,检查点的性能可能越差。

通常,对于具有数十个或数百个缓存的部署,您不会发现任何这些问题。然而,当涉及到数千人时,影响是显而易见的。

为了避免这种影响,请考虑使用缓存组。单个缓存组中的缓存共享各种内部结构,如分区映射,从而提高拓扑事件处理并减少总体内存使用。请注意,从API的角度来看,缓存是否是组的一部分没有区别。

您可以通过设置组名称的属性缓存配置.以下是如何将缓存分配给特定组的示例:

<豆类 类=“org.apache.ignite.conformation.IgniteConfiguration”>
    <属性 姓名=“缓存配置”>
        <列表>
            <!-- Persons数据的分区缓存。-->
            <豆类 类=“org.apache.ignite.conformation.CacheConfiguration”>
                <属性 姓名=“名称” 价值=“个人”/>
                <属性 姓名=“备份” 价值="1"/>
                <!-- 缓存所属的组。-->
                <属性 姓名=“组名” 价值=“第1组”/>
            </bean>
            <!-- 组织数据的分区缓存。-->
            <豆类 类=“org.apache.ignite.conformation.CacheConfiguration”>
                <属性 姓名=“名称” 价值=“组织”/>
                <属性 姓名=“备份” 价值="1"/>
                <!-- 缓存所属的组。-->
                <属性 姓名=“组名” 价值=“组1”/>
            </bean>
        </list>
    </属性>
</bean>
//定义集群配置。
点火配置 cfg(立方英尺/加仑) = 新的 点火配置();

//定义Person缓存配置。
缓存配置<整数, > 人员配置 = 新的 缓存配置<整数, >(“个人”);

人员配置.设置备份(1);

//缓存所属的组。
人员配置.集合组名称(“组1”);

//定义组织缓存配置。
缓存配置 组织Cfg = 新的 缓存配置(“组织”);

组织Cfg.设置备份(1);

//缓存所属的组。
组织Cfg.集合组名称(“组1”);

cfg(立方英尺/加仑).setCacheConfiguration(设置缓存配置)(人员配置, 组织Cfg);

//正在启动节点。
点火.开始(cfg(立方英尺/加仑));
无功功率,无功功率 cfg(立方英尺/加仑) = 新的 点火配置
{
    缓存配置 = 新的[]
    {
        新的 缓存配置
        {
            姓名 = “个人”,
            备份 = 1,
            组名 = “第1组”
        },
        新的 缓存配置
        {
            姓名 = “组织”,
            备份 = 1,
            组名 = “组1”
        }
    }
};
点火.起点(cfg(立方英尺/加仑));
此API目前不适用于C++。您可以使用XML配置。

在上面的示例中组织缓存属于第1组.

注释

如何区分键值对?

如果将缓存分配给缓存组,则其数据存储在共享分区的内部结构中。放入缓存中的每个键都会使用该键所属缓存的唯一ID进行丰富。该ID派生自缓存名称。这将自动发生,并允许在相同的分区和B+树结构中存储不同缓存的数据。

分组缓存的原因很简单——如果您决定将1000个缓存分组,那么存储分区数据、分区映射和打开的分区文件的结构将减少1000倍。

注释

是否应该一直使用缓存组?

缓存组具有所有优点,它们可能会影响读取操作和索引查找的性能。这是因为所有数据和索引都混合在共享数据结构(分区映射、B+树)中,并且在这些结构上进行查询需要更多的时间。

因此,如果您有一个由数十个和数百个节点和缓存组成的集群,并且您发现内部结构增加了Java堆的使用,检查点性能下降,节点与集群的连接速度变慢,那么可以考虑使用缓存组。