可以在单个查询中对父区域的所有子区域进行 GemFire OQL 查询吗
Can GemFire OQL query be done on all the child-regions of a parent-region, in a single query
我需要像下面这样建立区域层次结构,因为我通常按国家和类型查询。我将所有数据放在国家级区域中。有时我在 NAM_Type1 中跨国家查询,有时在全球范围内查询。
Global_Type1
-> NAM_Type1
--> USA
--> Mexico
-> APAC_Type1
--> Japan
--> HongKong
有没有一种方法可以查询父区域,而无需在各个国家/地区多次查询?
可以在父级别创建索引吗?
我使用 GemFire 7.0 和 spring-gemfire 进行连接。
@Ashish
如果我正确理解您的问题,快速回答是否。
您似乎想使用父区域(例如 NAM_Type1)来引用或查询包含在父区域的多个子区域(例如美国、墨西哥等)和 "aggregate" 所有次区域的结果???
例如,假设您的子区域包含客户对象...
public class Customer ... {
private String firstName;
private String lastName;
private boolean active;
...
}
然后...
SELECT * FROM /NAM_Type1 nam WHERE nam.active = 'true';
此 OQL 查询已损坏,因为它们在父区域(例如 NAM_Type1)和子区域(例如美国等)中的条目之间没有引用。如果您仅将 "parent" 区域用于命名空间层次结构,则它们根本不包含任何数据。
我想知道 "Sub-Regions" 需要什么?在数据访问方面(尤其是 OQL/querying),子区域与顶级区域没有任何不同。
通过使用子区域,这意味着您正在使用并仅限于使用 GemFire 用户指南中提到的复制区域 (http://gemfire.docs.pivotal.io/latest/userguide/index.html#basic_config/data_regions/managing_data_regions.html)。出于这个原因,除其他外,GemFire 团队通常不鼓励使用子区域,尤其是在交易数据可能发生很大变化的情况下。
一般来说,您希望将 PARTITION 区域用于交易数据,将 REPLICATE 区域主要用于较小的数据集并且通常是 reference/lookup 类型的数据。
因此,对于您的情况,您可以通过...
实现类似的行为
- 使用分区区域...
- 在不同的服务器上配置和创建...
- 根据您上面所述的层次结构组织成不同的服务器组。
然后,您可以针对 运行 托管感兴趣人口统计区域数据的特定服务器组中的服务器上的 GemFire 函数 运行 对本地数据的 OQL 查询组的区域。该函数将聚合,然后 return 结果。
有不同的方法来组织和分区数据,甚至使用自定义“PartitionResolvers”等,或定位函数等。
通过使用分区区域,您仍然可以使用 "copies" 属性(对应于 GemFire 的 PartitionAttributes.redundantCopies 属性)实现 HA(冗余)。您可以选择 "co-locate" 数据进行等值连接查询 possible/optimal.
免责声明:不熟悉您的用例和要求,我的建议可能适用于您的情况,也可能不适用于您的情况,但通常可以更优雅、更有效地实现子区域的效果使用 GemFire 的其他功能。如果有的话,也许这会给你一些想法。
希望对您有所帮助!
-约翰
我需要像下面这样建立区域层次结构,因为我通常按国家和类型查询。我将所有数据放在国家级区域中。有时我在 NAM_Type1 中跨国家查询,有时在全球范围内查询。
Global_Type1
-> NAM_Type1
--> USA
--> Mexico
-> APAC_Type1
--> Japan
--> HongKong
有没有一种方法可以查询父区域,而无需在各个国家/地区多次查询?
可以在父级别创建索引吗?
我使用 GemFire 7.0 和 spring-gemfire 进行连接。
@Ashish
如果我正确理解您的问题,快速回答是否。
您似乎想使用父区域(例如 NAM_Type1)来引用或查询包含在父区域的多个子区域(例如美国、墨西哥等)和 "aggregate" 所有次区域的结果???
例如,假设您的子区域包含客户对象...
public class Customer ... {
private String firstName;
private String lastName;
private boolean active;
...
}
然后...
SELECT * FROM /NAM_Type1 nam WHERE nam.active = 'true';
此 OQL 查询已损坏,因为它们在父区域(例如 NAM_Type1)和子区域(例如美国等)中的条目之间没有引用。如果您仅将 "parent" 区域用于命名空间层次结构,则它们根本不包含任何数据。
我想知道 "Sub-Regions" 需要什么?在数据访问方面(尤其是 OQL/querying),子区域与顶级区域没有任何不同。
通过使用子区域,这意味着您正在使用并仅限于使用 GemFire 用户指南中提到的复制区域 (http://gemfire.docs.pivotal.io/latest/userguide/index.html#basic_config/data_regions/managing_data_regions.html)。出于这个原因,除其他外,GemFire 团队通常不鼓励使用子区域,尤其是在交易数据可能发生很大变化的情况下。
一般来说,您希望将 PARTITION 区域用于交易数据,将 REPLICATE 区域主要用于较小的数据集并且通常是 reference/lookup 类型的数据。
因此,对于您的情况,您可以通过...
实现类似的行为- 使用分区区域...
- 在不同的服务器上配置和创建...
- 根据您上面所述的层次结构组织成不同的服务器组。
然后,您可以针对 运行 托管感兴趣人口统计区域数据的特定服务器组中的服务器上的 GemFire 函数 运行 对本地数据的 OQL 查询组的区域。该函数将聚合,然后 return 结果。
有不同的方法来组织和分区数据,甚至使用自定义“PartitionResolvers”等,或定位函数等。
通过使用分区区域,您仍然可以使用 "copies" 属性(对应于 GemFire 的 PartitionAttributes.redundantCopies 属性)实现 HA(冗余)。您可以选择 "co-locate" 数据进行等值连接查询 possible/optimal.
免责声明:不熟悉您的用例和要求,我的建议可能适用于您的情况,也可能不适用于您的情况,但通常可以更优雅、更有效地实现子区域的效果使用 GemFire 的其他功能。如果有的话,也许这会给你一些想法。
希望对您有所帮助!
-约翰