可以在单个查询中对父区域的所有子区域执行GemFire OQL查询吗



我需要建立一个区域层次结构,如下所示,因为通常我会按国家和类型进行查询。我把所有数据放在国家一级的地区。有时我在NAM_Type1中跨国家查询,有时在Global中查询。

Global_Type1
-> NAM_Type1
-->  USA
-->  Mexico
-> APAC_Type1
-->  Japan
-->  HongKong

有没有一种方法可以在不多次查询单个国家/地区的情况下查询父地区?

可以在父级创建索引吗?

我使用GemFire 7.0和spring-GemFire进行连接。

@Ashish

如果我正确理解你的问题,快速答案是

您似乎想使用父区域(例如NAM_Type1)来引用或查询父区域的多个子区域(例如美国、墨西哥等)中包含的数据,并"聚合"所有子区域的结果???

例如,假设您的子区域包含Customer对象。。。

public class Customer ... {
  private String firstName;
  private String lastName;
  private boolean active;
  ...
}

然后。。。

SELECT * FROM /NAM_Type1 nam WHERE nam.active = 'true';

该OQL查询被破坏,因为它们在父区域(例如NAM_Type1)和子区域(例如USA等)中的条目之间没有引用。如果您仅将"父"区域用于命名空间层次结构,则它们根本不包含任何数据。

我想知道有什么需要"子区域"?在数据访问方面(尤其是OQL/查询),子区域与顶级区域没有任何不同。

使用Sub Regions意味着您正在使用并且仅限于使用此处的GemFire用户指南中提到的REPLICATE Regions(http://gemfire.docs.pivotal.io/latest/userguide/index.html#basic_config/data_regions/managing_data_regions.html)。出于这个原因,除其他原因外,GemFire团队通常不鼓励使用子区域,尤其是在事务数据可能发生很大变化的情况下。

通常,您希望将PARTITION Regions用于事务数据,将REPLICATE Regions主要用于较小的数据集,通常用于引用/查找类型的数据。

所以,在你的情况下,你可能会通过…实现类似的行为

  1. 正在使用PARTITION区域
  2. 已在不同的服务器上配置和创建
  3. 根据您上面所说的层次结构组织成不同的服务器组

然后,您可以在托管感兴趣的人口统计区域数据的特定服务器组中的服务器上定位并运行GemFire函数,以在区域的本地数据集上运行OQL查询。函数将进行聚合,然后返回结果。

有不同的方法来组织和划分数据,甚至使用自定义的"PartitionResolver"等,或者以函数为目标,等等

通过使用PARTITION Regions,您仍然可以使用上的"副本"属性(对应于GemFire的PartitionAttributes.redundantCopies属性)实现HA(冗余)。您可以选择"共同定位"数据,使等联接查询成为可能/最佳。

免责声明:由于不太熟悉您的用例和要求,我的建议可能适用于您的情况,也可能不适用于您,但通常使用GemFire的其他功能可以更优雅、更有效地实现子区域的效果。如果有什么不同的话,也许这会给你一些想法。

希望这能有所帮助!

-John

最新更新