У меня есть данные следующего типа в моей базе данных, и я хочу сохранить их в 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 в качестве значения. Планируется создать индекс диапазона для столбца.