You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Apache Ignite缓存复用MongoDB持久化存储连接?

Apache Ignite MongoDB存储连接复用配置方案

默认情况下,Ignite的MongoDbStore确实会因缓存实例或操作创建多个连接,但可以通过配置MongoDB Java驱动的连接池来实现连接复用,无需为每个缓存新建独立连接。

核心思路

Ignite的MongoDB存储底层依赖官方MongoDB Java驱动,而该驱动本身自带连接池机制。只需为所有缓存的MongoDbStore配置共享的连接池参数,就能让多个缓存复用同一连接池内的连接。

具体配置步骤

  1. 自定义MongoDB连接池参数
    通过MongoClientOptions设置连接池的核心参数,比如最大连接数、最小空闲连接数、超时时间等,确保连接池能高效复用连接。

  2. 共享连接池配置到所有缓存
    确保所有使用MongoDB存储的缓存都引用同一个MongoClientOptions配置(或共享同一个MongoClient实例),避免每个缓存单独初始化新的连接池。

代码示例(Java)

// 配置MongoDB连接池参数
MongoClientOptions clientOptions = MongoClientOptions.builder()
    .connectionsPerHost(15) // 单主机最大连接数
    .minConnectionsPerHost(3) // 最小空闲连接数
    .connectTimeout(5000) // 连接超时时间
    .socketTimeout(30000) // 套接字超时时间
    .build();

// 初始化MongoDbStore工厂,绑定连接池配置
MongoDbStoreFactory<String, Object> mongoStoreFactory = new MongoDbStoreFactory<>();
mongoStoreFactory.setConnectionString("mongodb://localhost:27017");
mongoStoreFactory.setDatabase("ignite_persistence");
mongoStoreFactory.setCollection("cache_data");
mongoStoreFactory.setMongoClientOptions(clientOptions);

// 将存储工厂绑定到缓存配置
CacheConfiguration<String, Object> cacheCfg = new CacheConfiguration<>("sharedCache");
cacheCfg.setCacheStoreFactory(FactoryBuilder.factoryOf(mongoStoreFactory));
cacheCfg.setReadThrough(true);
cacheCfg.setWriteThrough(true);

// 启动Ignite并加载缓存
Ignite ignite = Ignition.start();
ignite.getOrCreateCache(cacheCfg);

XML配置示例

<bean id="mongoClientOptions" class="com.mongodb.MongoClientOptions" factory-method="builder">
    <property name="connectionsPerHost" value="15"/>
    <property name="minConnectionsPerHost" value="3"/>
    <property name="connectTimeout" value="5000"/>
    <property name="socketTimeout" value="30000"/>
</bean>

<bean id="mongoStoreFactory" class="org.apache.ignite.cache.store.mongodb.MongoDbStoreFactory">
    <property name="connectionString" value="mongodb://localhost:27017"/>
    <property name="database" value="ignite_persistence"/>
    <property name="collection" value="cache_data"/>
    <property name="mongoClientOptions" ref="mongoClientOptions"/>
</bean>

<bean id="cacheCfg" class="org.apache.ignite.configuration.CacheConfiguration">
    <property name="name" value="sharedCache"/>
    <property name="cacheStoreFactory">
        <bean class="org.apache.ignite.configuration.FactoryBuilder" factory-method="factoryOf">
            <constructor-arg ref="mongoStoreFactory"/>
        </bean>
    </property>
    <property name="readThrough" value="true"/>
    <property name="writeThrough" value="true"/>
</bean>

注意事项

  • 避免为每个缓存单独创建MongoClient或MongoClientOptions实例,否则会生成多个独立连接池,无法实现连接复用。
  • 建议使用Ignite 2.10及以上版本,确保与MongoDB驱动(3.12+)的连接池功能兼容。
  • 根据业务并发量调整connectionsPerHost参数,避免连接池过载或资源浪费。

内容的提问来源于stack exchange,提问作者ApachieIgniteNewbie123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:30:20