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
, 在设计表的时候尽量依据三星索引和索引覆盖. 避免乱用联表查询或者其他的复杂查询.