【问题标题】:Ignite @AffinityKeyMapped for cache keys that are integers为整数的缓存键点燃 @AffinityKeyMapped
【发布时间】:2017-12-15 20:37:39
【问题描述】:

阅读https://apacheignite.readme.io/docs/affinity-collocation和ignite-examples中的文档,使用@AffinityKeyMapped的示例假设key是一个对象:PersonKey是一个有personId和companyId的类,companyId有注解。

在我的用例中,我的键是一个简单的整数。我正在使用从 WebConsole 生成的域模型。我有 2 个类:Item 和 ItemInstance,并且 ItemInstance 具有对 Item 的外键引用。我的模型定义如下:

public class ItemInstance implements Serializable {
    private static final long serialVersionUID = 0L;

    @QuerySqlField(index = true)
    @AffinityKeyMapped
    private int itemId;

    private String serialNumber;
...
}

public class Item implements Serializable {
    private String name;
...
}

在节点启动和缓存加载期间没有错误,但是在执行查询时我得到不完整的结果——它只检索并置的数据。我知道这一点是因为当我在 Web 控制台中运行相同的查询并勾选“允许非并置连接”时,我得到了完整的结果。

请注意,我没有像在另一个示例中那样使用 AffinityKey,因为我正在从 3rdparty 数据库中读取数据,而不是执行任何 put

请告诉我以下内容:

  1. ignite 是否支持@AffinityKeyMapped 整数键,类似于我上面的用法;

  2. 我们是否需要在 Spring XML 配置中也定义 @AffinityKeyMapped?我认为这可能是问题所在,但我无法在 Web 控制台或在线找到它。

谢谢!

【问题讨论】:

    标签: java spring ignite


    【解决方案1】:

    关联键值必须是键对象的一部分。因此,如果您使用 co-location,使用简单的整数作为缓存键是不够的,因为您的键至少应该由唯一的对象 ID 和亲和键组成。因此,您应该使用这两个字段创建一个对象,并用注释标记后者。

    如果您不想使用注解,或者没有类,您可以通过CacheKeyConfiguration [1] 提供亲和键字段名称。但是请注意,这仍然需要将复合对象用作键。

    [1]https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/CacheKeyConfiguration.html

    【讨论】:

    • 我明白了。这些关联键是否可以在 Web 控制台中的模型中配置,以便生成的代码已经具有这些复合对象?
    • 还没有实现。您可以跟踪此问题。 issues.apache.org/jira/browse/IGNITE-4709
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 2017-11-17
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    相关资源
    最近更新 更多