我对Ignite还是相当陌生的,请尝试一下。我的用例是我有一个需要缓存/持久化的模型。而且,这不是传统的pojo模型,我想保持存储和模型分离。因此,我无法在传统意义上使用它来注释pojo中的适当键/索引。并且需要能够对缓存的数据执行查询。
到目前为止,根据我所读的内容和用例,我看到的唯一选择是:
执行完整的SQL路由,即使用Batch Exec通过jdbc创建表,插入,删除和选择。
将其存储为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");
答案 0 :(得分:1)
您可以将其存储为BinaryObject,并且可以通过为map to SQL via QueryEntities指定一些字段来获得有限的查询支持。
然后,您可以通过执行类似的查询来获取整个键/值
SELECT _key, _val FROM pojo WHERE name = ?;
请注意,您将需要使用本机SQL API,而不会使用JDBC。
答案 1 :(得分:0)
您很有可能需要通过TestPojoId定义具有亲和力共存的一对多关系表。看看sample。
ScanQueries可以在没有模式定义的情况下使用,但需要完全对象反序列化。