1
我已经用companyId作为关键字定义了以下两个类Person(带PersonKey)和Company()。 PersonKey与公司Id亲缘搭配。现在我正在试图做SQL分布式连接(Person.companyId = Company.companyId) on 2个节点连接成网格。我只重复了与单节点相同的连接。使用2个节点的分布式连接,我应该获得2倍的性能提升,但与单个节点相比,它表现得最差。这是为什么发生?两个节点都不参与计算(这里选择查询)部分?Apache Ignite中的分布式SQL查询性能
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,仓库WHERE w_id =? AND c_w_id = w_id AND c_d_id =? AND c_id =?**,客户表中有150000个条目,仓库表中有5个条目。这是由于查询不是那么多计算密集型?或者我是否缺少一些性能设置?(对于分布式连接,我也考虑过亲和性搭配) – rishi007bansod
我也**禁用了表中的索引**以使搜索进程**计算密集型**,但仍然有1个服务器节点的网格正在给出比2台服务器的网格更好的输出。 – rishi007bansod
如果您有一个能够重现问题的小型项目,那么我将能够看一看。但通常情况下,只有在执行过程中进行大量扫描时,添加节点才能提供帮助。 –