Apache Ignite中的分布式SQL查询性能

时间:2016-10-05 13:32:58

标签: gridgain ignite

我已经定义了以下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;
    }
}

1 个答案:

答案 0 :(得分:1)

添加第二个节点并不会自动意味着查询速度会快两倍。此外,由于添加了网络,因此很容易变慢,而在单个节点部署中,所有数据都是本地的。

为了使测试更公平,您可以从客户端节点[1]运行查询并更改服务器节点的数量。在这种情况下,结果集将始终通过网络发送,您将看到不同数量的服务器在性能上的真正差异。

[1] here