Ich habe folgende 2 Klassen Person (mit PersonKey) und Company() mit CompanyId als Schlüssel definiert. PersonKey ist Affinität mit CompanyId zusammengelegt. Jetzt versuche ich zu tun SQL Distributed Join (Person.CompanyId = Company.companyId) auf 2 Knoten in Grid verbunden. Ich wiederholte die gleiche Verbindung mit nur einzigen Knoten. Mit verteilten Join in 2 Knoten sollte ich 2x Performance-Verbesserung, aber es ist am schlechtesten im Vergleich zu einzelnen Knoten. Warum passiert dies? Sind beide Knoten nicht am Berechnungsteil beteiligt (hier Abfrage auswählen)?Verteilte SQL-Abfrage Leistung in 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;
}
}
Jetzt habe ich Client-Knoten, wie Sie vorgeschlagen, aber immer noch Leistungsabfrage auf einzelnen Server-Knoten läuft, ist fast gleich wie 2 Servern in Netz angeschlossen. Die Abfrage, die ich implementiert habe, ist ** SELECT c_discount, c_last, c_credit, w_tax FROM Kunde, Lager WHERE w_id =? UND c_w_id = w_id UND c_d_id =? UND c_id =? ** mit 150000 Einträgen in der Kundentabelle und 5 Einträgen in der Warehouse-Tabelle. Ist die Abfrage nicht so rechenintensiv? oder fehlen mir einige Leistungseinstellungen? (Für Distributed Join habe ich auch Affinität Kollokation berücksichtigt) – rishi007bansod
Ich habe auch ** deaktiviert Indexierung ** in Tabellen, um den Suchvorgang ** compute intensive **, aber immer noch Gitter mit 1 Server-Knoten geben bessere Ausgabe als Grid mit 2 Servern. – rishi007bansod
Wenn Sie ein kleines Projekt haben, das das Problem reproduziert, dann werde ich in der Lage sein, einen Blick darauf zu werfen. Im Allgemeinen kann das Hinzufügen von Knoten jedoch nur helfen, wenn während der Ausführung viele Scans durchgeführt werden. –