- 最新动态
- 功能总览
- 服务公告
- 产品介绍
- 计费说明
- 快速入门
-
用户指南
- CSS服务权限管理
-
使用Elasticsearch搜索数据
- Elasticsearch使用流程
- Elasticsearch集群规划建议
- 创建Elasticsearch集群
- 访问Elasticsearch集群
- 导入数据至Elasticsearch集群
- 使用Elasticsearch集群搜索数据
- 增强Elasticsearch集群搜索能力
- 配置Elasticsearch集群网络
- 备份与恢复Elasticsearch集群数据
- 扩缩容Elasticsearch集群
- 升级Elasticsearch集群版本
- 管理Elasticsearch集群
- 管理Elasticsearch集群索引策略
- Elasticsearch集群监控与日志管理
- 查看Elasticsearch集群审计日志
- 使用OpenSearch搜索数据
- 使用Logstash迁移数据
- CSS服务资源监控
- 最佳实践
- API参考
- SDK参考
- 场景代码示例
-
常见问题
- 产品咨询
- 计费相关
- CSS集群访问
- CSS集群迁移
-
CSS集群搜索引擎使用
- CSS服务中为什么新创建的索引分片集中分配到单节点上?
- CSS服务中Elasticsearch 7.x集群如何在index下创建type?
- CSS服务中如何配置Elasticsearch索引副本数量?
- CSS服务中Elasticsearch集群分片过多会有哪些影响?
- 如何查看CSS集群的分片数以及副本数?
- CSS服务中Elasticsearch集群的节点node.roles为i表示什么意思?
- CSS服务中如何设置Elasticsearch集群的默认分页返回最大条数?
- CSS服务中如何更新Elasticsearch生命周期策略?
- CSS服务中如何设置Elasticsearch集群慢查询日志的阈值?
- CSS服务中如何清理Elasticsearch索引数据?
- CSS服务中如何清理Elasticsearch缓存?
- 使用delete_by_query命令删除Elasticsearch集群数据后,为什么磁盘使用率反而增加?
- CSS服务的Elasticsearch集群是否支持script dotProduct?
-
CSS集群管理
- 如何查看CSS集群所分布的可用区?
- CSS服务中Filebeat版本与集群版本的关系是什么?
- 如何获取CSS服务的安全证书?
- CSS服务中如何转换CER安全证书的格式?
- CSS服务中Elasticsearch和OpenSearch集群支持修改安全组吗?
- CSS服务中Elasticsearch集群如何设置search.max_buckets参数?
- CSS服务中如何修改Elasticsearch和OpenSearch集群的TLS算法?
- CSS服务中如何开启Elasticsearch和OpenSearch集群的安全审计日志?
- CSS服务中是否支持停止集群?
- CSS集群冻结索引后如何查询OBS上的索引占用量?
- 如何查看Elasticsearch和OpenSearch集群的系统默认插件列表
- CSS集群备份与恢复
- CSS集群监控与运维
-
故障排除
-
访问集群类
- 无法正常打开Kibana
- Elasticsearch针对filebeat配置调优
- Spring Boot使用Elasticsearch出现Connection reset by peer问题
- 为什么集群创建失败
- Elasticsearch集群出现写入拒绝“Bulk Reject”,如何解决?
- Elasticsearch集群创建index pattern卡住,如何解决?
- 云搜索控制台页面提示系统繁忙
- Elasticsearch集群报错:unassigned shards all indices
- es-head插件连接Elasticsearch集群报跨域错误
- 单节点集群打开Cerebro界面显示告警
- ECS无法连接到集群
- 集群不可用
- 数据导入导出类
-
功能使用类
- 无法备份索引
- 无法使用自定义词库功能
- 快照仓库找不到
- 集群一直处于快照中
- 数据量很大,如何进行快照备份?
- 集群突现load高的故障排查
- 使用ElasticSearch的HLRC(High Level Rest Client)时,报出I/O Reactor STOPPED
- Elasticsearch集群最大堆内存持续过高(超过90%)
- Elasticsearch集群更改规格失败
- 安全集群索引只读状态修改报错
- Elasticsearch集群某一节点分配不到shard
- 集群索引插入数据失败
- CSS创建索引报错“maximum shards open”
- 删除索引报错“403 Forbidden”是什么原因?
- Kibana中删除index pattern报错Forbidden
- 执行命令update-by-query报错“Trying to create too many scroll contexts”
- Elasticsearch集群无法创建pattern
- 端口访问类
-
访问集群类
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
使用Elasticsearch加速关系型数据库的查询分析
介绍如何将MySQL数据库中的数据同步到云搜索服务的Elasticsearch集群,通过Elasticsearch实现数据库的全文检索、Ad Hoc查询和统计分析能力。
应用场景
- 电子商务平台:快速搜索商品,提供个性化推荐,实时监控用户行为和交易数据。
- 内容管理系统:对大量文档和内容进行高效检索,支持复杂的查询和数据分析。
- 金融服务:实时监控交易数据,进行风险分析和欺诈检测。
- 社交媒体分析:对用户生成的内容进行情感分析,趋势和影响力评估。
- 客户关系管理:快速检索客户信息,分析客户行为,提供定制化服务。
- 日志和事件监控:收集和分析大量日志数据,实时监控系统状态和安全事件。
- 医疗健康记录:快速检索和分析患者记录,支持临床决策和研究。
方案架构
![](https://support.huaweicloud.com/bestpractice-css/figure/zh-cn_image_0000001961259121.png)
- 用户业务数据存储到MySQL。
- 通过数据复制服务DRS将MySQL中的数据实时同步到CSS服务的Elasticsearch集群。
- 在Elasticsearch集群中进行全文检索、Ad Hoc查询和统计分析。
方案优势
- 全文检索能力提升:Elasticsearch是一个提供了强大的全文检索功能的搜索引擎。关系型数据库通常不擅长进行全文检索,而Elasticsearch可以有效地解决这一问题。
- 高并发Ad Hoc查询:Elasticsearch设计用于处理大量的并发查询请求,特别是在Ad Hoc查询场景下,它能够提供快速的响应时间,从而满足高并发环境下的查询需求。
- 实时数据同步:通过华为云数据复制服务DRS,可以实现MySQL数据库中的数据实时同步到Elasticsearch,确保数据的一致性和实时性。
- 简化的数据迁移和索引创建:在Elasticsearch中,可以创建与MySQL数据库表结构相对应的索引,简化了数据迁移和索引管理的复杂性。
- 灵活的查询语言:Elasticsearch提供了灵活的查询语言,支持复杂查询的构建,如范围查询、模糊查询、聚合查询等,这在关系型数据库中可能需要更复杂的SQL语句来实现。
- 统计分析能力:Elasticsearch的聚合功能可以快速进行数据统计和分析,如年龄分布统计等,这在关系型数据库中可能需要更多的计算资源和时间。
- 安全性和稳定性:通过配置安全模式的Elasticsearch集群和MySQL数据库,以及使用SSL安全连接,可以保证数据传输的安全性和系统的稳定性。
- 易于监控和维护:Elasticsearch提供了丰富的监控工具和API,使得系统维护和性能监控变得更加容易。
- 扩展性:Elasticsearch集群可以根据业务需求进行水平扩展,增加更多的节点来处理更大的数据量和查询负载。
这些优势使得Elasticsearch集群成为关系型数据库在处理全文检索和高并发Ad Hoc查询时的有效补充。
前提条件
- 已具备安全模式的Elasticsearch集群和MySQL数据库,且两者在同一个VPC与安全组内。
- MySQL数据库中已经有待同步的数据。
- MySQL中创建一个学生信息表:
CREATE TABLE `student` ( `dsc` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL, `age` smallint unsigned DEFAULT NULL, `name` varchar(32) COLLATE utf8mb4_general_ci NOT NULL, `id` int unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
- MySQL中插入3个学生的初始数据:
INSERT INTO student (id,name,age,dsc) VALUES ('1','Jack Ma Yun','50','Jack Ma Yun is a business magnate, investor and philanthropist.'), ('2','will smith','22','also known by his stage name the Fresh Prince, is an actor, rapper, and producer.'), ('3','James Francis Cameron','68','the director of avatar');
- MySQL中创建一个学生信息表:
- Elasticsearch集群中已完成索引创建,且与MySQL中表相对应。
本文执行如下命令创建Elasticsearch集群的索引。
PUT student { "settings": { "number_of_replicas": 0, "number_of_shards": 3 }, "mappings": { "properties": { "id": { "type": "keyword" }, "name": { "type": "short" }, "age": { "type": "short" }, "desc": { "type": "text" } } } }
其中的“number_of_shards”与“number_of_replicas”需根据具体业务场景进行配置。
操作步骤
- 通过DRS将MySQL数据实时同步到CSS。具体操作步骤请参见将MySQL同步到CSS/ES。
在本章案例中,表1中的同步任务配置参数需要按建议填写。
表1 同步任务参数说明 配置模块
参数名称
填写建议
同步实例 > 同步实例信息
网络类型
选择“VPC网络”。
源数据库实例
选择需要同步的RDS for MySQL实例,即存储用户业务数据的MySQL。
同步实例所在子网
选择同步实例所在的子网,建议跟数据库实例以及Elasticsearch集群所在子网保持一致。
源库及目标库 > 目标库信息
VPC
选择和Elasticsearch集群一致的VPC。
子网
选择和Elasticsearch集群一致的子网。
IP地址或域名
填写Elasticsearch集群的IP地址,获取方式请参见获取CSS集群的IP地址。
数据库用户名
填写Elasticsearch集群的管理员账户名(admin)。
数据库密码
填写Elasticsearch集群的管理员密码。
加密证书
选择Elasticsearch集群的安全证书,如果未启用“SSL安全连接”,则不用选择。获取方式请参见获取CSS集群的安全证书。
设置同步
流速模式
选择“不限速”。
同步对象类型
不勾选“同步表结构”,因为已经预先在Elasticsearch集群中创建了与MySQL中表相对应的索引。
同步对象
选择“表级同步”,选择与Elasticsearch对应的数据库以及表名。
说明:配置项中type名称需要与索引名称一样,都是“_doc”,如果不一致请修改。
数据加工
-
直接“下一步”。
启动同步任务后,等待任务“状态”从“全量同步”变成“增量同步”,表示数据进入实时同步状态。
- 验证数据库的同步状态。
- 全量数据同步验证。
在Elasticsearch集群的Kibana中执行如下命令,确认全量数据是否同步到CSS。
GET student/_search
- 源端插入新数据,验证数据是否会同步到Elasticsearch。
例如,源端插入“id”为“4”的新数据。
INSERT INTO student (id,name,age,dsc) VALUES ('4','Bill Gates','50','Gates III is a business magnate, software developer, investor, author, and philanthropist.')
在Elasticsearch集群的Kibana中执行如下命令,确认新数据是否同步到CSS。
GET student/_search
- 源端更新数据,验证数据是否会同步更新到Elasticsearch。
在Elasticsearch集群的Kibana中执行如下命令,确认数据是否同步更新到CSS。
GET student/_search
- 源端删除数据,验证Elasticsearch的数据是否同步删除。
在Elasticsearch集群的Kibana中执行如下命令,确认CSS里的数据是否被同步删除。
GET student/_search
- 全量数据同步验证。
- 验证数据库的全文检索能力。
例如,在Elasticsearch集群查询“dsc”中包含“avatar”的数据。
GET student/_search { "query": { "match": { "dsc": "avatar" } } }
- 验证数据库的Ad Hoc查询能力。
例如,在Elasticsearch集群查询年龄大于40的philanthropist。
GET student/_search { "query": { "bool": { "must": [ { "match": { "dsc": "philanthropist" } }, { "range": { "age": { "gte": 40 } } } ] } } }
- 验证数据库的统计分析能力。
例如,在Elasticsearch集群统计所有人的年龄分布。
GET student/_search { "size": 0, "query": { "match_all": {} }, "aggs": { "age_count": { "terms": { "field": "age", "size": 10 } } } }
其他操作
- 获取CSS集群的IP地址
- 在云搜索服务管理控制台,单击左侧导航栏的“集群管理”。
- 在集群管理列表页面,选择需要访问的集群,在“内网访问地址”列获取CSS集群的IP地址,一般是“<host>:<port>”或“<host>:<port>,<host>:<port>”样式。
如果集群只有一个节点,此处仅显示1个节点的IP地址和端口号,例如“10.62.179.32:9200”;如果集群有多个节点,此处显示所有节点的IP地址和端口号,例如“10.62.179.32:9200,10.62.179.33:9200”。
- 获取CSS集群的安全证书
- 登录云搜索服务控制台。
- 选择“集群管理”进入集群列表。
- 单击对应集群的名称,进入集群基本信息页面。
- 在“基本信息”页面,单击“HTTPS访问”后面的“下载证书”。
图2 下载证书