我正在开发一个 Codeigniter (2.0.2) 应用程序,它将利用 Master 数据库进行所有写操作(INSERT/UPDATE/DELETE)和一个只读副本用于所有读操作(SELECT)。
现在我知道我可以在代码中访问两个不同的数据库对象以将各个请求路由到特定的数据库服务器,但我认为有更好的方法,自动化的方法。我将使用 MySQL 和 Active Record,并且还想构建 Memcache 检查 - 虽然它不会立即使用,但我希望将来可以选择在这个阶段内置。
我在想是否可以添加某种钩子/库来拦截 $this->db->query 以便发生以下情况:
1) 收到 SQL 查询
2)检查是否选择查询
2a) 如果 SELECT,查看 Memcache 是否处于活动状态,如果是,则编码 SQL 并检查 Memcache 以获取响应。
2b) 如果没有 memcache 响应,或者 Memcache 未处于活动状态,则通过 READ MySQL 服务器正常执行查询。
3) 查询未被选择,因此通过 WRITE MySQL 服务器正常执行查询。
4) 返回响应。
我敢肯定,看着这个,它应该很简单,但无论我怎么看,我只是没有看到潜在的答案 - 但必须有一个!任何人都可以提供帮助/协助吗?
另外,我还希望能够记录所有写SQL命令进行故障排除,想必最好的办法是把3a) Write SQL command to plain text file...引入到上面的方案中。我不相信 MySQL 实际上会记录非 SELECT 查询……是吗?