我有以下类型的数据进入我的数据库,并希望存储到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作为值。计划在列上创建范围索引。
发布于 2017-10-03 19:09:04
您对数据有什么样的访问模式?如果您只打算使用OQL或函数查询数据,我建议生成一个随机密钥,并让值成为您的数据。
我认为把所有数据保存在你的钥匙里没有任何价值。如果要进行查找(使用region.get( key )),则需要所有数据来创建密钥,此时get()将没有任何价值。
(最新情况)
在进行查找时,您的键应该具有尽可能少的可用字段数。由于在查询中使用的是a、b、c和d,所以我建议您的密钥由a、b、c、d组成,而您的值包含其余的字段。此时您可以只做一个region.get(键),不需要编写查询。
https://stackoverflow.com/questions/46551278
复制相似问题