我已经定义了以下2个类Person(使用PersonKey)和Company()以及companyId作为键。 PersonKey是与companyId 并置的亲和力。现在我尝试在网格中连接的 2个节点上执行 SQL分布式连接(Person.companyId = Company.companyId)。我只用单节点重复了相同的连接。通过2个节点中的分布式连接,我可以获得2倍的性能提升,但与单个节点相比,它的性能最差。为什么会这样?两个节点都不参与计算(这里是选择查询)部分吗?
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;
}
}
答案 0 :(得分:1)
添加第二个节点并不会自动意味着查询速度会快两倍。此外,由于添加了网络,因此很容易变慢,而在单个节点部署中,所有数据都是本地的。
为了使测试更公平,您可以从客户端节点[1]运行查询并更改服务器节点的数量。在这种情况下,结果集将始终通过网络发送,您将看到不同数量的服务器在性能上的真正差异。
[1] here