[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Данные для статистики
maximka787
Друзья, если тема кому интересна, объясните, как лучше реализовать вывод статистических данных на главной странице для очень посещяемой системы.
Например часто на сайтах можно увидеть данные: на уже 50.000.000 или количество зарегистрированных юзеров 600.000, в фото 300.000 и тд.

Я не вижу необходимости пересчитывать скриптом( select count from users...). Можно ли как то по другому сделать? чтобы данные записывали в xml или как нибудь ещё? Хостинг (виртуальный) и так нагружен обработкой запросов стандартных, зачем лишний раз его напрягать этим, тем более что главная страница чаще всего посещается, и часто без необходимости smile.gif



Спустя 8 минут, 21 секунда (30.08.2010 - 16:26) ApuktaChehov написал(а):
К примеру, при регистрации нового юзера, можно писать в файл кол-во юзеров. А потом читать из него. Ну, как вариант.

Спустя 3 минуты, 29 секунд (30.08.2010 - 16:30) maximka787 написал(а):
В обычный файл txt? хочется узнать на сколько это эффективней или главное быстрей для сервера чем запрос к БД?

Спустя 3 минуты, 6 секунд (30.08.2010 - 16:33) ApuktaChehov написал(а):
Ну вы сами должны решать, что лучше 1000 лишних запросов за единицу времени для SQL или тоже самое но для файла. Смотря на загрузку БД.

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

Спустя 14 минут, 25 секунд (30.08.2010 - 16:47) maximka787 написал(а):
Цитата (ApuktaChehov @ 30.08.2010 - 13:33)
Мне кажется, что разумнне будет использовать кэширование. Тогда нужная информация будет храниться в самом шаблоне.

У меня хостинг не свой, к сожалению там не дают ставить memcached и тд программы. Ну все равно спасибо, определю где нагрузка слабей и там и реализую.

Спустя 18 минут, 54 секунды (30.08.2010 - 17:06) ApuktaChehov написал(а):
По идее, простое кэширование можно реализовать и на PHP.
Но я не думал над этим. По этому ничего не посоветую sad.gif

Спустя 21 час, 3 минуты, 39 секунд (31.08.2010 - 14:10) maximka787 написал(а):
Реализовал
$xml = simplexml_load_file("statistika.xml");
echo 'Зерегистрированно: '.$xml->users;

statistika.xml
<?xml version="1.0" encoding="utf-8"?>
<statistics>
<users>
600000</users>
</statistics>

Вот такой вариант можно считать идеальным с точки зрения высоконагруженных систем? (пока речь идет без кеширования)

Спустя 5 минут, 27 секунд (31.08.2010 - 14:15) ZSH написал(а):
а так не проще?
echo file_get_contents('statistika.txt');


statistika.txt

60000

Спустя 10 минут, 24 секунды (31.08.2010 - 14:25) maximka787 написал(а):
Цитата (ZSH @ 31.08.2010 - 11:15)
а так не проще?

smile.gif а ты молодец) я тоже хотел это сделать но подумал что xml-ом почему-то правильней) хотя так конструкция намного проще)

а с точки зрения атаки или загрузки опасного кода это не опасно? например если хакер нашел этот файл у меня
www.mysite.ru/statistika.txt

Спустя 4 минуты, 51 секунда (31.08.2010 - 14:30) Rivalryzerg написал(а):
maximka787, я обычно использую для этого кеширующую таблицу. В ней хранятся подобные данные, которые изменяются например в момент регистрации пользователя.

Можно конечно и в файле хранить, но в таблице логичнее.

Спустя 1 минута, 24 секунды (31.08.2010 - 14:32) ZSH написал(а):
ну нашел, посмотрел, а записать не сможет

ЗЫ права правильно установить

Спустя 2 минуты, 15 секунд (31.08.2010 - 14:34) ZSH написал(а):
на каждом сайте есть index.php smile.gif

Спустя 2 минуты, 31 секунда (31.08.2010 - 14:36) maximka787 написал(а):
Цитата (Rivalryzerg @ 31.08.2010 - 11:30)
Можно конечно и в файле хранить, но в таблице логичнее.

Я новичок в этом плане и не знаю что такое кеширование таблиц. Я знаю что с помощью memcached можно запихать файлы БД рисунки скрипты в ОЗУ, но ещё я так понял какое-то локальное кэширование есть. А можно любой пример посмотреть самый простой?

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

Спустя 11 минут, 37 секунд (31.08.2010 - 14:48) sergeiss написал(а):
Цитата (maximka787 @ 31.08.2010 - 15:36)
А на счет таблицы, я просто не очень хочу держать переменную в ней, тк БД и так работает достаточно серьезно.

А ты сам понял, что сказал? Ты думаешь, что работать с файлом в высоконагруженном проекте у тебя будет легче, чем с БД?

Спустя 4 минуты, 32 секунды (31.08.2010 - 14:53) Rivalryzerg написал(а):
maximka787, я имел ввиду создать таблицу в базе данных с полями:
id | name | value

и добавлять туда записи вроде:
name=registered_users, value=0

При регистрации нового пользователя обновлять таблицу:
UPDATE `cache` SET `value`=`value`+1 WHERE `name`='registered_users'

В начале работы скрипта получать данные этой таблицы в массив $cache и там где нужно выводить

Зарегистрировано: <?php echo $cache['registered_users'] ?> пользователей

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

Спустя 7 минут, 25 секунд (31.08.2010 - 15:00) maximka787 написал(а):
Цитата (sergeiss @ 31.08.2010 - 11:48)
А ты сам понял, что сказал? Ты думаешь, что работать с файлом в высоконагруженном проекте у тебя будет легче, чем с БД?

Я не знаю, я пытаюсь это выяснить)
Вообще чисто интуитивно создание запроса подключение к базе обращение к таблице с одной строкой где содержится статистика
CREATE TABLE `stats` (
`users_count` int
);

мне кажется немного дольше чем открыть текстовый файл и вывести одной функцией из него 5-6 символов.

Спустя 2 минуты, 21 секунда (31.08.2010 - 15:02) maximka787 написал(а):
Цитата (Rivalryzerg @ 31.08.2010 - 11:53)
Суть изменять данные в таблице только тогда когда они меняются, а не пересчитывать каждый раз перед выводом.

Все верно. Я как раз выше и написал примерный код. А обновляется у меня с каждым новым юзером при регистрации.

Спустя 43 минуты, 26 секунд (31.08.2010 - 15:46) sergeiss написал(а):
Цитата (maximka787 @ 31.08.2010 - 16:00)
мне кажется немного дольше чем открыть текстовый файл и вывести одной функцией из него 5-6 символов.

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

Поэтому ты или сам решаешь всё это, или используешь БД. Других разумных путей нет.

Спустя 9 минут, 8 секунд (31.08.2010 - 15:55) maximka787 написал(а):
Значит самым разумным решением это создать
CREATE TABLE `stats` (
`users_count` int
);

и при регистрации добавлять +1 в одну единственную ячейку.

ну вопрос то все равно уместный, может конечно и кеш поможет как писал выше Rivalryzerg, но представь любого рода ддос на главную. в одном случае дымиться будет php сервер, а так обращение к БД за одной ячейкой нагрузит и SQL

Спустя 15 минут, 11 секунд (31.08.2010 - 16:10) Nikitian написал(а):
Если уж искать самое разумное решение, то использовать общую память или хранилища key-value, не использующие диск. Тот же memcache.
Проблема не в длительности подключения к бд (хотя у вас же всё-равно будет соединение для других нужд?), а в лимитах базы и файловой сиситемы. И если мускуль кэширует ответы, то файловая сситема будет дёргать винт каждый раз при обращении к файлу - это не лучший вариант для долговечности винчестера. Но это всё утрировано и такой нагрузки у вас не будет. Делайте как угодно.


_____________
..Работает - не трогай!
Быстрый ответ:

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