【问题标题】:Amending the CodeIgniter Active Record Query command?修改 CodeIgniter Active Record Query 命令?
【发布时间】:2011-10-08 13:22:57
【问题描述】:

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

现在我知道我可以在代码中访问两个不同的数据库对象以将各个请求路由到特定的数据库服务器,但我认为有更好的方法,自动化的方法。我将使用 MySQL 和 Active Record,并且还希望构建 Memcache 检查 - 虽然它不会立即使用,但我希望将来可以选择在此阶段内置。

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

1) 收到 SQL 查询

2) 检查是否有 SELECT 查询

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 查询......是吗?

【问题讨论】:

  • 您找到解决方案了吗?我正在努力做到这一点。

标签: php codeigniter codeigniter-2


【解决方案1】:

这种行为有点超出 CI 的正常范围。不幸的是,最好的办法是手动extend the database drivers,特别是覆盖函数simple_query_execute(simple_query 是_execute 的包装器,它只是确保初始化)。那确实是您可以保证可以捕获所有查询并相应地分支逻辑的唯一地方。 (您可能还想覆盖close,因为那是清理脚本)

(就个人而言,我会让 SELECT DB 将辅助 DB 加载到自身中,然后有条件地调用 $write_db->simple_query,这似乎是最不麻烦的)。

【讨论】:

  • 嗨,是的,我想你可能是对的......我想我想太聪明了!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 2013-02-18
  • 2013-06-14
  • 2011-07-10
  • 2012-02-03
相关资源
最近更新 更多