【问题标题】:Can GemFire OQL query be done on all the child-regions of a parent-region, in a single query可以在单个查询中对父区域的所有子区域完成 GemFire OQL 查询吗
【发布时间】:2015-02-04 04:11:16
【问题描述】:

我需要像以下那样创建区域层次结构,通常我会按国家和类型进行查询。我将所有数据放在国家级地区。有时我在 NAM_Type1 中跨国家查询,有时在全球查询。

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

有没有一种方法可以查询父区域,而无需在各个国家/地区多次查询?

可以在父级创建索引吗?

我使用带有 spring-gemfire 的 GemFire 7.0 进行连接。

【问题讨论】:

    标签: gemfire oql spring-data-gemfire


    【解决方案1】:

    @Ashish

    如果我正确理解您的问题,快速回答是

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

    例如,假设您的子区域包含客户对象...

    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/查询)方面,子区域与顶级区域没有任何不同。

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

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

    因此,在您的情况下,您可能会通过...实现类似的行为

    1. 使用分区区域...
    2. 在不同的服务器上配置和创建...
    3. 根据您上述的层次结构组织成不同的服务器组。

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

    有不同的方式来组织和划分数据,甚至使用自定义的“PartitionResolvers”等,或者以函数为目标等等。

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

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

    希望这会有所帮助!

    -约翰

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2014-02-18
    • 1970-01-01
    相关资源
    最近更新 更多