世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
1. 写入速度优化 :
0. 缺点 :牺牲可靠性和实时性
1. 加大translog flush间隔 :
1. 默认 :请求一次flush一次
index.translog.durability : request
2. 手动 :
index.translog.durability : async
index.translog.sync_interval : 120s
index.translog.flush_threshold_size : 1024mb
2. 加大索引刷新间隔 :
1. 默认 :1秒
2. 手动 :
index.refresh_interval : 120s
3. 段合并优化 :
1. index.merge.scheduler.max_thread_count
2. index.merge.policy.*
4. 索引缓存 :
1. indices.memory.index_buffer_size
5. 批量并发写入
6. 磁盘间均衡的分配任务 :
1. 轮询
2. 根据可用空间加权轮询
7. 节点间任务均衡,均衡的写入到各个节点
8. 索引优化:
1. 自动生成doc id
2. 调整字段:
1. 减少字段数量
2. 不需要分词的字段不分词
3. 选择合适的分析器
4. 减少字段内容长度
5. 不需要评分禁用 Norms
3. 禁用 _all
2. 搜索速度优化:
1. 为系统缓存预留一半的物理内存
2. 使用固态硬盘,提高IO能力
3. 合理文档建模,避免嵌套
4. 只读索引合并为单个分段
5. 预加载文件系统
6. 优化查询表达式:
7. batched_reduce_size :指定数量的分片结果返回后可以处理一部分
8. 使用近似聚合
9. 选择聚合方式 : 深度优先(默认) 或 广度优先
10. 限制请求的分片数:
action.search.shard_count
11. 利用自适应副本ARS提升响应速度
12. 字段映射,如标识符映射为keyword
13. 避免使用脚本
14. 优化日期搜索 :日期四舍五入
3. 实践:
1. 关闭swap
2. 设置oom killer, oom_score_adj