一:简介
The Elastic Stack, 包括 Elasticsearch、 Kibana(展示数据的项目)、 Beats 和 Logstash(这两个是采集和传输数据的项目)
这些项目组合形成的技术栈称为ELK Stack,能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化。
Elaticsearch,简称为 ES,是整个 ElasticStack 技术栈的核心, ES 是一个开源的高扩展的分布式全文搜索引擎 。
它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理 PB 级别的数据。
二:数据的类型:
ES是处理数据的,根据数据的格式可以将数据分为三大类:
1:结构化数据:
用特定的结构来组织和管理数据,一般表现为二维的表结构
可以保存到关系型数据库:mysql,oracle;可以通过sql语句来进行查询,为了提高效率还可以采用索引的方式来优化查询,优点是方便管理、方便查询,缺点:扩展结构复杂
2:非结构化数据:
无法用二维表结构来表现的数据,如:服务器日志、报表、视频、图片等,这些数据维度广数据量大,数据的存储和查询的成本大,这些数据一般保存到nosql数据库中:mongodb、redis、hbase等
3:半结构化数据:
数据的结构和内容混在一起,没有明显的区分,如:xml,html,这种数据一般也是保存到mangodb、redis、hbase;缺点是查询不易
三:为什么使用ES
在很多场景下,我们搜索的对象很多不是关系型、结构化数据,无法像数据库模糊查询那样模糊匹配,在大数据的环境下更不可能遍历所有数据做匹配,如网站搜索,它们都是根据网页中的关键字生成索引,我们在搜索的时候输入关键字,它们会将该关键字即索引匹配到的所有网页返回;还有常见的项目中应用日志的搜索等等。对于这些非结构化的数据文本,关系型数据库搜索不是能很好的支持
一般传统数据库,全文检索都实现的很鸡肋,因为一般也没人用数据库存文本字段。进行全文检索需要扫描整个表,如果数据量大的话即使对 SQL 的语法优化,也收效甚微。建立了索引,但是维护起来也很麻烦,对于 insert 和 update 操作都会重新构建索引。
ES就解决了这样的问题
四:Elasticsearch和Solr
这两个搜索引擎软件都是基于Lucene(Apache的项目:JAVA信息检索程序库)开发的
选型:
-
如果除了搜索文本之外还需要它来处理分析查询(如统计),ES是更好的选择
-
对于需要良好可伸缩性和性能的分布式环境,es更适合,它可扩展性和性能更好