Изменить команду CodeIgniter Active Record Query? - PullRequest
0 голосов
/ 19 июля 2011

Я разрабатываю приложение Codeigniter (2.0.2), которое будет использовать базу данных Master для всех операций записи (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) Записать команду SQL в простой текстовый файл ... в схему выше.Я не верю, что MySQL на самом деле регистрирует невыбранные запросы в любом случае ... не так ли?

1 Ответ

1 голос
/ 19 июля 2011

Этот тип поведения немного выходит за рамки обычной CI. К сожалению, лучше всего вручную расширить драйверы базы данных , в частности переопределить функцию simple_query или _execute (simple_query - это обертка вокруг _execute, которая просто обеспечивает инициализацию). Это действительно единственное место, где вы можете гарантировать, что сможете перехватить все запросы и соответствующим образом изменить логику. (Вы также можете переопределить close, так как это скрипт очистки)

(Лично я хотел бы, чтобы БД SELECT загрузил в себя вторичную БД и просто условно вызвал бы $ write_db-> simple_query, похоже, это будет наименьшей проблемой).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...