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

使用AffinityKey向Apache Ignite缓存添加数据失败求助

问题根源与解决方案

问题原因

.NET瘦客户端的**单个键操作(如Put、Get)**不支持带有[AffinityKeyMapped]属性的自定义键类型。这是因为瘦客户端在处理单键请求时会执行本地亲和校验,但该特性并未在单键操作逻辑中实现;而批量操作(如PutAll)会直接将所有键值对传递给服务端,由服务端负责亲和键的处理,因此可以正常执行。

另外你已经在CREATE TABLE语句中通过AFFINITY_KEY=COMPANYID指定了服务端的亲和键规则,客户端键类上的[AffinityKeyMapped]标记属于重复定义,反而触发了瘦客户端的校验逻辑。

解决方案

方案一:移除键类的亲和属性标记

直接删除PERSONKEY中的[AffinityKeyMapped]属性,服务端会通过表定义的AFFINITY_KEY=COMPANYID处理分区逻辑,客户端无需额外标记:

public record PERSONKEY(
    [property: QuerySqlField(NotNull = true)] long COMPANYID, 
    [property: QuerySqlField(NotNull = true)] long PERSONID);

修改后,单个Put方法即可正常执行,同时SQL查询、批量操作的逻辑不受影响,亲和分区依然按COMPANYID生效。

方案二:统一使用批量操作或SQL写入

如果必须保留键类的亲和属性标记,那么在瘦客户端中仅使用批量方法(如PutAll),或者通过SQL语句直接插入数据:

// 使用SQL写入示例
cache.Query(new SqlFieldsQuery(
    "INSERT INTO PERSON (COMPANYID, PERSONID, FIRSTNAME, LASTNAME) VALUES (?, ?, ?, ?)",
    key.COMPANYID, key.PERSONID, value.FIRSTNAME, value.LASTNAME
)).GetAll();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:05:38