Я определил следующие 2 класса Person (с PersonKey) и Company() с ключом companyId. PersonKey - сродство, связанное с companyId. Теперь я пытаюсь сделать SQL распределенное соединение (Person.companyId = Company.companyId) на 2 узла подключен в сетке. Я повторил одно и то же соединение только с единственным узлом. При распределенном объединении в 2-х узлах я должен получить повышение производительности в 2 раза, но он хуже всего сравнивается с единственным узлом. Почему это происходит? Оба узла не участвуют в вычислении (здесь select query)?Производительность распределенного SQL-запроса в Apache Ignite
class PersonKey
{
// Person ID used to identify a person.
private int personId;
// Company ID which will be used for affinity.
@AffinityKeyMapped
private String companyId;
public PersonKey(int personId, String companyId)
{
this.personId = personId;
this.companyId = companyId;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((companyId == null) ? 0 : companyId.hashCode());
result = prime * result + personId;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
PersonKey other = (PersonKey) obj;
if (companyId == null) {
if (other.companyId != null)
return false;
} else if (!companyId.equals(other.companyId))
return false;
if (personId != other.personId)
return false;
return true;
}
}
class Person
{
@QuerySqlField(index = true)
int personId;
@QuerySqlField(index = true)
String companyId;
public Person(int personId, String companyId)
{
this.personId = personId;
this.companyId = companyId;
}
private PersonKey key;
public PersonKey key()
{
if(key == null)
key = new PersonKey(personId, companyId);
return key;
}
}
class Company
{
@QuerySqlField(index = true)
String companyId;
String company_name;
public Company(String CompanyId, String company_name)
{
this.companyId = CompanyId;
this.company_name = company_name;
}
public String key()
{
return companyId;
}
}
Теперь я добавил клиентский узел, как Вы предложили, но до сих пор производительность запуска запроса на одном узле сервера почти так же, как 2-серверов в сети. Запрос, который я выполнил, - ** SELECT c_discount, c_last, c_credit, w_tax FROM customer, store WHERE w_id =? И c_w_id = w_id И c_d_id =? И c_id =? ** с 150000 записей в таблице клиентов и 5 записей в таблице хранилища. Это связано с тем, что запрос не так интенсивен? или у меня отсутствуют некоторые параметры производительности? (Для распределенного соединения я также рассмотрел аффинное коллокацию) – rishi007bansod
У меня также ** отключена индексация ** в таблицах, чтобы сделать процесс поиска ** вычисляться интенсивным **, но все же сетка с 1 серверным узлом дает лучше, чем сетка с 2 серверами. – rishi007bansod
Если у вас есть небольшой проект, который воспроизводит проблему, тогда я смогу взглянуть. Но, как правило, добавление узлов может помочь только при большом количестве сканирований во время выполнения. –