edogs software

edogs software
Рейтинг
775
Регистрация
15.12.2005
Должность
Программирование
humbert:
Последние книги кеширую.

Случаные книги не жрут ресурса, проверил. Там идет выборка по случайным ID: берем максимальный ID книг и выбираем случайно штук 100 ID, тупо в цикле с помощью mt_rand(1, maxID). Потом убираю дубли ID и вывожу штук 10 книг из этого массива.

Жрет ресурс выборка списка книг по жанрам, при одновременном использовании сортировки


Select name_book, f.id_book, opis_book, year_book From books b, rurbric_book rb where rb.id_book=f.id_book and id_rubric=10 order by year_book DESC Limit 10,10


Индекс в таблице books на year_book стоит, в таблице rubric_book на id_book

Если убрать order by, то нормально работает, быстро

Какой-то странный у Вас запрос, где, например, таблица для которой альяс f прописан?

В остальном - попробуйте не на декартовом произведении делать, а на left join-ах, будет быстрее, т.к. меньше данных будет ворошиться изначально. Учитывая Ваш странный запрос прямой пример привести трудно, но если синтетику, то допустим

select books.book_name from category_book left join books on books.id_book=category_book.id_book where category_book.id_category=10 order by books.year_book limit 0,10

humbert:
Проблема в том, что на странице со списком книг по жанрам выводятся разные блоки: последние добавленные книги, случайные книги. Все это напрягает БД и сервер. Если бы трафа было мало, то и пофиг, но траф идет хороший.

Общее время генерации страницы 0.25-0.5 секунд, что очень много, я считаю

0.25-0.5 время генерации страницы это ни о чем не говорящие цифры. Из 0.25 секунды 0.15 может уходить на коннект к БД и еще 0.9 на пхп код, а на запросы к БД допустим 0.01 секунды. Тогда ускорять выборки из БД - ну совсем бессмысленное дело.

Меряйте само время выполнения запросов. Если будет маленькое - то БД вообще не при чем. Если будет большое - показывайте структуру таблиц с индексами и сами запросы со временем их выполнения, а так же explain обязательно сделайте.

От способа построения запросов тоже много зависит, например, если Вам надо выбирать книги какого-то жанра, то в 90% случаев выгоднее будет начать с таблицы жанров, а если надо выбирать просто последние книги прицепляя к ним жанр для информации - разумнее начать с таблицы книг.

Что касается "разных блоков", дык "последние добавленные" это прямой кандидат на кэширование - даже тупо в файл. И вообще очень многие блоки прямые кандидаты на кэширование и вывод без затрагивания базы данных. Это без вопросов надо использовать.

"Случайные" же книги при большом количестве книг в базе и выборке вида order by rand() - может быть запросов сжирающим 99% времени по отношению к остальным, т.к. такой запрос перетряхивает всю базу... случайные книги надо очень вдумчиво выбирать, если выбираете тем способом который мы предположили - переделывайте.

Попробуйте так же ту структуру которую мы предложили, она во многих случаях легче чем та, что у Вас сейчас, ввиду того, что меньше таблиц которые джоинятся. Нормализация БД имеет свой разумный предел.

humbert:
Решил заново учиться, надо придумать хорошую структуру БД для каталога книг.
Вот необходимые поля:
Название
Год написания
Краткое содержание
Автор (множество)
Жанр (множество)
Издательство (множество)

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


Пока придумал такие таблицы



Но при выдаче данных, например, по жанрам, надо будет как минимум 2 таблицы объединять в SQL запросе, а если еще и сортировку по названию использовать, то будет достаточно большая задержка в выполнении. Трафа будет много, от 50.000 уников в сутки, сервак вешается уже с такой структурой БД.

Если повесить индексы, то такая структура вполне бодро работает. Откуда инфа про большую задержку?

Плюс определённый смысл имеет структура типа key-value-type, т.е. одна таблица это у Вас книги, вторая таблица сшивает книги-свойства, третья таблица свойства (ID, значение, тип - например 1, драма, жанр; 2, толстой, автор и т.д.), что позволяет уменьшить общее количество таблиц объединяемых для выборки.

andr0s:
Ситуация: есть PHP скрипт, зашифрованный ZEND'ом, купленный не так давно. Автор уверял и божился, что скрипт неломаемый в принципе. Но недавно я прогнал его через сканер уязвимостей, нашлась якобы sql injection. Написал автору, тот клятвенно утверждает, что уязвимости нет. Я на PHP уже ничего тыщу лет не писал, тем более без фреймворков, поэтому сам не могу понять, что это такое и опасно это или нет. Гуру PHP, подскажите, что это такое?

Того эффекта что Вы показали - быть не должно в любом случае. Это ошибки допущенные программистом. Достаточно ли они серьезны что бы привести к взлому - бабушка надвое сказала, как повезет. Но если купили скрипт недавно, то как минимум нормой поведения для программиста будет - исправить их бесплатно. В крайнем случае dezender Вам в руки и какой-нибудь другой программист, zend вполне себе раскодируется.

Евген:
нельзя! это тешить ЧСВ!!!!

Согласно Вашей теории - только в том случае, если помогаешь старушке перейти через улицу. С настоящей помощью, которой согласно Вам является стояние с плакатом и выкладывание на йотуб видео про это, это не сравнимо.

Мы все еще надеемся что Вы так уныло троллите, но чета уже сомневаемся, так что откланяемся в этом топике.

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

Plastilin:
Та вы всё никак не поймёте - собрались бездельники, тунеядцы и им сочувствующие, но тут появляются лучи света в тёмном царстве - ссалекс и едогс. Так бездельники прилипли к экранам и ждут рассказов про реальну работу, про помощь пенсионерам и подъём отечественной промышленности, нужны жизненные примеры, понимаете?

Бездельники, тунеядцы и им сочувствующие могут взять руки в ноги и вместо выслушивания рассказов - пойти сделать так, что бы рассказывали о них.

Plastilin:
У нас понимаете ли демократия и всё такое, даём презумпцию невиновности, готовы верить человеку на слово, только хотим послушать, как это делается, ведь у самих опыта же нет.

Опыт это то, что не приобретается прочтением чужих историй, знаете ли. А если кому-то уж очень не терпится почитать обязательно, здесь же вроде сео форум - гугл Вам в руки, в чем проблема-то?

Евген:
Евген - чай горячий как борщ.
Едогсы - чай и есть борщ.
аут :D

Более точно так

Евген - чай горячий как борщ.

Едогсы - да, значит и тем и тем можно обжечься.

Евген - Вы че офигели, я же КАК написал, значит чаем обжечься нельзя, пусть он даже и горячий!

аут 😂

Plastilin:
Да, это любопытно, не найду фактов! Может и перевезли игрушку бабушки через дорогу, но фактов нет, тут вы правы. Вижу только ящик понтов про взрослость.

Видеть понты - это опять же, исключительно Ваш выбор точки зрения на наши слова.

Евген:
ну правильно. КАК. читать учитесь. это сравнение.

Посмотрите в словарике что такое "сравнение", поймите что наш ответ на Вашу фразу был корректен, успокойтесь 😂 Если к утру справитесь - будет хорошо. Hint: Вы сравнили - значит считаете это сравнимыми вещами.

Евген:
ранее в столь жырном троллинге замечены не были. ответ отрицательный.

А может нам его просто раньше не заказывали 😂

Евген:
я и не говорил, что они кому то помогают.

Нуну.

"А в роиисси помочь человеку - это примерно как в метро в плакатиком стоять." (с) Евген

Евген:
какое борцевание? вы ничего не попутали?

Нет, не попутали. Внимательно читайте весь контекст, а не выдергивайте отдельные фразы.

Plastilin:
Нее, мне как раз интересно, есть подозрение, что среди сурьёзных людей помогающих собрать бабушкам игрушки через дорогу, вас не окажется.

Подозрения, трактовки, фантазии. Любопытные у нас оппоненты. Найдете факты и цитаты - вернемся к разговору 😂

Евген:
. Едогсы уже высказались по этому поводу.
А в роиисси помочь человеку - это примерно как в метро в плакатиком стоять.

Да, уже высказались. Но повторимся.

Стоять с плакатиком - это удовлетворять своё ЧСВ, а не помочь человеку. Выдавать своё стояние с плакатиком за помощь человеку - это лицемерие и ханжество. Выкладывать на йотуб с гордостью свое борцевание с кем-то там - это просто тупой пиар.

Помогать людям это совсем другое, но по ходу дела объяснить это вам невозможно.

Unlock:
А выглядит именно так.

А это проблема Вашей точки зрения, не более того. Если смотреть на мир "ах все всех ненавидят", то даже в безобидном указании на факты, можно найти страшный заговор и неистребимую ненависть и гордо заявить что мол "выглядит именно так" (с) А нам плевать как оно выглядит, потому что важно не то как оно выглядит, а чем является.

Unlock:
Если Вас эти люди никак не задевают, что же Вас так беспокоит, что их упаковать не смогли обоснованно?

Не беспокоит. Опять же фантазируете.

Unlock:
Да и вообще весь смысле ваших слов сводится к тому, что какие то мудаки стоят в метро и прямо всем мешают. И не надо говорить, что Вы этого не писал, это читается именно так.

С Вашей точки зрения сводится. Мы действительно того, что Вы нам приписываете, не писали - именно поэтому Вы и не можете привести ни одной нашей цитаты в защиту той х*ни что нам приписали.

И то что именно Вами (и еще парой людей) это именно так читается - так Вам наверное о себе лучше задуматься, почему Вы выбираете такую точку зрения на слова оппонента. При чем настолько безапелляционно и однозначно выбираете, что даже отсутствие фактов подтверждающих Вашу точку зрения Вас не беспокоит 😂

Miha Kuzmin (KMY):
Мне одному видиться, что покусанное гринвудом чмо слилось уныло? 😂

Для тех кому лениво читать много сообщений, краткое изложение


Miha Kuzmin (KMY): edogs считают что пацанов с плакатом надо было сослать на каторгу на долгие лета.
edogs: мы такого не говорили, можете подтвердить?
Miha Kuzmin (KMY): подтвердить не могу, я за свои слова не отвечаю, но раз Вы не защищаете точку зрения которую я Вам приписал, то значит Вы уныло слились

Ну пусть так 😂

Всего: 12159