使用 BinaryObject 时是否需要为每个字段创建索引?
Do I need an index for every field when using a BinaryObject?
我一直在用 Apache Ignite 做一些实验。我基于以下代码开发了一个灵活的对象
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 查询? (注意:我只会在每个缓存中存储一个 'type' 个二进制对象)。
只有在您明确要求时才会创建索引。有关如何配置它们的详细信息,请参阅 [1]。
请注意,SQL 架构目前是静态的。所以如果你动态地添加一个字段到你的缓存数据类型(这是二进制格式 [2] 支持的),这个字段不能参与 SQL 查询。为此,您需要使用不同的配置重新创建缓存并重新加载数据。但是,有一个票[3]可以摆脱这个限制。
[1] https://apacheignite.readme.io/docs/sql-queries
我一直在用 Apache Ignite 做一些实验。我基于以下代码开发了一个灵活的对象
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 查询? (注意:我只会在每个缓存中存储一个 'type' 个二进制对象)。
只有在您明确要求时才会创建索引。有关如何配置它们的详细信息,请参阅 [1]。
请注意,SQL 架构目前是静态的。所以如果你动态地添加一个字段到你的缓存数据类型(这是二进制格式 [2] 支持的),这个字段不能参与 SQL 查询。为此,您需要使用不同的配置重新创建缓存并重新加载数据。但是,有一个票[3]可以摆脱这个限制。
[1] https://apacheignite.readme.io/docs/sql-queries