我有一种情况,我在 Gemfire 中存储了一个复杂的对象。为简单起见,它是一个具有多个属性的客户对象。我们还存储了一个电子邮件地址对象列表(不仅仅是电子邮件字符串)、地址、电话号码和对“外部系统”的引用,我需要确定查询数据的最佳方式。
首先是对象结构(为简单起见伪xsd)
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="customer">
<xs:complexType>
<xs:sequence>
<xs:element name="firstName" type="xs:string"/>
<xs:element name="lastName" type="xs:string"/>
...
<xs:element name="emailAddresses" type="emailAddressType" minOccurs="1"/> <!-- one or more -->
<xs:element name="foreignSystemIdentifiers" type="foreignSystemIdentifierType"/> <!-- zero or more -->
...
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="emailAddressType">
<xs:complexType>
<xs:element name="emailAddress" type="xs:string"/>
<xs:element name="addressType" type="xs:string"/>
...
</xs:complexType>
</xs:element>
<xs:element name="foreignSystemIdentifierType">
<xs:complexType>
<xs:element name="foreignSystemName" type="xs:string"/>
<xs:element name="foreignSystemId" type="xs:string"/>
...
</xs:complexType>
</xs:element>
</xs:schema>
由于各种原因,我们将此数据作为 Customer 对象存储在单个区域中,因此我们的用例不能接受托管或类似概念(尽管它会使这变得无限简单)
需求
- 通过唯一的电子邮件地址访问客户(全球唯一并在插入前验证)
- 通过外部系统标识符名称和 id 的唯一组合访问客户(同样是全球唯一并在插入之前验证)
如果需要,我们确实可以访问 Elasticsearch,但我们真的很想通过直接返回 Customer 对象来解决这两个独特的 get 请求。在 Gemfire 中解决此问题的最佳方法是什么?FWIW,我们也在使用 Spring-Data-Gemfire。