Композитный ключ Gemfire (pojo) как ключ gemfire

У меня есть данные следующего типа в моей базе данных, и я хочу сохранить их в Gemfire.

+------------------------------+--------------------------------+----------------------------------------+----------------------------------+----------------------------------+------------------------------------+-----------------------------------+------------------------------+------------------------+----------------------------+-------------------------------------+--+
| A                            | B                              | C                                      | D                                | E                                | F                                  | G                                 | H                            | I                      | J                          | date                                |
+------------------------------+--------------------------------+----------------------------------------+----------------------------------+----------------------------------+------------------------------------+-----------------------------------+------------------------------+------------------------+----------------------------+-------------------------------------+--+
| VK                           | XXXXXXXXXXXXXXXX               | YYY                                    | VBGFD                            | 9                                | 193.83                             | 9                                 | T                            |                        | False                      | 2017-08-25                          |
| VK                           | XXXXXXXXXXXXXXXX               | YYY                                    | VBGFD                            | 25.22                            | 193.83                             | 9                                 | T                            |                        | False                      | 2017-08-25                          |
| VK                           | XXXXXXXXXXXXXXXX               | YYY                                    | VBGFD                            | 9                                | 112.23                             | 9                                 | T                            |                        | False                      | 2017-08-25                          |
| VK                           | XXXXXXXXXXXXXXXX               | YYY                                    | VBGFD                            | NULL                             | 89.98                              | NULL                              | T                            |                        | False                      | 2017-08-25                          |
+------------------------------+--------------------------------+----------------------------------------+----------------------------------+----------------------------------+------------------------------------+-----------------------------------+------------------------------+------------------------+----------------------------+-------------------------------------+--+

4 rows selected (2.248 seconds)

1) Вы можете видеть, что данные дублируются, и любой столбец с разными значениями будет считаться уникальной строкой.

2) Я не могу использовать какой-либо столбец в качестве ключа Gemfire, поскольку будет переопределять значения (поскольку данные дублируются)

У меня есть два возможных решения:

Подход 1

Я могу использовать составной ключ (pojo) как ключ gemfire, но проблема в том, что мне нужно использовать тот же pojo как ключ и значение (согласно данным)

package  data;
Class KEY{
private String A;
private String B ;
private String C ;
private String D ;
private String E ;
private String F;
private String G ;
private String H ;
private String I ;
private String J ;
private String  date ;
}

package  data
Class Value{
private String A;
private String B ;
private String C ;
private String D ;
private String E ;
private String F;
private String G ;
private String H ;
private String I ;
private String J ;
private String  date ;
}


put --key=(KEY) --value=(Value) --region=/region1 --key-class=data.KEY --value-class=data.Value

Проблема с этим подходом заключается в том, что он удвоит размер моих данных в регионе, и мой загрузчик начнет выбрасывать ошибку памяти.

Подход 2

Создайте идентификатор автоматического увеличения в базе данных и используйте этот идентификатор в качестве ключа, но тогда мне нужно создать индекс, идентификатор увеличения не будет частью моего sql.

Мой запрос

query --query='select a,b,c,d,e,f,g,h,i,j,date from / myRegion where a=VK and b=XXXXXXXXXXXXXXXX and c=YYY and F=193.83'

Интересно, встречался ли кто-нибудь с таким же сценарием?

Обновление: я решил использовать идентификатор автоинкремента (Long) в качестве ключа и pojo в качестве значения. Планируется создать индекс диапазона для столбца.


person vaquar khan    schedule 03.10.2017    source источник


Ответы (1)


Какие у вас шаблоны доступа к данным? Если вы собираетесь использовать OQL или функции только для запроса данных, я бы предложил сгенерировать случайный ключ и позволить значению быть вашими данными.

Я не вижу смысла хранить все данные в вашем ключе. Если вам нужно было выполнить поиск (используя region.get (key)), вам понадобятся все данные для создания ключа, после чего ваш get () не будет иметь никакого значения.

(Обновить)

Ваш ключ должен иметь минимальное количество полей, которое всегда доступно при поиске. Поскольку в вашем запросе вы используете a, b, c и d, я бы предложил, чтобы ваш ключ состоял из a, b, c, d, а ваше значение содержало оставшиеся поля. На этом этапе вы можете просто создать region.get (ключ), без необходимости писать запрос.

person Swapnil    schedule 03.10.2017
comment
Я раскрываю микросервис отдыха, я думал использовать ключ автоматического увеличения в качестве ключа gemfire, но проблема в том, что у меня есть миллиарды записей в области gemfire, и мне нужно создать индекс по ключу. - person vaquar khan; 03.10.2017
comment
Привет, Хан, как упомянул @Swapnil, вы должны подумать о том, как данные будут доступны / прочитаны (вы не ответили на эту часть). Если вы его не поняли, он спрашивал, будет ли чтение данных похоже на запрос в одном из столбцов, например, выберите * from / region1, где A = 'VK', получите список и сделайте что-нибудь после. Или на что это будет похоже? - person Xiawei Zhang; 04.10.2017
comment
Спасибо, Чжан, я обновил вопрос с необходимыми деталями - person vaquar khan; 04.10.2017
comment
@Swapnil действительно оценил ваш быстрый ответ и помощь, я добавил еще одну строку, теперь вы можете видеть, что мой запрос должен возвращать две строки по заданным критериям, однако, если ключ в этих четырех столбцах, он переопределит значения в genmfire и сохранит только вторую запись, поэтому запрос вернет только один неверный результат. - person vaquar khan; 05.10.2017