Войти

Показать полную графическую версию : [решено] Хранение контента


Mihahail
02-01-2012, 19:52
Попросили сделать блоговый движок для высоконагруженного сайта.
Чесноговоря никогда ещё не делал ничего подобного, в основном всё по мелочи - игровые порталы и клановые сайты, иногда даже на укозе)

Вот что придумал в связи с высоконагруженностью:
Все материалы хранить в виде текстовых файлов по папкам, а в базе данных создать такую таблицу: ID -- link -- title -- author -- date -- <some flags>
Соответственно обращаться к базе лишь за урлом материала и инклудить его.
Но самое главное, некоторый контент в базе всё-таки хранить. Этот контент - недавно добавленные материалы (то есть кагбэ кэшировать)
Сайт предусматривает схему, подобную большим блогам(например хабру): есть десяток-другой материалов, которые некоторое время активно и многими просматриваются. Их следует хранить там, откуда их можно быстро отдать клиенту. И есть давние материалы - которым больше суток, и которые я как раз собираюсь хранить в текстовом виде.
Это замедлит доступ к ним, но ведь их и просматривать будут нечасто по сравнению с остальными.

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

Sham
03-01-2012, 10:36
БД надежнее, и имеет необходимый инструментарий. Кладите контент в отдельную таблицу. Механизм кэширований мб разным, многоуровневым. Для кэширования сложных запросов, блоков, страниц - обычно используют memcache, memcached или подобные (кэш в ОЗУ), хотя для кэша можно задействовать и файловую систему, и ту же БД (отдельную таблицу для кэша), сочетание разных видов.

Mihahail
03-01-2012, 17:36
Sham, поясните, что значит надежнее?
Сброс всего старого контента на файловую систему не даст прироста производительности бд?
Я ведь хотел как:
Самые последние и читаемые страницы хранить в озу, менее читаемые - в бд, а старые(перекочевавшие у пользователя в закладки) - как файлы на диске.

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

Sham
03-01-2012, 18:19
БД надежнее в смысле оперативности обслуживания, бекапов, восстановления данных, репликаций и т.д.
а старые(перекочевавшие у пользователя в закладки) - как файлы на диске. »
Имхо тут не может быть однозначного решения. Если приоритет - размер БД, то да - лучше очищать таблицу. Но при этом, если потребуется поиск, то придется индексировать и помещать в таблицу поиска.
В принципе, для отдачи всего контента можно организовать файловый кэш в сжатом виде, независимо от актуальности. Разделять контент я бы не стал, это неудобно.
Не считаю, что оптимизированные запросы на выборку 1 строки по unique/primary-индексу сильно нагружают БД.
В общем случае можно варьировать выдачу БД/файл в зависимости от показателей загруженности. Например, по крону снимать цифры загруженности БД, системы, в зависимости от которых рулить выдачей.

Mihahail
04-01-2012, 01:18
Ох, вот о поиске как-то не подумал, нужно будет не забыть..

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

В общем случае можно варьировать выдачу БД/файл в зависимости от показателей загруженности »
Всмысле? Тоесть хранить контент и в базе и в файлах? Но это же расточительство!
Или что-то другое?

Выходит что лучше всё-таки хранить всё в бд и только кэшировать актуальное?

Sham
04-01-2012, 09:48
хранить контент и в базе и в файлах? Но это же расточительство! »
Файловый кэш может быть и в сжатом виде. В мемкеш можно класть страницы целиком, код по частям и т.д. как угодно. Кэш можно варьировать для авторизованных и обычных юзеров (для обычных можно целиком страницы кэшировать). Какие запросы и как кэшировать - дело хозяйское.

Mihahail
09-01-2012, 02:40
Не стал юзать хранение контента как файлов - всё храню в бд.
кэширования хватило)
Решено




© OSzone.net 2001-2012