Я экспериментировал с 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-запрос без предварительного создания индекса для этого поля.
Возможно ли использовать SQL-запросы в BinaryObjects без индексов? (Примечание. Я буду хранить только один «тип» двоичного объекта в кеше).
Благодаря Rich
Спасибо за ответ Валентин. Можно ли добиться такого же эффекта, используя карту вместо BinaryObject? Или какой-либо другой тип, который может участвовать в SQL-запросах (но не обязательно иметь индексы на * все * полей). – Rich
Вы не сможете получить доступ к элементам карты в SQL-запросе. –
Повесьте, я думаю, что мы (или, по крайней мере, я) могли бы пересечь наши провода. Используя BinaryObject, мне нужно будет определить список полей через QueryEntity - я в порядке. Однако индексы создаются только для полей, заданных с помощью QueryIndex. Таким образом, запросы на поля без записи QueryIndex будут * работать *, но будут медленнее (полное сканирование таблицы) из-за отсутствия индекса. Это верно? – Rich