Elasticsearch 是分布式文档存储
。Elasticsearch 不会将信息存储为列数据行,而是存储已序列化为JSON文档
的复杂数据结构。当集群中有多个 Elasticsearch 节点时,存储的文档将分布在集群中,并且可以从任何节点立即访问。
Relational DB | Elasticsearch |
---|---|
Databases | Indices |
Tables | Types |
Rows | Documents |
Columns | Fields |
SQL | DSL |
默认情况下,Elasticsearch 根据
结果相关性
(文档与查询条件的匹配程度)评分来对结果集进行排序。
文档
- Elasticsearch 是
面向文档
的,文档
是所有可搜索数据的最小单位
。 - 文档会被序列化成
JSON
格式,保存到 Elasticsearch 中。 - 每个文档都会有一个
UNIQUE ID
(自定义或 Elasticsearch 生成)。
节点
节点(node)
是一个运行着 ELasticsearch 的实例。
○ 本质就是一个Java
进程。
○ 一台机器可以运行多个 Elasticsearch 进程,但是生成环境建议一台机器只运行一个 Elasticsearch 实例。
- 每一个节点都有名字,通过配置文件配置,或启动时
-E node.name=node1
指定。 - 每个节点在启动后,会分配一个
UID
,保存在data
目录下。
分片
主分片
用于解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点之上。
- 一个分片是一个运行的
Lucene
实例。 - 主分片数在索引创建时指定,后续不允许修改,除非
Reindex
。
副本分片
用于解决数据高可用的问题。副本分片是主分片的拷贝。
- 副本分片数,可以动态调整。
- 增加副本分片数,还可以在一定程度上提供服务的可用性(读取的吞吐)。