форум vBSupport.ru > vBulletin > vBulletin 3.8.x > Вопросы по vBulletin 3.8
Register Меню vBsupport Изображения Files Manager О рекламе Today's Posts Search
  • Родная гавань
  • Блок РКН снят
  • Premoderation
  • For English speaking users
  • Каталог Фрилансеров
  • If you want to buy some product or script
  • Администраторам
VBsupport перешел с домена .ORG на родной .RU Ура! Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей

Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
for English speaking users:
You may be surprised with restriction of access to the attachments of the forum. The reason is the recent change in vbsupport.org strategy:

- users with reputation < 10 belong to "simple_users" users' group
- if your reputation > 10 then administrator (kerk, Luvilla) can decide to move you into an "improved" group, but only manually

Main idea is to increase motivation of community members to share their ideas and willingness to support to each other. You may write an article for the subject where you are good enough, you may answer questions, you may share vbulletin.com/org content with vbsupport.org users, receiving "thanks" equal your reputation points. We should not only consume, we should produce something.

- you may:
* increase your reputation (doing something useful for another members of community) and being improved
* purchase temporary access to the improved category:
10 $ for 3 months. - this group can download attachments, reputation/posts do not matter.
20 $ for 3 months. - this group can download attachments, reputation/posts do not matter + adds eliminated + Inbox capacity increased + files manager increased permissions.

Please contact kerk or Luvilla regarding payments.

Important!:
- if your reputation will become less then 0, you will be moved into "simple_users" users' group automatically.*
*for temporary groups (pre-paid for 3 months) reputation/posts do not matter.
Уважаемые пользователи!

На форуме открыт новый раздел "Каталог фрилансеров"

и отдельный раздел для платных заказов "Куплю/Закажу"

Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже:
Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота.
Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
 
 
 
 
Gostemilov
Специалист
Default Как можно кешировать собственную страницу?
0

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

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

Пример: http://photoshopia.ru/read_text.php?lib=2&lvl1=010000 - как вы понимаете, ничего из этого контента у меня на сайте нет.

Вопрос, собссно... А вот как бы это еще и кешировать, чтоб лишний раз не напрягать сервер?

Вот что-то такое подойдет? http://www.internet-technologies.ru/...ticle_286.html

Last edited by Gostemilov : 07-27-2012 at 11:16 AM.
Bot
Yandex Bot Yandex Bot is online now
 
Join Date: 05.05.2005
Реклама на форуме А что у нас тут интересного? =)
 
 
SMak044
Эксперт
 
SMak044's Avatar
Default
0

Gostemilov, Немного не понятно, что ты хочешь кэшировать?
Давай по порядку.
  1. Ты делаешь собственную страницу например с адресом tvoysayt/tvoyastranitsa.php?do=main
  2. В скрипте грабер на контент с другого ресурса
  3. При первом вызове страницы происходит парсинг внешнего ресурса
  4. Полученное содержание сохраняется в бд
  5. Во второй заход на страницу грабинг уже не происходит, а берется представление из БД

Соответственно что грабинг и сохранение происходит для этого скрипта с каждым уникальным набором параметров url

На сколько я понимаю, что ты хочешь сделать например бб код толкового словаря но не на внешний ресурс, а на свой например tvoysayt/tvoyastranitsa.php?do=dict&words=твои+искомые+слова
При первом переходе, будет происходить поиск во внешнем ресурсе и выводиться у тебя. Результат будет сохранен в бд и когда второй раз будет переход по такой же ссылке, то результат будет выведен без парсинга.

Если это то что ты хочешь, то это не сложно ты должен сделать несколько вещей
  1. Создать в бд таблицу с индексом в виде md5 хэша твоего запроса, полем longtext для хранения содержания, полем lastupdate для хранения времени последнего обновления
  2. При исполнении скрипта твоей страницы тебе необходимо составить массив значений md5 хэша, перевести текущий запрос в md5 хэш и проверить наличие в бд сохраненных представлений
  3. Если представление есть и оно не позже некой гипотетической даты устаревания, то делается запрос на выборку по md5 хэш и выводится на странице
  4. Если данные устарели или отсутствуют в бд то они парсятся и вносятся в бд с помощью REPLACE (это и инсерт и упдейт одновременно)

В общем то это все.

Если ты имел ввиду что то другое, то расскажи.
 
 
Gostemilov
Специалист
Default
0

При парсинге данных с другого ресурса БД не используется вообще и данные в нее не заносятся.

То есть нужно кешировать HTML-страницу целиком.

PHP Code:
           //Забираем контент страницы
            
$imported_content=file_get_contents("http://".$library."/b/".$page_num."/read");

            
//Отрезаем хедер
            
$imported_content=preg_replace("'<!DOCTYPE[^>]*?>.*?<body[^>]*?>'si","",$imported_content);

           
дальнейшая очистка контента
И после этого $imported_content банально выводится на странице. Нет использования БД, но есть HTML страница которую хотелось бы закешировать с целью снижения входящего траффика и нагрузки на сервер. Я ж говорил, все просто до не могу
 
 
SMak044
Эксперт
 
SMak044's Avatar
Default
0

Quote:
Originally Posted by Gostemilov View Post
И после этого $imported_content банально выводится на странице. Нет использования БД, но есть HTML страница которую хотелось бы закешировать с целью снижения входящего траффика и нагрузки на сервер. Я ж говорил, все просто до не могу
И на долго ты будешь кэшировать этот конкретный объект... Любой новый пользователь зашедьший на эту же страницу, должен будет получить свою версию страницы, а это значит, что должен быть выполнен парсинг. При этом браузер у пользователя сам кэширует содержание, зачем тебе туда влазить...

У нас не понимание в определении термина кэширование. Вот скажи мне пожалуйста как сформированная страница в одной сессии первого пользования, может попасть без использования бд в сессию другого пользователя... Лично я такого способа не знаю, хотя я и не последняя инстанция.

В общем без бд тут не обойдешься, даже в самой булке сообщения прошедьшие парсинг бб кодов хранятся в отдельной таблице в явном виде (уже в html)? что бы не парсить бб коды каждый раз.
 
 
Gostemilov
Специалист
Default
0

Нет, ну смотри - содержание страниц статично и не меняется годами. То есть смысл по 1000 раз на дню тянуть один и тот же контент отстутствует. Я не случайно упомянул, что речь идет о словарях и энциклопедиях, а не о динамическом контенте. Нет, загнать это все в базу можно, но зачем? Не проще как-то сохранить как HTML (или в подобном виде) и при повторном запросе тупо обрабатывать в 1 обращение апача? Я так думаю, мне так кажется...
 
 
kerk
k0t
 
kerk's Avatar
Default
0

Quote:
Originally Posted by Gostemilov View Post
Не проще как-то сохранить как HTML (или в подобном виде)
проще конечно, можно сохранять страницу как файл
но в этом случае придется каждый разобращаться к файловой системе
сама страница, где выводятся данные, динамическая же, так?
при запросе какого то контента, в ссылке передаются аргументы, что именно нужно, вот и передавать в аргументе, какое то значение, которое и будет определять сохраненную страницу
в своем скрипте естессно сначала опрашивать ФС, а есть ли уже копия, сохраненная у нас?
и если нет, то парсить удаленную страницу
 
 
SMak044
Эксперт
 
SMak044's Avatar
Default
0

Quote:
Originally Posted by Gostemilov View Post
Нет, ну смотри - содержание страниц статично и не меняется годами. То есть смысл по 1000 раз на дню тянуть один и тот же контент отстутствует. Я не случайно упомянул, что речь идет о словарях и энциклопедиях, а не о динамическом контенте. Нет, загнать это все в базу можно, но зачем? Не проще как-то сохранить как HTML (или в подобном виде) и при повторном запросе тупо обрабатывать в 1 обращение апача? Я так думаю, мне так кажется...
то есть в момент создания своего собственного представления после парсинга, ты хочешь создавать на диске файл....
То есть если я в поиске слова вобью "взбрыкнуть", то по идее у тебя на диске должен создаться файл взбрыкнуть.html именно в кириллице и таких файлов у тебя через пол года будет пару тысяч в одном каталоге, а то и больше.... потому что есть еще и словосочетания и фразы и ошибки поиска...

Ну конечно можно и транслит прикрутить, что бы не кириллица... но вот что делать со словом пост и post.... транслит не подойдет... конечно можно таки переводить в md5 и хранить файлы типа md5hash.html но тогда тебе надо все же будет проводить какие то операции с получением md5 хэша, а это не одно обращение к апачу.

С другой стороны 1 запрос к бд на выборку по тому же md5 хешу запроса или выдаст тебе готовый html код или нет и тогда будет сделан запрос на внешний ресурс и значение будет сохранено. если результатов не будет, то ты не будешь выводить пользователю страницу с ошибкой, а можешь использовать и другой внешний ресурс или поставить свою заглушку.

Заметь, что запрос будет на выборку по уникальной записи md5 хэша, то есть скорость выполнения такого запроса будет очень мала и объем данных будет очень маленьким...
Хотя конечно можно сделать все через файлы но мне почему то всегда казалось, что работа через файлы занимает больше времени и больше ресурсов.
 
 
Gostemilov
Специалист
Default
0

А при чем тут вообще поиск? Я еще раз внимательно посмотрел и никакого поиска кроме штатного по сатй у себя не обнаружил. Это контент для СЕО, в общем-то, и не более того. А вот теперь представьте себе размер базы, если я в нее положу с десяток (это если по скромному) энкцилопедий и пару словарей по 500К значений каждый. И еще Либрусек впридачу (кстати, импорт контента с Либрусека я прикрутил) И что будет? Терабайт? Тут ужен нужны решения с распределенными кластерами БД, а я человек скромный и делаю тоже по-скромному

Вот и выходит, что это filecache или вообще ничего

Gostemilov добавил 27.07.2012 в 16:47
Quote:
проще конечно, можно сохранять страницу как файл
но в этом случае придется каждый разобращаться к файловой системе
сама страница, где выводятся данные, динамическая же, так?
при запросе какого то контента, в ссылке передаются аргументы, что именно нужно, вот и передавать в аргументе, какое то значение, которое и будет определять сохраненную страницу
в своем скрипте естессно сначала опрашивать ФС, а есть ли уже копия, сохраненная у нас?
и если нет, то парсить удаленную страницу
- именно так. А поскольку я, как известно, никогда не кладу все файлы в одну корзину - еще и структурировать по системе каталогов, то есть в одном каталоге файлы, относящиеся к одному ресурсу (или, если их ну очень много - еще какое-то деление) и т.д. И не будет бешеной нагрузки на ФС при опросе - есть ли это имя файла среди стопицоттыщ подобных

Last edited by Gostemilov : 07-27-2012 at 05:47 PM. Reason: Добавлено сообщение
 
 
SMak044
Эксперт
 
SMak044's Avatar
Default
0

Gostemilov, Ну тут можно объединить 2 метода... Дума так будет правильнее всего.
  1. Мы все же делаем табличку в бд например mylib и делаем там такие поля
    md5hash(VCH255), nativequery(VCH255), libname(VCH255), lastupdate(INT11)
  2. Делаем каталоги для библиотек
  3. При получении запроса делаем запрос к БД. Если есть берем каталог нужной библиотеки и забираем там файл с именем md5hash. Если такого файла нет, то парсим содержание и сохраняем результат под именем md5hash нашего запроса и заносим запись в БД.

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

Так думаю скрипт будет работать быстрее всего и нагрузка будет наиболее маленькая.
 
 
Gostemilov
Специалист
Default
0

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

Tags
граббер, кеш, кеширование, контент


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off




All times are GMT +4. The time now is 05:14 PM.


Powered by vBulletin® Version 3.7.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.