Список форумов Cake-PHP.ru Cake-PHP.ru
Форум программистов CakePHP
(на сайт)
 
 Watched TopicsWatched Topics   FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Разделение запросов на запись и чтение

 
Начать новую тему   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Cake-PHP.ru -> Общий
Предыдущая тема :: Следующая тема  
Автор Сообщение
ztalker



Зарегистрирован: 06 Ноя 2007 14:00:26
Сообщения: 26
Откуда: Новосибирск

СообщениеДобавлено: 21 Ноя 2007 07:16:48    Заголовок сообщения: Разделение запросов на запись и чтение Ответить с цитатой

Мне необходимо в веб-программе построенной на cakePHP 1.2 разделить запросы на запись и чтение, так чтобы чтение производилось из одной базы а запись в другую.
Смысл: чтобы не гонять трафик по инету, стоят 2 MySQL сервера, один локально, другой далеко (даже в другом городе). Т.к. большая чать запросов это чтение, то чтение производится с локального сервера, а запись на удаленный сервер. Если на удаленном сервере что-то меняется в базе, то она синхронизируется с локальной.
Подскажите как реализовать разделение запросов на запись и чтение в CakePHP?
_________________
На работу в Новосибирске требуется PHP программист, со знанием CakePHP. Пишите в личку.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Антон Исайкин
Site Admin


Зарегистрирован: 08 Окт 2007 12:02:56
Сообщения: 150
Откуда: Санкт-Петербург

СообщениеДобавлено: 21 Ноя 2007 08:39:53    Заголовок сообщения: Ответить с цитатой

Укажите две базы данных в настройках. А затем просто переключайтесь между ними, устанавливая
Код:
$useDbConfig
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
ztalker



Зарегистрирован: 06 Ноя 2007 14:00:26
Сообщения: 26
Откуда: Новосибирск

СообщениеДобавлено: 21 Ноя 2007 09:00:22    Заголовок сообщения: Ответить с цитатой

Об этом я уже думал, это не удобно, да и не совсем правильно для поставленной задачи. Перед каждым запросом переключатся - не красиво, и с точки зрения ООП не практично, существует вероятность забыть про переключение перед следующим запросом (особенно, когда работает группа программистов, а не один человек), а это уже пагубно для работы синхронизации. Хочется сделать данное переключение внутренним, чтобы при написании новых или включении готовых модулей или плагинов все работало по единым правилам.
Может есть другие пути, без вмешательства в сам cake?
_________________
На работу в Новосибирске требуется PHP программист, со знанием CakePHP. Пишите в личку.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
VolCh



Зарегистрирован: 21 Окт 2007 07:17:33
Сообщения: 47
Откуда: Санкт-Петербург

СообщениеДобавлено: 21 Ноя 2007 10:56:59    Заголовок сообщения: Ответить с цитатой

Синхронизацию и репликацию средствами MySQL не рассматривали?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
ztalker



Зарегистрирован: 06 Ноя 2007 14:00:26
Сообщения: 26
Откуда: Новосибирск

СообщениеДобавлено: 21 Ноя 2007 12:38:11    Заголовок сообщения: Ответить с цитатой

VolCh писал(а):
Синхронизацию и репликацию средствами MySQL не рассматривали?

Выше я писал, что синхронизация (репликация) будет! Т.е. головной на запись, вторичные на чтение, а репликация будет сводить все изменения вместе. Но на сколько я понимаю MySQL не разделяет самостоятельно запросы на запись и чтение, это все организовывается клиентом. Вот и возникает вопрос, как в клиенте построенном на cakePHP это организовать?
_________________
На работу в Новосибирске требуется PHP программист, со знанием CakePHP. Пишите в личку.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
KPOTOB
Гость





СообщениеДобавлено: 21 Ноя 2007 13:04:37    Заголовок сообщения: Ответить с цитатой Изменить/удалить это сообщение

Как вариант - написать Behavior и чтобы он менял $useDbConfig в зависимости от запроса - для CUD (beforeSave beforeDelete) одно - для R (beforeFind) - другое
Вернуться к началу
ztalker



Зарегистрирован: 06 Ноя 2007 14:00:26
Сообщения: 26
Откуда: Новосибирск

СообщениеДобавлено: 21 Ноя 2007 13:52:49    Заголовок сообщения: Ответить с цитатой

KPOTOB писал(а):
Как вариант - написать Behavior

Я совсем недавно перешел на 1.2 и не совсем понимаю как писать свои Behavior, в мануалах, что сейчас есть по 1.2 инфы не нашел.
Т.е. описывать callback-и - beforeSave, beforeDelete, beforeFind и этого будет достаточно? А если где-нибуть в модели используется не только find, save и delete, а еще будут использоваться запросы методом query, то здесь как?
_________________
На работу в Новосибирске требуется PHP программист, со знанием CakePHP. Пишите в личку.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
KPOTOB
Гость





СообщениеДобавлено: 21 Ноя 2007 20:45:36    Заголовок сообщения: Ответить с цитатой Изменить/удалить это сообщение

ztalker
Behavior это способ реализовать множественное наследование - ни больше ни меньше

before* можешь перегрузить у себя в модели - а можешь сделать как behavior и пользовать во многих моделях.
чтобы просечь как оно примерно - потыкайся тут http://bakery.cakephp.org/categories/view/12

с query плохо все - там можно что угодно нагородить и колбэки там работать не будут (если конечно разбор sql не накодить для разных диалектов)
Вернуться к началу
ztalker



Зарегистрирован: 06 Ноя 2007 14:00:26
Сообщения: 26
Откуда: Новосибирск

СообщениеДобавлено: 22 Ноя 2007 10:09:59    Заголовок сообщения: Ответить с цитатой

KPOTOB
Спасибо за информацию. Буду пробовать.
Также попробую парсить запросы query. И еще вопрос, для query как сделать behavior метод?
_________________
На работу в Новосибирске требуется PHP программист, со знанием CakePHP. Пишите в личку.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
KPOTOB
Гость





СообщениеДобавлено: 22 Ноя 2007 22:01:56    Заголовок сообщения: Ответить с цитатой Изменить/удалить это сообщение Удалить сообщение

ztalker
Не заморачивайся с парсингом
Если query будет вызван кейком - то только в результате какогонибыть finaAll, save, ... - тоесть всяко после колбэков
А если ты сам query вызываешь, что и базу свичануть можеш наверное Wink
Вернуться к началу
Показать сообщения:   
Начать новую тему   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Cake-PHP.ru -> Общий Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы можете начинать темы
Вы можете отвечать на сообщения
Вы можете редактировать свои сообщения
Вы можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB

Рейтинг@Mail.ru