如何在Gemfire区域中创建复合主键场景?

时间:2016-08-29 09:00:42

标签: java spring-data gemfire spring-data-gemfire

我正在努力将大型机迁移到java。我在DB2中有一个表。我正在将这张桌子复制为Gemfire中的一个区域。在执行此操作时,我为该表提供了复合主键。将表复制到gemfire区域。我想为区域制作复合主键。我只是想知道,是否有可能在区域中创建复合主键?

1 个答案:

答案 0 :(得分:1)

理想情况下,您创建的键在键/值对被放置后不会改变值#34; put"进入一个地区。 GemFire / Geode Region只是java.util.Map的一个美化版本(确切地说是HashMap)。

这意味着"复合" key不应该基于Region值本身的任何属性值。举例来说,假设我有一个像这样定义的值Customer ......

class Customer {

  Long accountNumber;

  Gender gender;

  LocalDate birthDate;

  String firstName;
  String lastName;

  ...
}

然后创建一个像这样的密钥是不可取的......

class CustomerKey {

  LocalDate birthDate;

  String firstName;
  String lastName;

}

虽然一个人的出生日期,名字和姓氏通常足以唯一地标识某人,但如果这些单独的属性/字段值中的任何一个发生变化,那么鉴于Java的内在行为,您将失去配对{{1 (所以要小心)。

您还应该注意谨慎地制作任何" custom / composite"的Map方法。你创建的关键类。

我通常建议您使用内部(仅对应用程序已知),键的标量类型,例如: equals/hashCodeLong

这就像向String类添加属性/字段一样简单,就像这样......

Customer

大多数情况下,您的(OQL)查询谓词基于各个域对象属性/字段的值,而不是键。例如......

class Customer {

  Long id;

  ...

}

此外,如果您的密钥是SELECT c FROM /Customers c WHERE c.lastName = 'Doe' ,则可以使用UUID类生成唯一值。否则,您将需要制定自己独特的密钥生成策略。

总之,虽然您可以根据Java中精心设计的类类型提出要求,但通常不建议这样做;更喜欢简单的标量类型。

对于一般情况,请注意以下事项link

希望这有帮助。

-John