0

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

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

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

可以在父级创建索引吗?

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

4

1 回答 1

0

@Ashish

如果我正确理解您的问题,那么快速回答是否定的。

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

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

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 区域用于事务数据,将 REPLICATE 区域主要用于较小的数据集,通常是引用/查找类型的数据。

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

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

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

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

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

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

希望这可以帮助!

-约翰

于 2015-02-04T19:35:22.800 回答