复杂查询中的正则表达式

https://blueprints.launchpad.net/ceilometer/+spec/regexp-in-complex-query

问题描述

目前某些实例或网络相关的服务在 resource_id 中包含额外的标识符。例如,disk.device.* 指标。它们的 resource_id 格式为 - <instance_id>-<disk-id>。我们无法使用指定的 instance_id 查询这些计量器的所有样本,因为磁盘具有不同的 ID。这种行为对最终用户不友好,并给想要了解更多集群工作信息的人带来麻烦。

提议的变更

为了支持上述复杂的查询,我们应该添加一个新的正则表达式操作符,并使用相应的 "=~" 符号表示。

实现依赖于后端

1) MongoDB 和 DB2。这些数据库支持 $regex 查询。它为查询中的字符串模式匹配提供正则表达式功能。MongoDB 和 DB2 使用兼容 Perl 的正则表达式 (即“PCRE” ) 版本 8.30,并支持 UTF-8。为了正确工作,我们将 filter query 中的 "=~" 映射到 pymongo 请求中的 "$regex"。

  1. SQLAlchemy。此后端支持 “regexp” MySQL 操作符,它也被映射。

  2. HBase 支持使用 RegexStringComparator 进行正则表达式查询。

替代方案

向资源元数据添加额外信息

数据模型影响

无。

REST API 影响

在复杂查询中添加新的简单操作符 “=~”。

安全影响

无。

Pipeline 影响

其他最终用户影响

您可以在复杂查询中使用正则表达式请求。

性能/可扩展性影响

对于大型正则表达式,会影响性能,api 服务可能会受到影响。

其他部署影响

开发者影响

实现

负责人

主要负责人

ityaptin

持续维护者

enovokshonova

工作项

  • 在 controller 中将 “=~” 添加到简单操作符列表中

  • 向后端添加正则表达式操作符处理

未来生命周期

依赖项

无。

测试

  • 扩展存储场景测试,以包含正则表达式操作符

文档影响

  • 更新复杂查询说明,以包含新的操作符

参考资料

https://blueprints.launchpad.net/ceilometer/+spec/regexp-in-complex-query