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