2017-04-25 36 views
1

我是Apache Ignite的初學者。我有3個java類ClassA,ClassB和ClassC。如何在Apache Ignite中創建對象關聯?

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; 
     } 
} 

讓我舉個例子。我希望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

所有你需要做的基於B級的ID是搭配C級與B級在Apache Ignite它被稱爲親和搭配,並在這裏詳細描述:https://apacheignite.readme.io/docs/affinity-collocation

特別是,在你的情況,你應附上@AffinityKeyMapped註釋ClassC.idB字段。

此外,在分區的詳細信息,並複製緩存在這裏: https://apacheignite.readme.io/docs/cache-modes

一旦您配置緩存這種方式,你也可以使用SQL查詢他們,包括分佈式SQL連接。更多關於SQL這裏: https://apacheignite.readme.io/docs/sql-queries

+0

已經穿過它了。發佈了問題,因爲我無法解決它。 –

+0

您應該將@AffinityKeyMapped註釋附加到ClassC.idB字段。這裏是javadoc:https://ignite.apache.org/releases/latest/javadoc/org/apache/ignite/cache/affinity/AffinityKeyMapped.html – Dmitriy

相關問題