修改CodeIgniter活动记录查询命令


Amending the CodeIgniter Active Record Query command?

我正在开发一个Codeigniter(2.0.2)应用程序,它将利用主数据库进行所有写操作(INSERT/UPDATE/DELETE),并为所有读操作(SELECT)使用读副本。

现在我知道我可以访问代码中的两个不同的数据库对象,将单个请求路由到特定的数据库服务器,但我认为有更好的方法,自动化的方法。我将使用MySQL和活动记录,也想建立在Memcache检查-虽然它不会立即使用,我想在未来的选项,在这个阶段内建。

我在想是否有可能添加某种钩子/库来拦截$this->db->查询,以便发生以下情况:

1) SQL Query received

2)检查SELECT query

2a)如果是SELECT,查看Memcache是否激活,如果是,编码SQL并检查Memcache是否响应。

2b)如果没有memcache响应,或者memcache未激活,则通过READ MySQL server正常执行查询。

3)查询不是select,所以通过WRITE MySQL服务器正常执行查询

4)返回响应

我相信看着这个,它应该是很简单的,但无论我怎么看,我只是没有看到一个潜在的答案-但必须有一个!有人能帮忙吗?

此外,我还希望能够记录所有写SQL命令以进行故障排除,大概最好的方法是引入3a)写SQL命令到纯文本文件…纳入上述方案。我不相信MySQL实际上记录了非select查询…不是吗?

这种行为有点超出了CI的正常范围。不幸的是,您最好的选择是手动扩展数据库驱动程序,特别是覆盖函数simple_query_execute (simple_query是_execute的包装器,它只是确保初始化)。这实际上是唯一可以保证捕获所有查询并相应地分支逻辑的地方。(你可能也想覆盖close,因为这是清理脚本)

(个人而言,我会有一个SELECT DB加载一个辅助数据库到自己,只是调用$write_db->simple_query条件,这似乎是最少的麻烦)。