Поиск по шаблону GridGain

Кто-нибудь знает, есть ли возможность реализовать поиск по шаблону объектов, хранящихся в сетке данных в памяти, с помощью GridGain? Рассмотрим следующее. У вас есть эти классы:

class Employee{
 private Long id;
 private String name;
 private Address address;
 private Account account;
}

class Account{
 private Long id;
 private String accountNr;
}

class Address{
 private String street;
 private String postcode;
 private String city;
 private Country country;
}

то у вас есть такой шаблон поиска:

Address address = new Address(null, null, "New York", null);
Employee template = new Employee(null, null,address, null);
grid.read(template); 
  • это найдет всех сотрудников, живущих в Нью-Йорке. Есть ли возможность реализовать это в GridGain? Если да, то не могли бы вы посоветовать, как? Я рассматривал возможность объединения sql для выполнения этой операции, однако мне нужно создать такой запрос во время выполнения и всегда с разным количеством параметров после предложения Where... и я не могу это решить.

Буду благодарен за любую помощь/подсказку.

Питер


person user3392697    schedule 10.04.2014    source источник


Ответы (1)


Вы можете использовать что-то вроде этого:

public class Address {
    @GridCacheQuerySqlField(unique = true)
    private long id;
    @GridCacheQuerySqlField
    private String street;
    @GridCacheQuerySqlField
    private String postcode;
    @GridCacheQuerySqlField
    private String city;
    @GridCacheQuerySqlField
    private Country country;
}

public class Employee {
    @GridCacheQuerySqlField(unique=true)
    private long id;

    @GridCacheQuerySqlField
    private long addressId; // Address ID.

    // Not indexed.
    private String name;
}

И затем выполните запрос:

GridCacheQuery<Map.Entry<Long, Employee>> qry = cache.queries().createSqlQuery(Employee.class,
    "from Employee, Address where Employee.addressId = Address.id " +
        "and Address.name = ?");
// Query all nodes to find all cached CompanyZ employees in New York
qry.execute("CompanyZ","New York");
person user987339    schedule 10.04.2014
comment
Спасибо за подсказку, к сожалению, мою проблему с созданием такого запроса в рантайме это не решит. Если вы считаете, что класс Employee имеет 30 полей, и вам нужно иметь возможность выполнять поиск с любым из этих полей или без него, как построить правильное количество параметров для qry.execute (от 1 до n) во время выполнения? - person user3392697; 11.04.2014
comment
Я думаю, что можно построить такой запрос. Однако, возможно, вам также следует рассмотреть запрос полного сканирования с предикатом Java. - person Dmitriy; 12.04.2014