## 架构 Service是业务层,Dao是数据访问层,这样的分层是基于MVC架构来说的,分层的主要作用是解耦。 对于Spring这样的框架,(View\Web)表示层调用控制层(Controller),控制层调用业务层(Service),业务层调用数据访问层(Dao)。 具体起来,Dao的作用是封装对数据库的访问:增删改查,不涉及业务逻辑,只是达到按某个条件获得指定数据的要求; 而Service,则是专注业务逻辑,对于其中需要的数据库操作,都通过Dao去实现; :DAO = Data Access Object 表示层 (也称为UI层) 应用层 (也称为服务层) 业务逻辑层 (也称为域层) 数据访问层 (也称为持久化层) - [程序员必知的几种软件架构模式](https://www.infoq.cn/article/6rx047oohjlrdipd1bc2) # Go ## 可比较性 可比较才可以用作map的键。 可比较: 基础类型 指针 不可比较: slice map 函数 有时可比较有时不可比较: 接口 结构体 【包含不可比较对象时不可比较】 ## Elasticsearch容量规划 分片大小 日志类:单个分片不超过 50G 搜索类:单个分片不超过 20G 先估算总数据量,再根据分片大小,确定分片数。 容量规划 容量规划时要考虑的因素: 机器的软硬件配置 单个文档的尺寸,文档总数,索引大小,分片个数,副本个数 文档写入方式(如 bulk 的单次数据量) 文档的复杂度 文档的读取方式(如,要进行怎样的查询和聚合) 容量规划的步骤: 先进行性能评估:例如每秒写多少,每秒读多少,读单个文档能接受多大延迟。 再观察数据:mapping 的样子,需要什么样的查询和聚合。 两个典型的场景: 搜索:数据增长较慢。 日志:增长快,需要冷热分离,需要自动删除。 硬件配置: 搜索之类的高性能场景,磁盘要 SSD,磁盘 GB 数/内存 GB 数 = 1/10 日志和并发不高的场景,磁盘可以机械硬盘,磁盘 GB 数/内存 GB 数 = 1/50 单节点的数据量最好 2 TB 之内,最大不超过 5 TB。 JVM 的内存配机器内存的一半,同时 JVM 内存不超过 32 GB。 ### - [结构体的可比较性](https://studygolang.com/articles/11342)