proksey-net

Рейтинг
103
Регистрация
22.08.2012
Ayavryk:
М.б. подразумевается CMF?

Вот кстати интересная вещь. http://dvelum.ru/ По сути управляет чем угодно - что в него положишь, тем и управляет. Заточен как раз для создания админок, а заодно и структуры данных

да, действительно интересно:) спасибо за ссылку

edogs:
Если Вы делаете приложение, которое должно быстро работать и хорошо масштабироваться, то его цели будут напрямую влиять на архитектуру и на реализацию каждого конкретного запроса и тут уже абстрактным ORM, которое "как-то" оформит запросы в базу не обойдетесь. Каждую группу запросов, если не каждый запрос, Вам придется оформлять по индивидуальной схеме, в ряде случаев руководствуясь не только теорией о скорости, но и практическими тестами. Вспомните, например, для чего делают денормализацию БД - а ведь это самые первые полшага на этом пути.

Большинство проектов в Интернете простые и низконагруженные. А для сложных проектов, мне кажется, лучше делать индивидуальный фреймворк (если миллионная посещаемость).

Content-pro:
Это к любой сфере можно отнести, все фильмы уже отсняты, вся музыка записана, но постоянно появляется что новое, чуток не похожее на старое и которое всем нравиться)

и точно так же популярных фреймворков несколько, а не один. Т.е. у каждого свой вкус, а значит и любой новый фреймворк найдет своих поклонников:)

edogs:
Одна из причин то, что count(*) более универсален, чем sql_calc. Вторая несомненно в том, что sql_calc мало кто знает:)

Однако теоретическое объяснение шустрости в принципе на поверхности.
sql_calc перебирает всю таблицу (точнее ее остатки), что бы посчитать количество записей.
В то время как count(*), при условии наличия индекса, в таблицу не полезет, он возьмет все данные непосредственно из индекса, что даст хороший результат по скорости.

SQL_CALC у меня включен опционально, можно не использовать, а в некоторых случаях он быстрее.

Также я нигде не встречал INSERT DELAYED, а это крайне полезно для логов и статистики. Многие используют две таблицы - одну в MEMORY, другую на диске, потом по Крону одна копируется в другую и т.д. При этом никто не использует простые решения.

Для отношений Has Many, Belongs To и других используются несколько SELECT, хотя в некоторых случаях INNER JOIN в разы быстрее.

Я прихожу к выводу, что уже забывают про понятие оптимизации и стремятся максимально все абстрагировать, чтобы создать идеальный MVC-фреймворк. Потом пытаются ускорить неоптимизированный движок кэшированием. А проще сразу создавать правильные запросы.

Оптимизайка:
Кому сейчас нужен framework где mysql гвоздями прибит? Драйвер БД должен быть отвязан от БД, особенно если у вас ORM, чтобы могли использовать другие БД, ту же mongodb например ;)

А чем вас к примеру laravel не устраивает как фреймворк?

Устраивает, просто основные элементы популярных типов сайта (типа блоги), такие как пагинация и т.д. я делаю сразу в ядре, чтобы каждый раз не писать кучу кода. Вы, может, заметили, что SQL_CALC_FOUND_ROWS, например, используются очень редко. Вместо этого отправляется запрос COUNT(*), потом выборка. Также редко используются INNER JOIN при связях таблиц.

Stek:
Кто бы хотя бы маленький и легкий ORM написал, без тонны зависимостей, генерируемых файлов и т.п. Желательно через PDO.

у меня ORM привязана к фреймворку - трейты и т.д. А mysqli уже не котируется?:)

Оптимизайка:
Тогда непонятна фраза в первом сообщении:


зачем?


<?php

class UserBuilder {
public function where($where) {
$this->where .= $this->where ? " AND $where " : " $where ";
return $this;
}
public function get() {
return new User($this->where . ' LIMIT 1');
}
private $where;
}

class User {
public function __construct($sql) {
$this->sql = $sql;
}
public static function where($where) {
$builder = new UserBuilder();
$builder->where($where);
return $builder;
}
public function show() {
echo "SELECT * FROM user WHERE {$this->sql}";
}
private $sql;
}

$user = User::where("active = 1")->where("dumb = 0")->where("admin = 0")->get();
$user->show();

спасибо!

я правда решил эту проблему с помощью трейтов и без функций-оберток:)

Оптимизайка:
А что возвращает метод where? Экземпляр User, наверное? Т.е. это паттерн builder, который отвечает за создание объекта (порождающий), get_instance там не нужен, всё верно. Если условий несколько, то второй where наверное будет всё же через "->" в этих некоторых фреймворках.

да, возвращает экземпляр User (return $this).

я как раз про то и говорю, что первый where вызывается через ::, а второй - через ->. Очень удобно, но это нужно реализовывать :)

Оптимизайка:
Чем сложнее object->method() чем class::method() не понимаю.

Так сделано в некоторых фреймворках:


User::where(1)

вместо


User::get_instance()->where(1)
Оптимизайка:
Смотря для чего.

Для упрощения вызова методов.

Попробуйте проверять не по условию

value=="Отобразить"
а по видимости блока.
Всего: 555