基数聚合
基数聚合属于聚合中的度量聚合,计算不同值的近似计数
需要注意,聚合出的结果是一个近似值,原因是底层结构使用的 HyperLogLog,具有一定误差
基本操作
假定 index 存储的售卖数据,希望查询有多少种不同的商品类型
基数聚合属于聚合中的度量聚合,计算不同值的近似计数
需要注意,聚合出的结果是一个近似值,原因是底层结构使用的 HyperLogLog,具有一定误差
假定 index 存储的售卖数据,希望查询有多少种不同的商品类型
from size 是最常见的分页方式,类比 MySQL 的 offset limit
由于 ES 是天然分布式的,数据分散在各个 shards 上,所以需要查询
from + size
的条数时,coordinate node 就向该 index 的其余的
shards 发送同样的请求,等汇总到 (shards × (from + size))
条数时在 coordinate node 再进行一次排序,最终抽取出真正 from 后的 size
条结果
显而易见,当 shards
较多、分页深度很大时,这种方式存在很大的性能问题,这也是 ES 默认深度为
from + size <= 10000
的原因
设计原则 | 概述 | 目的 |
---|---|---|
开闭原则 | 对扩展开放,对修改关闭 | 易于维护 |
单一职责 | 一个类只干一件事,实现类要单一 | 提升可读性 |
里氏替换 | 不要重写父类的方法 | 健壮性、防止错误继承 |
迪米特法则 | 最少知道,对象之间少建立联系 | 低耦合 |
接口隔离 | 一个接口只干一件事,接口要精简单一 | 高内聚 |
依赖倒置 | 高层不应该依赖低层,要面向接口编程 | 利于结构升级 |
Software entities like classes,modules and functions should be open for extension but closed for modifications.
一个软件实体如类,模块和函数应该对扩展开放,对修改关闭
随着业务发展需要增加新的方法,有几种方式: