我是Apache Ignite的初学者。我有3个Java类ClassA,ClassB和ClassC。
ClassA{
int idA; //unique
String stringA;
public ClassA(){}
public ClassA(int idA,String stringA){
this.idA=idA;
this.stringA=stringA;
}
public int getidA(){
return idA;
}
public String getstringA(){
return stringA;
}
}
ClassB{
int idB; //unique
String stringB;
public ClassB(){}
public ClassB(int idB,String stringB){
this.idB=idB;
this.stringB=stringB;
}
public int getidB(){
return idB;
}
public String getstringB(){
return stringB;
}
}
ClassC{
int idC,idB; //idC unique. idB from ClassB
String stringC;
public ClassC(){}
public ClassB(int idB,int idC,String stringC){
this.idB=idB;
this.idC=idC;
this.stringC=stringC;
}
public int getidC(){
return idC;
}
public String getstringC(){
return stringC;
}
}
Lemme告诉一个例子。我希望ClassA处于复制模式,B& C在分区模式下。 ClassC与ClassB有关。 ClassB的id存在于ClassC中(就像外键一样)。比如,我有3个节点,30个ClassA对象,30个ClassB对象和30个ClassC对象。它们分布在如下节点中;
Node 1 => ClassA->30, ClassB->10,ClassC->8
Node 2 => ClassA->30, ClassB->5,ClassC->3
Node 3 => ClassA->30, ClassB->15,ClassC->19
与ClassB相关的ClassC对象应出现在同一节点中。我知道AffinityKey有一些机制,但我不知道如何实现它。
答案 0 :(得分:0)
您需要做的就是根据B类的ID将C类与B类并置。在Apache Ignite中,它被称为Affinity Collocation,在此详细描述:https://apacheignite.readme.io/docs/affinity-collocation
特别是,在您的情况下,您应该将@AffinityKeyMapped注释附加到 ClassC.idB 字段。
此外,有关PARTITIONED和REPLICATED缓存的更多信息: https://apacheignite.readme.io/docs/cache-modes
以这种方式配置缓存后,您还可以使用SQL查询它们,包括分布式SQL连接。更多关于SQL的信息: https://apacheignite.readme.io/docs/sql-queries