Ignite的partition默认是0到1023。这个分区是针对cache级别的,并不是系统级别的参数。如果开启了持久化功能,那么数据会持久化到磁盘的work/db/{nodeid}中。如果数据量比较大,就会导致文件句柄过多。(例如1个cache,最多会持有1024个文件句柄)
我这里是通过SQL创建cache,通过查阅官网,可以预设一个自定义的cache template,在模板中自定义AffinityFunction(关联函数),设置自定义partitions参数,在CREATE TABLE的时候使用WITH TEMPLATE=<模板名>的方式引用新模板即可。
修改如下:
...
CREATE TABLE ABC(
id BIGINT PRIMARY KEY,
aa VARCHAr(1024) NOT NULL,
vv VARCHAr(1024) NOT NULL,
description VARCHAr(1024)
) WITH "TEMPLATE=PARTITION_512,ATOMICITY=TRANSACTIONAL_SNAPSHOT";
检查work/db/{nodeid}中的part-{i}.bin的文件名,最大id是配置partition-1。
再查看ll /proc/{进程id}/fd下的句柄,句柄数减少。
功能验证也没什么问题。
参考:
数据建模 | Apache Ignite - 分布式内存数据库
SQL参考 | Apache Ignite - 分布式内存数据库
配置缓存 | Apache Ignite - 分布式内存数据库
Affinity Collocation



