我一直在用Apache Ignite做一些实验。我开发基于以下代码使用BinaryObject时,我是否需要每个字段的索引?
public static void main(String[] args) throws IgniteException {
Ignite start = Ignition.start("examples/config/example-ignite.xml");
CacheConfiguration<Integer, BinaryObject> cfg = new CacheConfiguration<>();
cfg.setQueryEntities(new ArrayList<QueryEntity>() {{
QueryEntity e = new QueryEntity();
e.setKeyType("java.lang.Integer");
e.setValueType("BinaryTest");
e.setFields(new LinkedHashMap<String, String>(){{
put("name", "java.lang.String");
}});
add(e);
}});
IgniteCache<Integer, BinaryObject> cache = start.getOrCreateCache(cfg).withKeepBinary();
BinaryObjectBuilder builder = start.binary().builder("BinaryTest");
builder.setField("name", "Test");
cache.put(1, builder.build());
QueryCursor<List<?>> query = cache.query(new SqlFieldsQuery("select name from BinaryTest"));
System.out.println(query.getAll());
不过我不想对各个领域的指数柔软物体(我怀疑这是昂贵的)。我意识到,没有索引,这可能会导致较慢的查询 - 我很好。
使用上面的示例代码,我不能首先创建该字段的索引形成一个SQL查询。
是否可以在没有索引的BinaryObjects上使用SQL查询? (注意:我只会在每个缓存中存储一个'类型'的二进制对象)。
感谢 丰富
感谢您的回答的Valentin。是否可以通过使用Map而不是BinaryObject来实现相同的效果?或者其他一些可以参与SQL查询的类型(但不一定对所有字段都有索引)。 – Rich
您将无法访问SQL查询中的地图元素。 –
我想我们(或者至少我)可能会把我们的电线穿过。使用BinaryObject我需要通过QueryEntity定义字段列表 - 我很酷。但是索引只会为使用QueryIndex指定的字段创建。因此,对没有QueryIndex条目的字段的查询仍然会*工作*,但由于没有索引存在,所以查询速度会更慢(全表扫描)。它是否正确? – Rich