Добрый день. Потребовалась отдавать пользователю XML файлом.
Работаю в yii. Для удобности сделал себе несколько базовых шаблонов и наполняю их информацией.
Генерировать его решил с помощью $this->render('export_xml', array('data'=>$data));
В связи с этим возникают вопросы. render по умолчанию подгружает главный лэйаут, хочется это избежать.
Решил этот вопрос сделав себе пустой лэйаут и $this->layout = '//layouts/blank'; Но мне кажется, что есть более логичное и правильное решение, только найти его пока не могу.
И второй, самый главный вопрос. Можно ли заставить отдавать шаблон файлом?
Приложение, написанное на PHP с MySQL (Yii Framework);
Несколько типов контента, например setting и node. Хранится в разных таблицах со своим набором полей;
Около 10к пользователей приложения с очень частым обновлением одного из типов контента, допустим node. Во время редактирования node может обновляться до нескольких раз в секунду (с созданием новых ревизий). В тоже время, некоторые node могут не обновляться месяцами, а некоторые каждый день по нескольку раз.
Необходимо сделать что-то вроде системы контроля версий, чтобы синхронизировать несколько клиентских приложений с сервером. Хороший пример: расширение для браузеров Xmarks.
Вопрос заключается в том, как хранить ревизии (и изменения в них) в базе MySQL?
Мне на ум пришло такое решение:
Одна таблица, которая хранит все изменения контента. Выглядит это примерно так:
Rev – номер ревизии пользователя. В рамках одной ревизии может быть несколько записей.
Action – тип изменений. insert|update|delete.
Type – тип контента. Например, node или setting.
Id – идентификатор контента.
Args – объект json с логом изменений.
Не знаю, насколько правильно хранить ревизии таким образом, в одной таблице. Допустим, у каждого юзера будет по 5к ревизий – это уже 50 млн. записей! Как с этим будет справляться MySQL, если учесть, что идет постоянная запись в таблицу?
Как можно решить данную проблему наиболее рационально? Готов рассмотреть варианты с использованием других БД, в т.ч. NoSQL.
Большое спасибо за помощь.
UPD:
Есть вариант отказаться от возможности восстановить старые ревизии. Таким образом, можно исключить update записи и хранить только последнюю ревизию в таблице контента.
Тогда таблица сократиться в 10 раз, и в ней будет около 5 млн. записей. Насколько это упрощает задачу? Как поведет себя MySQL в таком случае?