[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Принцип использования классов
NierRa
Прочитал много флеймовых тем про ООП. Для себя сделал определенные выводы и вот встал вопрос.
На ООП переходить я не собираюсь, аргументы Twin`а для меня показались убедительнее, чем доводы его оппонентов. Однако решил добавить в свой "аресанал программиста" использования классов и хочу с вами посоветоваться вот по какому поводу.
Вот сейчас у меня в БД есть десяток таблиц и содержание нескольких вполне подходит для классификации. В данный момент я посылаю запрос в БД, обрабатываю полученную информацию с помощью mysql_fetch_assoc и далее работаю с массивом. Нужно в другом месте вытащить что-то опят с этой таблицы - снова обращаюсь к БД
Понимаю, что если буду использовать классы то мне нужно будет определить все переменные и в конструкторе присвоить им соответствующие значения с БД и затем, уже, работать с этими переменными. А это значит, что я получаю доступ к данным быстрее. Т.е всего навсего нужно создать экземпляр класса.
Вот в чем вопрос - насколько это правильно? Или мне нужно использовать не конструктор, а написать метод, который будет вытягивать только те значения, которые мне нужны в данный момент?
Если у меня в таблице около 50-70 полей вытягивается как это отразится на производительности?
Если вопрос не ясен я приведу листинг и поясню еще раз



Спустя 37 минут, 57 секунд (22.09.2012 - 09:37) Michael написал(а):
ну если ты за одними и теми же неизмененными данными бегаешь в БД по несколько раз, то понятно что это не хорошо. И ООП/неООП тут не при чем.

Спустя 12 минут, 22 секунды (22.09.2012 - 09:49) NierRa написал(а):
Что затратнее?
1. Присвоить свойствам класса в конструкторе все соответствующие данные с БД
или
2. Обращаться к БД непосредственно тогда, когда данные требуются

Действий с данными производится много, т.е запросы в БД частые

Спустя 1 минута, 37 секунд (22.09.2012 - 09:51) Michael написал(а):
данные надо брать тогда когда они потребуются и дальше хранить их в кеше.

Спустя 5 минут, 46 секунд (22.09.2012 - 09:56) NierRa написал(а):
Я пока далек от темы кеширования. Это с использованием сессий?

Спустя 25 минут, 20 секунд (22.09.2012 - 10:22) Michael написал(а):
нет, я пока говорил об уровне выполнении скрипта, от запуска до отдачи html-а.
для примера вот функция theme: _http://api.drupal.org/api/drupal/includes!theme.inc/function/theme/6
Ей оформляются куча элементов. А реестр из базы загружается один раз тут:
static $hooks = NULL;
if (!isset($hooks)) {
init_theme();
$hooks = theme_get_registry();
}

а в остальных случаях берется из static $hooks.

Спустя 3 минуты, 54 секунды (22.09.2012 - 10:26) GET написал(а):
NierRa

Цитата
Я пока далек от темы кеширования. Это с использованием сессий?


Это связано с принципами нормализации БД и хранением инфы в маленьких кэш файлах (описывающих запрос понятным юзеру языком на экране его браузера).

Нужно чтоб БД лишний раз не дергать, а дергать только, когда это нужно, например отсортировать что-то или создать тот самый кэш-файлик.

Спустя 2 часа, 53 минуты, 4 секунды (22.09.2012 - 13:19) neadekvat написал(а):
Цитата (A.B.C. @ 22.09.2012 - 11:26)
Это связано с принципами нормализации БД

Вот конкретно с нормализацией как связано кэширование, интересно?

Цитата (A.B.C. @ 22.09.2012 - 11:26)
Нужно чтоб БД лишний раз не дергать, а дергать только, когда это нужно, например отсортировать что-то или создать тот самый кэш-файлик.

Я не понимаю, почему считается, что дергать файлы всегда быстрее и выгоднее? Приведите тесты, пожалуйста.

Спустя 19 минут, 20 секунд (22.09.2012 - 13:38) GET написал(а):
neadekvat

Объясняю...

1. Когда БД спроектирована грамотно, чтобы добраться например до полной характеристики, скажем товара надо зайти в 10 таблиц и вытащить значения id.

Даже если некоторые запросы удастся объединить, то все равно это будет "ненужной" нагрузкой на БД, когда можно все взять с уже готового кэш файла.

2. По поводу тестов: Конечно от каждого проекта конкретного зависит, но на тех проектах где встречаются сложные и громоздкие сортровки, даже если таблицы более-менее проиндексированы по мне дак удобнее использовать кэш.

Спустя 9 минут, 28 секунд (22.09.2012 - 13:47) neadekvat написал(а):
Цитата (A.B.C. @ 22.09.2012 - 14:38)
скажем товара надо зайти в 10 таблиц и вытащить значения id.

Существует понятие денормализации. Порой полезно применять.

Цитата (A.B.C. @ 22.09.2012 - 14:38)
по мне дак удобнее использовать кэш

А в чем именно удобство? Вот я если кэш пишу, то мне все равно приходится пилить код и для бд, и для кэша.

Спустя 1 минута, 38 секунд (22.09.2012 - 13:49) inpost написал(а):
neadekvat
Я проводил, выходит быстрее даже, чем популярный memcache и даже на форуме писал. Есть другой кеш в памяти, который оказался по производительности быстрее мемкеша и равный даже файловому, и этот "кеш" собираются добавить в php6, чему я безусловно рад! smile.gif Кроме этого фейсбук именно его и использует (правда ещё и мемкеш, но в других приложениях).

NierRa
От того, как ты напишешь пхп скрипт, скорость выполнения запросов к БД будет неизменной. Классы нужны для структурирования операций, ООП - для разделения прав на эти операции. Но на производительность это влиять не будет! Только на твоё личное восприятие и удобство кода.

Спустя 1 минута, 57 секунд (22.09.2012 - 13:51) neadekvat написал(а):
inpost, обращаться к файловой системе оказалось быстрее, чем обращаться к памяти? Что-то не так с этим миром.

Спустя 2 минуты, 1 секунда (22.09.2012 - 13:53) GET написал(а):
neadekvat

Но пиля код для кэша ты достаешь, готовые значения id, а не сами id, как в БД. Если кэш представляет собой 10 слов, а вес этого файла 40-50 байт и на соседней странице юзеры насилуют запросами БД, может целесообразнее поберечь для нее ресурсы, а загрузить 50 байтовый файлик?

Спустя 14 минут, 28 секунд (22.09.2012 - 14:07) inpost написал(а):
neadekvat
Дело в том, что файловая система использует свой алгоритм кеша, по крайней мере так сказал Киллер, поэтому тестирования на 30 файлах дало такие результаты. Возможно если бы было файлов овер 9000, то результат мог бы быть иным, но я не обладаю таким проектом, чтобы проверить на нём.
И в целом, он лучше реализован, чем сторонний "мем-кеш сервер". К нему коннектиться надо, потом добавлять данные... вот и беда отсюда. Возможно на других языках программирования более качественно сделан коннект к мем-кеш серверу, чем в ПХП, но это могут быть лишь догадки мои.

Спустя 2 минуты, 46 секунд (22.09.2012 - 14:10) GET написал(а):
inpost

А если использовать в названиях файлов md5 и хранить их типа

ab/2d/ab2d444341434adad333ff3.php?

Спустя 37 минут, 34 секунды (22.09.2012 - 14:48) Guest написал(а):
Цитата
Дело в том, что файловая система использует свой алгоритм кеша

Файловая система всегда считалась ооочень затратной операцией, с ОП тягаться нет смысла. Просто memcache так же использует свои алгоритмы, которые и тормозят.
Для сравнение с чистым файловым кэшированием стоит сравнивать чистое ОП кэширование, хотя бы да же на демоне. Тогда результаты будут адекватными.

Спустя 1 минута, 35 секунд (22.09.2012 - 14:49) Guest написал(а):
Цитата
А если использовать в названиях файлов md5 и хранить их типа
ab/2d/ab2d444341434adad333ff3.php?

Массивы smile.gif

Спустя 47 секунд (22.09.2012 - 14:50) GET написал(а):
Guest

Что значит массивы?

Спустя 1 минута, 20 секунд (22.09.2012 - 14:52) Guest написал(а):
Если есть возможность демона, можно сделать самому кэширование хотя бы на паттерне Unit of Work

Спустя 37 секунд (22.09.2012 - 14:52) Guest написал(а):
Цитата
Что значит массивы?

В php файлах хранить данные в массивах.

Спустя 1 минута, 17 секунд (22.09.2012 - 14:53) GET написал(а):
Guest
когда строк 5-10 почему бы не хранить?

Спустя 1 минута, 16 секунд (22.09.2012 - 14:55) inpost написал(а):
Guest
Ты верно говоришь, я выше указал, что популярный memcache - туфта для ПХП, есть более адекватные способы кешировать данные в памяти, о чём так же выше указал, что фейс-бук именно им и пользуется (Альтернативным). Я не про хранение данных в кеше говорил, а конкретно личное не уважение к мемкешу как к неудачной реализации. Проверял так же Radis, ещё медленнее.

Ну а про md5 и название файлов - я не понял ничего smile.gif

Спустя 5 минут, 9 секунд (22.09.2012 - 15:00) Guest написал(а):
Цитата
A.B.C.
когда строк 5-10 почему бы не хранить?

Так и я о том же smile.gif

inpost
А понял. Я то же думаю все эти универсальные кэши как шаблонизаторы с компиляторами типа Smarty, и если их ещё переносят на отдельные удалённые сервера вообще нивелируется по полной.

Спустя 1 минута, 42 секунды (22.09.2012 - 15:02) Guest написал(а):
Хотя те же сессии могут быть кэшами, они ведь то же на файлах, только десериализация занимает ещё время.

Спустя 29 секунд (22.09.2012 - 15:02) killer8080 написал(а):
Цитата (neadekvat @ 22.09.2012 - 13:51)
inpost, обращаться к файловой системе оказалось быстрее, чем обращаться к памяти? Что-то не так с этим миром.

PHP же не обращается к жесткому диску напрямую, запросы к ФС идут через api операционки. на уровне драйверов фс то же есть кеширование. Тут конечно все будет зависеть от ОС, и самих драйверов, на разных системах результаты могут отличаться, но сам факт выигрыша в быстродействии, который получил инпост, в своих тестах, на это указывает.

Спустя 1 минута, 53 секунды (22.09.2012 - 15:04) killer8080 написал(а):
Цитата (Guest @ 22.09.2012 - 15:02)
Хотя те же сессии могут быть кэшами, они ведь то же на файлах, только десериализация занимает ещё время.

Файлы сессий не хранятся долго. wink.gif

Спустя 4 минуты, 33 секунды (22.09.2012 - 15:08) vital написал(а):
Цитата (neadekvat @ 22.09.2012 - 12:51)
inpost, обращаться к файловой системе оказалось быстрее, чем обращаться к памяти? Что-то не так с этим миром.

Я ему тоже об этом говорил, что его тест отстой. Меня даже тогда забанили в том треде емнип)

Спустя 2 минуты, 48 секунд (22.09.2012 - 15:11) killer8080 написал(а):
Цитата (vital @ 22.09.2012 - 15:08)
Я ему тоже об этом говорил, что его тест отстой.

Ты видел исходники тест кода? Или просто, этого не может быть, потому что не может быть smile.gif

Спустя 5 минут, 25 секунд (22.09.2012 - 15:17) inpost написал(а):
killer8080
Ничего не видел, ему принципиально было назвать меня оскорбительными фразами. Ведь в соседней теме на тот момент я дважды указал на то, что говорит глупости он (в разных темах), вот злоба и проявилась. "Я не прав? Сам ты не прав! Найду первую твою тему и скажу, что ты не прав! Из принципа, ты же можешь меня назвать неправым".

Спустя 13 минут, 1 секунда (22.09.2012 - 15:30) vital написал(а):
Цитата (inpost @ 22.09.2012 - 14:17)
killer8080
Ничего не видел, ему принципиально было назвать меня оскорбительными фразами. Ведь в соседней теме на тот момент я дважды указал на то, что говорит глупости он (в разных темах), вот злоба и проявилась. "Я не прав? Сам ты не прав! Найду первую твою тему и скажу, что ты не прав! Из принципа, ты же можешь меня назвать неправым".

*** и не придумывай.

 ! 

М
Опять оскорбления?!
inpost


Цитата
Ты видел исходники тест кода? Или просто, этого не может быть, потому что не может быть

Не, не помню исходников. Но суть в том, что те резалты теста так или иначе 99% строго специфичны для его машины. И вряд ли повторятся на другом компьютере. Проверить даже было бы интересно. Неужели весь мир не прав?

Спустя 7 минут, 59 секунд (22.09.2012 - 15:38) inpost написал(а):
vital
Опять вранье! Ты не видел исходников, а так же не знаешь, на скольких машинах я делал проверку. Ты выдумал для себя цифру "1". Вот и всё.

Спустя 1 день, 17 часов, 42 минуты, 37 секунд (24.09.2012 - 09:20) Dezigo написал(а):
Я Вам советую попробывать
http://docs.doctrine-project.org/en/latest...ng-started.html


_____________
Задача на корректную обработку данных (мое решение)
http://eu.battle.net/sc2/ru/profile/2212951/1/IIIIIIIIIIII/
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.