自定义模型的缓存/持久性的最佳方法

时间:2019-11-16 02:06:58

标签: java ignite distributed-caching

我对Ignite还是相当陌生的,请尝试一下。我的用例是我有一个需要缓存/持久化的模型。而且,这不是传统的pojo模型,我想保持存储和模型分离。因此,我无法在传统意义上使用它来注释pojo中的适当键/索引。并且需要能够对缓存的数据执行查询。

到目前为止,根据我所读的内容和用例,我看到的唯一选择是:

  1. 执行完整的SQL路由,即使用Batch Exec通过jdbc创建表,插入,删除和选择。

  2. 将其存储为BinaryObject,即

IgniteCache<BinaryObject, BinaryObject>

但是,我不确定是否可以获得查询支持。因为它将被存储为blob / byte []。

所以我正在寻找的是,还有其他我可能会错过的选择吗? 对于#1,有一种方法可以使用jdbc / SQL和锁定,因为我正在使用atomicity = transactional。

对于#2,有没有一种方法可以向其添加查询支持。我看着https://github.com/dmagda/ignite_world_demo/blob/master/src/main/java/demo/keyvalue/KeyValueBinaryDataProcessing.java 但这并不涵盖查询。

更新,针对可能会遇到此问题的人。

尝试了二进制方法,它可以工作。参考链接确实使用了pojo(不完全是我想要的)。但是,进一步看,重点是将QueryType设置为valueType,而不必是类名,只需将值映射为在put创建对象期间以及在查询过程中类似地引用回即可。

queryEntity.setValueType("employee");

//this can be now referenced while creating an object
ignite.binary().builder("employee");

// similarly used while querying
SqlFieldsQuery sqlQuery = new SqlFieldsQuery("select * from employee");

2 个答案:

答案 0 :(得分:1)

您可以将其存储为BinaryObject,并且可以通过为map to SQL via QueryEntities指定一些字段来获得有限的查询支持。

然后,您可以通过执行类似的查询来获取整个键/值

SELECT _key, _val FROM pojo WHERE name = ?;

请注意,您将需要使用本机SQL API,而不会使用JDBC。

答案 1 :(得分:0)

您很有可能需要通过TestPojoId定义具有亲和力共存的一对多关系表。看看sample

ScanQueries可以在没有模式定义的情况下使用,但需要完全对象反序列化。