Как стать автором
Обновить
0
0
Алексей Веснин @DiZeee

Пользователь

Отправить сообщение
По идее всё совсем наоборот. Если сначала налить кофе, то до момента наливания молока стакан отведёт от кофе часть тепла. А если, наоборот, сначала налить молока — отдаст молоку часть тепла (если молоко ниже комнатной температуры, например достали из холодильника) или с теплом вообще ничего не произойдёт (если молоко комнатной температуры). То есть если принять во внимание разницу во времени между наливаниями, то для минимальной потери тепла наливать нужно горячее в холодное. ;)
Уберите join-ы — и жизнь сразу станет легче ;). В сложных проектах гораздо более гибкой и долгоиграющей стратегией будет реализация связей на уровне приложения, а не базы данных. Естественно, появится небольшой оверхед на дополнительные запросы, но будет и профит в виде возможности более гибко и эффективно масштабироваться.
Выложил на github. В примере реализация с фиксированным количеством шардов, но можно сделать и создание нового шарда на каждые N новых ключей, используя тот же интерфейс.
Мы делали шардинг на Yii 1.1. CActiveRecord почти идеально подходит для этого, нужен только один костылик для подмены имени таблицы в getMetaData()->tableSchema->rawName. Я обращался с этим вопросом к SamDark, но он посчитал его «немного странным», ибо «MySQL легко работает с сотнями миллионов записей, если дать ему достаточно памяти» ;) (пруфлинк). В остальном в сущности достаточно переопределить методы tableName и getDbConnection, написать маппер для определения бд и таблицы, а так же позаботиться о том, чтобы атрибут для определения шарда присутствовал в модели при создании выборок. Плюс мы ещё делали простой итератор для выборок из всех шардов (для статистических запросов в основном) и общий автоинкремент. Могу выложить куда-нибудь, если интересно.

В Yii2 методы tableName и getDbConnection стали статичными, что осложняет использование шардинга в ActiveRecord. Но в реальности в сложных нагруженных проектах есть смысл отказаться от ActiveRecord вообще и использовать более лёгкие конструкции для работы с данными с целью повышения производительности.

PS: Хак для переопределения имени таблицы в CActiveRecord:

public function getMetaData()
{
	$md = parent::getMetaData();
	$md->tableSchema->rawName = $this->getDbConnection()->quoteTableName($this->tableName());
	return $md;
}


Да как угодно, можно вообще передавать все подряд, а можно использовать массив типа $models['first_model'] = $first_model; $models['second_model'] = $second_model; тогда

if(Yii::app()->request->isAjaxRequest)

{

$grid_name = Yii::app()->request->getParam('ajax')

$this->renderPartial($grid_name, array('model' => $models[$grid_name]));

}

else

{

$this->controller->render('index', $models);

}
проверил, работает отлично
ну зачем же сразу ифов, что мешает называть файлы с гридами в соответствии с id этих гридов, которые передаются в гет-параметре ajax?
Вообще у нас грид используется как правило в админках, где нет большого количества запросов, так что такого рода оптимизациями можно пренебречь. Но идея интересная.
А если в контроллере проверять на ajax и если он, то выдавать renderPartial('_grid'), а если нет, то render('index'), в котором уже renderPartial('_grid')?
Ух ты, действительно, а я и внимания не обратил) Вот это то, чего реально не хватало. Теперь всё совсем пучком))
> Карты Nokia для Nokia Lumia
А для N9 подобного обновления не будет? Что за дискриминация?
Придёт время, когда не будет ни газет, ни театров, ни кино ни air, ни qt, ни java, а будет одно сплошное телевидение HTML5 ;)
Скрипт отличный! Он был бы идеальным, если бы ещё мог определять фон, на котором подпись было бы не видно и вставлять туда альтернативную! Но это так, в порядке бреда ;)
Вот ещё, кстати, похожий пример habrahabr.ru/blogs/design/120079/#comment_3938483
Там подобных вопросов вообще не стоит.
Не вполне понятный способ. Например, распространённый юзкейс, когда удобно после проверки пароля скрыть его обратно чтобы он не мозолил глаза при дальнейшем заполнении формы. При этом поле подтверждения пароля очевидно будет мешать, что сводит на нет ценность такого универсального метода.
Нет, если делать замену onsubmit, после ввода всех данных.
В процессе борьбы со спамом, я остановился на замене стандартных значений name в полях формы на нестандартные при помощи JavaScript. Например <input name="email" /> меняем скриптом на <input name="g6iv5e" /> Работает безупречно.

То же, кстати, относится и открытию символов в поле ввода пароля, где можно динамически менять type с password на text и обратно вместо заморочек с дополнительным текстовым полем.
К тому же, мне кажется, что современным изданиям пора самостоятельно озаботиться о переходе в онлайн, где их уже гораздо проще и эффективнее можно индексировать.
Согласен.И хороший пример тому Google Notebook, разработка которого прекращена, но он продолжает работать и имеет свой круг пользователей, включая меня. Тут же речь идёт о нехилых ресурсах, которые, возможно, имеет смысл использовать гораздо более продуктивно.
Google вполне может себе позволить отказываться от разработки наименее успешных сервисов, направляя силы на более успешные. И правильно делает!
1

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Зарегистрирован
Активность