Как сохранить данные на сервере в памяти, доступной для всех пользователей

Beavis

Banned
Как сохранить данные на сервере в памяти, доступной для всех пользователей

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

Заранее спасибо :)
 

planarik

Новичок
Через Shared Memory Object.

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

WP

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

phprus

Moderator
Команда форума
Beavis
Может тогда лучше использовать memcache?
Хотя я вообще не вижу, где в данной задаче будет тормозить тот же MySQL (объемы данных не такие большие да и сложных запросов быть не должно).

По этому наиболее правильно сдесь использовать MySQL или другую базу данных.

Update:
WP
но дергать постоянно их из БД недопустимо при большой нагрузке
Насколько большой должна быть нагрузка?
 

HraKK

Мудак
Команда форума
phprus
А теперь представь как с share memory они будут работать:) Не просто же класть кусок текста)) Организовать работу и тд )) Почище MySQL тормозить будет)

-~{}~ 07.07.07 21:41:

WP
Чат с одновременным онллайном 10к свободно держит MySQL.
У них посещаемость больше?
 

nerezus

Вселенский отказник
Считаю сабж идеальным вариантом. Интересно, почему некотоые орут "бред"?

В связи с особенностями PHP правда нельзя заюзать для этих целей singleton с данными, видимыми для всех запросов, поэтому приходится шаманить со всякими memcached =)
 

phprus

Moderator
Команда форума
HraKK
А теперь представь как с share memory они будут работать
С какой share memory? Где я про нее говорил? Я говорил что еси нужно именно кеширование, то лучше использовать специальные средства типа memcache.

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

phprus

Moderator
Команда форума
nerezus
приходится шаманить со всякими memcached
Почему шаманить? помоему тут singleton будет большим шаманством учитывая, что у нас многопоточная программа и данные могут поступить из любого потока да и считываться они тоже могут из любого потока.
 

nerezus

Вселенский отказник
phprus
ну просто будут накладные расходы на memcached и надо будет писать код для него.

В синглтоне же пара методов и список строк, который периодически с одной стороны чистится =)
Только вот на пхп такое нереализуемо - нет потоков.
 

phprus

Moderator
Команда форума
nerezus
ИМХО с учетом того, что синглтон должен быть потокобезопасным эти пара методов могут оказаться гораздо более сложными, чем использование memcache в php, особенно если учесть то, что модуль для работы с memcache в php есть.

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

planarik

Новичок
Функции shm_* и sem_* и никаких бубнов не надо. Вот как это примерно можно реализовать.
PHP:
$key=ftok(__FILE__,"t");
$semaphore=sem_get($key,1,0666,1);
if ($semaphore)
{
	//Создали семафор, ждем, если кто-то уже прихватил память
	if (sem_acquire($semaphore))
	{
		//Получаем доступ к памяти
		$mem=shm_attach($key,65536,666);
		if ($mem)
		{
			//Забираем массив со строками, добавляем новую, и выводим все
			$lines=shm_get_var($mem,0);
			array_push($lines,$line);
			echo join("\n",$lines);
			//Помещаем массив обратно
			shm_put_var($mem,0,$lines);
			//Освобождаем хандлер памяти
			shm_detach($mem);
		}
		//Поднимаем семафор, очередь других
		sem_release($semafore);
	}
}
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
бред, конечно :)
кроме того, что в mysql тоже можно хранить в памяти, так и с memcached люди, похоже, не работали

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

HraKK

Мудак
Команда форума
+1.

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

Beavis

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

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

буду пробовать осуществить это.
 
Сверху