如何确定 Spring Data Gemfire 查询是否正在使用 Gemfire 索引?

How can you determine whether a Spring Data Gemfire query is using a Gemfire index?

我正在尝试确定我的所有 Spring Data Gemfire 查询是否都在使用 Gemfire 服务器上定义的索引。

使用 OQL,我知道我可以添加“<trace>”,并且在 gemfire 日志中它会显示是否正在使用索引:

@Query("<trace> SELECT c FROM /customer c, c.emailAddresses email WHERE email.emailAddress = ")
CustomerEntity findByEmailAddress(String emailAddress);

但是我们没有像这样定义 OQL 的方法呢? (假设用户名不是客户区域的密钥):

CustomerEntity findByUsername(String username);

好问题。不幸的是,基于方法名称和名称中使用的约定生成 GemFire OQL 查询的 Repository 方法不支持 TRACE 或其他 OQL 语句,如 IMPORT

您可能已经知道,Spring Data GemFire's Repository support builds on Spring Data Commons Repository infrastructure,它为最广泛的数据存储支持(关系、键值、文档等)保持最小的公分母。

不过,您可以通过设置 GemFire 系统来为所有 GemFire OQL 查询启用调试 属性...

-Dgemfire.Query.VERBOSE=true

启动您的应用程序时。有关详细信息,请参阅 GemFire's User Guide on Query Debugging

不幸的是,如果您只想跟踪您的 OQL 查询之一,这会有点冗长,但会完成您想要的。

在基于 Repository 方法的单个 OQL 查询中进行 TRACE 的唯一其他方法是使用 @Query 注释,如上所示。

@Query("<trace> SELECT c FROM /customer c, c.emailAddresses email WHERE email.emailAddress = ")
CustomerEntity findByEmailAddress(String emailAddress);

虽然你的问题确实给了我一些想法。我正在考虑通过这样的注释提供 IMPORT 和 TRACE 支持...

@Trace
@Import("example.app.domain.CustomerEntity")
CustomerEntity findByUsername(String username);

这将非常优雅和有用。

查看新的 JIRA 票证 (SGF-392) 我申请添加对此功能的支持。

谢谢!