文章目录
近实时搜索
- 近实时搜索
- es写入数据的流程
es是按段搜索的. 最新的数据存储在最新的段上. es不是实时的, 而是近实时的. 是基于分段搜索进行的.
数据写入的时候, 先找到协调节点, 协调节点会有路由计算规则, hash(_id) % 分片数量 计算主分片的位置. 数据写入主分片, 之后写入副本.
延时: 主分片的延时 + 并行写入副本的最大延时
es写入数据的流程在内存中建立索引 . —> 形成分段的数据对象. ----> 数据落磁盘 (flush) —> 用户进行查询 (必须要落盘才能查询)
索引建立完毕 -->写translog (内存中) — > 磁盘写入translog (flush)
- 由于es写入过程较为复杂, 因此没有和数据库一样先写日志再写索引, 避免无效日志.
- 由于数据在内存中并不能搜索, 在磁盘中才能搜索, 因此优化的是把内存中的数据, 写入操作系统的文件缓冲区中, 此时数据可以被查询, 并每隔半个小时落盘. 并且由于有translog , 也保证了数据的安全性.
- 由于不断的刷写, 会形成很多的文件段, 此时就会进行文件的合并, 提高效率. 合并的时候, 也会把标记删除的文件, 物理删除.