千万级数据并发如何处理?进入学习

ES简介

一个高扩展、开源的全文检索和分析引擎,它可以准实时地快速存储、搜索、分析海量的数据。
全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。这个过程类似于通过字典中的检索字表查字的过程。全文搜索搜索引擎数据库中的数据

ES 为什么比 mysql 快

Mysql 只有 term dictionary 这一层,是以 b-tree 排序的方式存储在磁盘上的。检索一个 term 需要若干次的 random access 的磁盘操作。而 Lucene 在 term dictionary 的基础上添加了 term index 来加速检索,term index 以树的形式缓存在内存中。从 term index 查到对应的 term dictionary 的 block 位置之后,再去磁盘上找 term,大大减少了磁盘的 random access 次数。另外:term index 在内存中是以 FST(finite state transducers)的形式保存的,其特点是非常节省内存。Term dictionary 在磁盘上是以分 block 的方式保存的,一个 block 内部利用公共前缀压缩,比如都是 Ab 开头的单词就可以把 Ab 省去。这样 term dictionary 可以比 b-tree 更节约磁盘空间。

同步数据库

我们采取 MySQL 的数据存储,利用 MySQL 的事务特性维护数据一致性,使用 ElasticSearch 进行数据汇集和查询,此时 es 与数据库的同步方案就尤为重要。

流程

首先添加商品入数据库,添加商品成功后,商品入 ES,若入 ES 失败,将失败的商品 ID 放入 redis 的缓存队列,且失败的商品 ID 入 log 文件(若出现 redis 挂掉,可从日志中取异常商品 ID 然后再入 ES),task 任务每秒刷新一下 redis 缓存队列,若是从缓存队列中取到商品 ID,则根据商品 ID 从数据库中获取商品数据然后入 ES。

使用

logstash-input-jdbc 插件同步数据库,安装,配置:创建一个 .conf 文件,配置了要同步的数据库和.sql 用于执行的 sql 语句,最后把一个 jdbc 驱动放到这个文件夹下,用来连接 mysql 数据库

【相关学习

ES在MySQL、PHP中的使用