У меня ситуация, когда я храню сложный объект в 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 по разным причинам, поэтому совместное размещение или аналогичные концепции неприемлемы для нашего варианта использования (хотя это сделало бы это бесконечно проще)
Потребности
- Доступ к клиенту по уникальному адресу электронной почты (глобально уникальному и подтвержденному перед вставкой)
- Доступ к клиенту с помощью уникальной комбинации имени и идентификатора внешней системы (снова глобально уникального и проверенного перед вставкой)
При необходимости у нас есть доступ к Elasticsearch, но мы действительно хотели бы решить эти два уникальных запроса на получение, вернув объект клиента напрямую. Как лучше всего решить эту проблему в Gemfire? FWIW, мы также используем Spring-Data-Gemfire.