千家信息网

ElasticSearch中NoSql应用优化的方法

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇"ElasticSearch中NoSql应用优化的方法"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面
千家信息网最后更新 2025年12月02日ElasticSearch中NoSql应用优化的方法

这篇"ElasticSearch中NoSql应用优化的方法"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"ElasticSearch中NoSql应用优化的方法"文章吧。

再来说说NoSql应用,通常搜索引擎的取数据的过程是:

首先通过搜索词匹配倒排表得到一个只有id的结果集,然后通过id匹配正排索引拿到对应的文档字段,最后返回结果,这样的好处是:

  • 可以让倒排索引尽量小,保证IO性能

  • id是由搜索引擎自行分配维护的,并不依赖外部映射关系,做到将文档id和文档内容分离,使得文档内容可以像NoSql一样横向扩展字段

  • 可以在返回搜索结果的同时把文档原始内容带上,通过一次查询就返回前端展示所必须的信息(排序和内容),从而免去了从db取数据的IO开销

这样来说,搜索引擎确实可以一定程度上接替一部分db的工作,有做第二db(NoSql)的能力。

这次简单聊聊搜索引擎在NoSql上的典型应用场景:

1. 业务宽表

业务宽表应该是最常遇见的一类NoSql应用,作用是关联在db中相互独立存储的几张业务表为一张大中间表,从而可以将复杂的取数逻辑简化为一次查询,看上去很有诱惑力。那为什么不直接把这些业务字段在db中就存储为一张表呢,大致的原因是:

  • 某个产品在由小到大的发展过程中必然随着业务线的拆分,对应的业务db库表也必然随之拆分,方便开发维护(解耦)

  • 如果表存储的数据量很大,要进行一次ddl操作的代价会很高(锁表),新的业务需求(新增字段)就不得不通过新建一张附表来避免锁表带来的业务中断

事物都具有两面性,拆表解决了上述的问题,同时也带来了新的麻烦,如果某个业务同时依赖了多张业务表,那么进行一次数据交互就必然伴随着多次db操作(复杂的取数逻辑),如果还需要对某个字段进行排序,就必须得借助join操作(增大db压力)。

这时为了简化逻辑或者是减轻db压力,就可以在业务表之外新建一张业务宽表存储到ES,即使数据量很大(上十亿),依然可以快速的添加字段而不会引起锁表操作,而且NoSql的特性也天然适合业务快速发展的场景。

Tips:搜索引擎一般响应时间在0-100ms左右,ES因为gc的原因偶尔会有秒级的rt,所以应用需要评估对引擎响应时间(rt)的敏感程度。

2. 大数据交换/存储

离线计算有时得到的结果很大(比如根据各种消费规则算出一批潜在客户),而又需要结果进行各种在线查询计算,如果是千万级别的数据,如果直接导入db,可能会严重影响在线业务,而传统的大数据存储,比如HBase,在二级索引方面又没有那么给力,而ES可以支撑千万级别离线数据的快速导入,也能在导入完成后提供在线查询业务,相对会比较适合这个场景。

还有一个典型的大数据存储场景就是日志存储系统(ELK)了,一般情况下在线业务输出的日志量都是很惊人的,而且是一个典型的写多读少应用,同时需要强大的写入性能和比较强的搜索匹配能力,ES也是比较合适的载体。

Tips:在这个场景下,应用需要注意控制写入速率,避免引擎因为merge或者垃圾回收而导致长时间无响应,另外尽量保证所在集群与在线业务集群物理隔离。

3. 增强关键字匹配

db(mysql)尽管也有全文索引能力,但是对于昂贵的db资源来说,用在全文搜索的场景上并不太合适,如果需要提供几百万数据的全文检索能力,几台vm就足够搜索引擎以足够的性能跑了,这样的场景,搜索引擎就可以作为一个具有全文检索能力的廉价存储资源使用。

Tips:作为存储资源使用的情况下,需要注意的是搜索引擎提供的是"近实时"的查询服务,经常性的是在数据写入之后几秒或者几分钟后才可见,应用需要评估对数据实时性的敏感程度,过于敏感的业务不建议应用在这个场景。

4. 外部索引

以HBase为例,其拥有廉价且强大的大数据存储能力,可以自动分裂数据文件,保证读写性能稳定。但是要提供稳定的在线查询能力,HBase的rowkey设计非常微妙,而且大数据量情况下重建rowkey是个高成本的操作,原生又不支持二级索引,这时要保证HBase查询的灵活稳定,最好的办法就是在外部建立一个二级索引,既拥有搜索引擎强大的检索能力,又有自身稳定的存储性能,而且即使外部索引需要重建,也只需要在新索引创建完成之后切换查询流量就可以了。

Tips:保证两侧数据的一致性是这种场景下经常遇到的难题,如果还没有有完善的双写机制,比较合适的是用合理的补偿机制来保证。

5. 在线统计

ES在聚合查询上确实下了不少功夫,从1.x版本到5.x版本,聚合查询的功能一直在不断完善,聚合查询提供的是一定程度上的统计查询能力,而且比较侧重于ELK之类的日志分析,主要是:

  • 只能提供top n功能,不支持翻页

  • 如果数据量比较大(亿),而且数据变更比较频繁,查询的耗时经常是秒级的。

因此如果是对rt不很敏感的业务,又不能通过db在线查询解决,在明确上述缺陷的前提下,也是可以用ES来做"在线"统计查询工作的,当然建议还是:

  • 尽量降低数据更新频率,频繁的更新会导致ES频繁reopen index searcher,造成io压力上升,导致查询超时

  • 尽量保证索引数据量不要太大(索引拆分)

以上就是关于"ElasticSearch中NoSql应用优化的方法"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

数据 业务 查询 搜索 存储 应用 引擎 索引 内容 场景 搜索引擎 能力 在线 保证 字段 性能 结果 全文 同时 在线查询 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 金蝶标准版u盘更换服务器 mdb数据库是什么 恒生电子软件开发学到技术吗 未启用对服务器的远程访问 自学编程的软件开发 龙华区网络安全演练 阿里云web服务器突然没有响应 合肥九灵网络技术 鸠鸠互联网科技的董事长 软件开发违约2个月以上 深圳应用软件开发收费报价表 代理服务器 吧 网络安全员是做什么工作的 成都比较好的软件开发公司 深圳商城软件开发大概多少钱 数据库数据类型哪些不需要引号 微软的数据库软件有哪些 软件开发前要做什么 建筑软件开发工资一般多少 湖南华为服务器虚拟化费用 网络安全教育平台浙江 网络安全多少不准 web界面无法定位服务器 互联网的科技 苏州戴尔服务器维修期限 医院疾病数据库隐私 河北erp软件开发服务介绍 公安大学信息网络安全学院党委 世界卫生组织有没有传染病数据库 深圳市睿云网络技术有限公司
0