面对亿万数据,传统的mysql数据库在搜索的时候会出现力不从心的情况,且对于集群下的日志,我们也不可能将海量的日志存储到关系型数据库,这时候出现了ELK的解决方案【Logstash+Elasticsearch+Kibana】
一、Logstash数据同步与转换
简单来说logstash就是一个具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输 出端;与此同时这根管道还可以根据自己的需求在inuput --out中间加上滤网,Logstash内置了几十种插 件,可以满足你的各种应用场景。
Logstash的数据采集、同步可以采用【全量同步】或【增量同步】等方式。
二、全文检索与分词技术
传统的关系型数据库在模糊匹配的时候会采用like语句的方式,但是在没有索引的情况下效率很低,典型sql语句如下:
SELECT id, trim( REPLACE ( product_name, ' ', '' ) ) AS productname, price, trim( REPLACE ( store_name, ' ', '' ) ) AS storenameFROM product_list WHERE product_name LIKE '%华为全面屏%' LIMIT 0,10000
此处我们采用Elesticsearch设置搜索平台。
GET /_search{ "query": 各种查询参数}
我们使用DSL语法进行结构化查询(Query DSL)和结构化过滤(Filter DSL)
DSL: ES支持一种JSON格式的查询,叫做DSL,domain specific language
ES同时能够实现搜索的自动补全、自动纠错机制
三、数据的可视化展示与分析
我们采用Kibana进行数据的可视化展示与分析,实例如下: