概述
数据库搜索存在的问题
用数据库做搜索并不好,主要问题
- 每次搜索都要对记录的一长条内容进行扫描
- like %关键字% 不能使用到索引
- 不能将搜索词拆分开来,很难实现部分匹配,比如杭州医疗保险,如果搜索杭州保险,就搜索不到
- 同义词的实现也比较复杂
- 要给表中新增一些column,必须用复杂的修改表结构的语法去执行。而且可能对系统代码还有一定的影响。
lucene存在的问题
lucene解决了上述的问题
但是其也存在问题
lucene是部署在单台机器上的,假设磁盘有500个G的空间,如果我们数据量很大,有一个T的数据量,lucene放不下怎么办?
放在多台设备上,分布式,散落在多台机器上。如电商网站前端搜索功能,与多台机器通信的过程,以及数据的管理,都非常麻烦。另外,保证数据不丢失,系统的高可用性上也存在很大的挑战。
这个过程如果我们自己来实现,很麻烦。
elastic search解决方案
在这种情况下elastic search应运而生。每个es节点都封装了lucene,多个es暴露出一个统一的地址。elastic search给我们进行管理多台设备。还实现了副本、故障恢复等机制及性能优化。
所以,elastic search是分布式、近实时、可伸缩的搜索引擎和数据分析引擎
也可以把es当成了一个NoSQL存储引擎,一个可以存储文档类型数据的存储系统,操作里面的document。
关系型数据库与es对比
关系型数据库与es存储对比总结
数据库核心概念 | elastic search核心概念 |
---|---|
table | index(type) |
row | document |
column | field |
schema | mapping |
sql | dsl |
sql与es操作对比总结
sql操作 | es操作 |
---|---|
like | match query |
where | term filter |
in | terms filter多值搜索 match query 或者 should, 加上 and operator 或者 minimum_should_match |
between | range filter |
order by | sort 语句 |
group by | bucket |
聚合操作 | metric |
操作符对比
sql: and or not
es: bool, must, should, must_not, query+operator(and, or)
总结:
传统关系型数据库和Elasticsearch区别
- Elasticsearch - Schemaless / 相关性 / 高性能全文搜索
- json文档方式实现Schemaless,可以对应前面数据库问题的第5条
- 相关性/高性能全文搜索,可以对应前面数据库问题的1-4条
- RDBMS - 事务性 / Join
- 关系型数据库的事务,es不具备
- 关系型数据库可执行join操作,es不具备
最后
以上就是安静冰棍为你收集整理的elasticsearch与关系型数据库之间的比较数据库搜索存在的问题lucene存在的问题elastic search解决方案关系型数据库与es对比总结:的全部内容,希望文章能够帮你解决elasticsearch与关系型数据库之间的比较数据库搜索存在的问题lucene存在的问题elastic search解决方案关系型数据库与es对比总结:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复