Query - marmot-cn/marmot-framework GitHub Wiki
Query
我们通过使用Query封装数据库的调用. 因为我们通过Query封装对数据库的获取. 使其必须通过主键来获取数据.
为了保证数据查询的效率, 我们规定所有查询如下:
- 所有的查询只能查询主键
id, 即SELECT 主键 FROM table WHERE xxx - 根据主键
id, 获取单条数据 - 根据多个主键
id, 获取多条数据
我们查询分为两步是基于如下考量
1. 缓存
我们会有RowCacheQuery, 会根据主键id缓存数据. 这样我们的查询只获取主键id, 然后通过id从缓存获取数据.
2. 兼容搜索服务
常用的搜索服务Sphinx, ES根据条件也只会查询出主键id, 所以这样可以兼容我们的抽象查询层. 即无论是查数据库, 还是通过搜索服务查询, 出来的结果只是主键id.
3. 尽量使用三星索引 和 索引覆盖
我们限定查询只能获取主键id, 在设计表的时候尽量依据三星索引和索引覆盖. 避免乱用联表查询或者其他的复杂查询.