Elasticsearch

特性

  • 分布式的实时文件存储,每个字段都被索引并可被搜索
  • 可实时分析的分布式搜索引擎
  • 可被扩展到百台服务器,处理PB级结构化或非结构化数据

概念

  • Cluster:集群,由一个或多个ElasticSearch节点组成
  • Node:节点,集群的服务单元,同一集群内的节点名字不重复,一个节点上分配一个或多个分片。
  • Shards:分片,索引上数据量太大时,对索引上的数据进行水平拆分,拆分出的每个数据库叫做一个分片。主分片数不能改。
  • Replicas:副本,主分片的备份。
  • 索引 index - Database 数据库,每个索引包含多个文档,每个文档包含不同属性
  • 类型 type - Table 数据表,比如商品索引,订单索引,数据格式不同,未来可能移除(容易造成混乱)
  • 文档 document - Row 行,存入数据库原数据,如一行商品数据
  • 字段 Field - Columns 列,文档中的属性
  • 映射配置 Mappings - 字段的数据类型、属性、是否索引、是否存储,将输入的数据转为可搜索的索引项

倒排索引

通过value找key

分词

搜索引擎对文章分词之后,再根据关键词建立倒排索引

分布式原理

对数据进行切分,同时一个分片会保存多个副本,保持分布式环境下高可用。

master、salve1、slave2

节点

就是ES实例可,主节点可选举节点

节点是一个ES实例,本质是一个Java进程,一台机器可以运行多个ES进程,一台机器建议只运行一个实例。

  • 每一个节点都有名字,通过配置文件配置,或者启动的时候 -E node.name=mynode指定
  • 每一个节点在启动之后,会分配 一个UID,保存在data目录下

Master-eligible nodes和Master Node

  • 每个节点启动后,默认就是一个Master eligible节点

    可以设置 node.master:false禁止

  • Master eligible节点可以参与选主流程,成为Master节点

  • 当第一个节点启动时,它会将自己选举为Master节点

  • 每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态信息

Data Node 和 Coordinating Node

  • Data Node:可以保存数据的节点;负责保存分片数据,在数据扩展上起到了至关重要的作用
  • Coordinating Node:负责接受Client请求,将请求分发到合适的节点,最终把结果汇集到一起

分片

随着索引文件的增加,磁盘容量、处理能力会变得不够,将索引切分成小段,大大改进数据查询的效率

主分片

  • 一个分片是一个实例
  • 主分片在创建时指定,后续不允许修改,除非reindex

副本分片

是分片的完整拷贝

  • 副本分片数可以动态跳整
  • 增加副本数可以在一定程度上提高服务的可用性(提高吞吐)

分片设定

  • 分片数过小,导致后续无法增加节点实现水平扩展
  • 分片数过大,导致数据重新分配时耗时

创建和增加索引步骤

Kibana中配置新索引,及逆行Fields Mapping,设置索引别名,也可通过HTTP请求来创建索引

打分过程和相关新

Lucene引擎完成,报蛞BM25和TF-IDF等

支持文本查询和支持Term查询

Redis

用处

  • 速度快,内存
  • 持久化 RDB+AOF
  • 自动化
  • 快速主从复制
  • Sharding技术,分布到多个redis实例中,横向扩展

数据类型

string

list

set

zset

hash

大key 2MB 处理

  • 先压缩
  • 拆分多个key

热key处理

  • 将热key多复制出内容完全一样 HotKey1 Hotkey2 Hotkey3 迁移到其它数据分片来分散压力(要修改代码)
  • 读写分离架构(读写都较大且数据一致性要求高,不是最优方案)

Memcache

数据结构单一

用于动态系统中减少数据库负载,适合读多写少,提升性能

MongoDB

支持丰富的数据表达,索引,支付查询语言丰富,文件存储位BSON(一种JSON扩展)

解决海量数据的访问效率问题

概念

  • database 数据库
  • collection 表/集合
  • document 记录含/文档
  • field 字段
  • index 索引
  • primary key 主键,自动将_id设为主键

适用场景

  • 网站数据
  • 缓存
  • 大尺寸、低价值的数据
  • 高伸缩性
  • 分片集群,可将一个collection数据分成5各篇存放到5各server中,查询时mongodb可以查找对应的数据再返回