Gemfire复合键(pojo)作为gemfire键

时间:2017-10-03 18:37:50

标签: gemfire spring-data-gemfire geode

我的数据库中包含以下类型的数据,并希望存储到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

在数据库中创建自动增量id并使用此id作为键但是我需要创建索引,增量id不会是我的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'

我很想知道是否有人遇到同样的情况?

更新 我决定使用自动增量id(Long)作为键,使用pojo作为值。 计划在列上创建范围索引。

1 个答案:

答案 0 :(得分:1)

您拥有哪种数据访问模式?如果您只是使用OQL或函数来查询数据,我建议生成一个随机密钥,并将值作为您的数据。

我认为保留密钥中的所有数据没有任何价值。如果您要进行查找(使用region.get(key)),则需要所有数据来创建密钥,此时get()将没有任何价值。

(更新)

您的密钥应该具有您在查找时始终可用的最小字段数。由于在您的查询中您使用的是a,b,c和d,我建议您的密钥由a,b,c和d组成,并且您的值包含其余字段。此时你可以只做一个region.get(key),不需要编写查询。