簡體   English   中英

如何在Gemfire地區創建復合主鍵方案?

[英]How to create composite primary key scenario in Gemfire region?

我正在將大型機遷移到Java。 我在DB2中有一張表。 我將此表復制為Gemfire中的一個區域。 在執行此操作時,我具有該表的復合主鍵。 將表復制到gemfire區域。 我要為區域設置復合主鍵。 我只想知道,是否有可能在區域中創建復合主鍵?

理想情況下,您要創建在“鍵/值”對“放入”區域后值不會改變的鍵。 GemFire / Geode Region只是java.util.Map (准確地說是HashMap )的美化版本。

這意味着“復合”鍵不應基於Region值本身中的任何屬性值。 舉例來說,假設我有一個這樣定義的值Customer

class Customer {

  Long accountNumber;

  Gender gender;

  LocalDate birthDate;

  String firstName;
  String lastName;

  ...
}

然后像這樣創建密鑰是不明智的...

class CustomerKey {

  LocalDate birthDate;

  String firstName;
  String lastName;

}

雖然一個人的出生日期,名字和姓氏通常足以唯一地標識一個人,但是如果這些單獨的屬性/字段值中的任何一個發生了變化,那么鑒於Java Map的固有行為,您將失去配對(因此請小心)。

您還應該小心謹慎地創建任何“自定義/復合”鍵類的equals/hashCode方法。

我通常建議您為鍵使用內部(僅對於應用程序而言是已知的)標量類型,例如LongString

就像將屬性/字段添加到Customer類一樣簡單...

class Customer {

  Long id;

  ...

}

在大多數情況下,您的(OQL)查詢謂詞是基於各個域對象屬性/字段的值,而不是鍵。 例如...

SELECT c FROM /Customers c WHERE c.lastName = 'Doe'

此外,如果鍵是String ,則可以使用UUID類生成唯一值。 否則,您將需要制定自己獨特的密鑰生成策略。

總而言之,盡管您可以使用Java中精心設計的類類型來詢問您所要提出的問題,但通常不建議這樣做。 更喜歡簡單的標量類型。

這里是一個鏈接到一些普遍的事情要記住。

希望這可以幫助。

-約翰

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM