nosql
文章目录
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可以查找对应的数据再返回
文章作者 小叨
上次更新 2023-04-20