Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> memcached на файлах, интересное тестовое задание 
:(
    Опции темы
Simpliest
Дата 4.12.2009, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Цитата(sTa1kEr @  3.12.2009,  19:39 Найти цитируемый пост)
Как раз с shared memory будут танцы с бубном 

Используй ту конкретную реализацию key-value которая не будет вызывать у тебя танцев smile

Как только поработаю с этим на практике так сразу смогу тебе ответить более конкретно smile Пока таких задач не было и в обозримом будущем не предвидится.

Цитата(sTa1kEr @  3.12.2009,  19:39 Найти цитируемый пост)
Ты думаешь почему PHP  сессии по дефолту в файлах хранит (кстати, с точно такой же многоуровневой структурой директорий и точно так так же с ключем в качестве имени файла), а не в shared memory или еще каком-нить хитром хранилище?

Не-не-не. Тут все не так просто. сессия - это небольшой кусочек данных. Поэтому пару тысяч сессий легко умещаются в файловые кеши (блин, ну не работал я с *nix плотно в качестве админа, но откуда-то висит в памяти цифра в пару мегабайт именно в ассоциации с кешем файловой структуры (не путать с файловым кешем))
Когда речь идет о кешировании гигабайтов.... Чуйка говорит что не все так просто и память должна быть лучше. А чуйке я верю smile

А вот со сложностью реализации - понятия не имею. 

Дай пруфлинки (что файловый кеш лучше по скорости чем хранение в памяти при сопоставимой сложности реализации), раз ты с этим сталкивался и работал smile


--------------------
user posted image
PM   Вверх
sTa1kEr
Дата 4.12.2009, 11:01 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Снова-здорово! smile Обновил свой первый пост smile 

Цитата(Simpliest @  4.12.2009,  09:46 Найти цитируемый пост)
Когда речь идет о кешировании гигабайтов.... Чуйка говорит что не все так просто и память должна быть лучше. А чуйке я верю smile

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

Пара пруфлинков в подтверждение применимости файлового кеша:
http://sysoev.ru/nginx/docs/http/ngx_http_...l#fastcgi_cache - используется файловый кеш для fcgi запросов. Замечу, что nginx считается одним из самых быстрых www-серверов.
http://httpd.apache.org/docs/2.2/mod/mod_file_cache.html - в реальных проектах не встречал, но думаю, этот модуль вполне может использоваться и на относительно нагруженных проектах
http://ie2.php.net/manual/en/intro.session.php - дефолтный механизм так же способен работать на высоко нагруженных проектах, но в highload проектах обычно используется memcache, это связано не столько с производительностью, сколько с необходимостью распределенного доступа к ним.

Дай мне конкретную задачу и я тебе скажу какой, на мой взгляд, механизм кеширования лучше применить для ее решения. А сравнение сферических коней в вакууме достаточно бессмысленное занятие.
PM MAIL   Вверх
Simpliest
Дата 4.12.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Цитата(sTa1kEr @  4.12.2009,  10:01 Найти цитируемый пост)
это связано не столько с производительностью, сколько с необходимостью распределенного доступа к ним.

В том-то и дело smile что распределенность обычно возникает как ответ на требования производителности smile

Ладно. И на том спасибо smile


Цитата(sTa1kEr @  4.12.2009,  10:01 Найти цитируемый пост)
Дай мне конкретную задачу 

Да нет у меня такой конкретной задачи smile Я обычно работаю  с сложными (в плане множества функций и внутренних связей) задачами, но к хайлоаду отнести их никак нельзя.
Была бы задача, я давно бы уже нашел решение. А так.... 

Как в анекдоте
Цитата

Спрашивают у алкаша.
- Сколько будет поллитра плюс поллитра?
- Нутром чую, что литр, но объяснить не могу 



--------------------
user posted image
PM   Вверх
sTa1kEr
Дата 4.12.2009, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Цитата(Simpliest @  4.12.2009,  13:57 Найти цитируемый пост)
В том-то и дело smile что распределенность обычно возникает как ответ на требования производителности smile

Опять же задачи разные бывают, где-то для лучшей производительности наоборот выгоднее использовать независимые изолированные локальные хранилища, т.к. в этом случае есть множество своих плюсов (к примеру, таких как лучшая эффективность при большом количестве конкурирующих запросов или даже вовсе неблокирующий доступ). Но в случае с сессиями - это просто необходимо, т.к. www серверов может быть не одна ферма, но при этом любая сессия может потребоваться на любом сервере.
PM MAIL   Вверх
webtech
Дата 6.12.2009, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 30.11.2009

Репутация: нет
Всего: нет



Цитата(sTa1kEr @ 2.12.2009,  22:43)
Самый простой (а самый простой часто и самый эффективный) способ - это использовать для одного значения один файл. Тогда имя файла будет MD5 от ключа, а дата размещения значения в хранилище будет датой модификации файла. Таким образом у нас не будет никаких издержек на хранение мета информации и индексов (в этой схеме они просто не нужны), максимальная эффективность при работе с файловой системой (всегда будет читаться и писаться только то что необходимо, ни байта более), а так же можно будет совершенно не заботится о структуре данных (просто писать в файл все как есть)
.

А как же без индекса быстро удалять устаревшие записи ? Понятно что часть таких записей удалиться при get(). А если идет set() и закончилось свободное место ? Ходить по всем папкам и искать expired-файлы ? ИМХО индекс существенно ускорит удаление устаревших записей.
PM MAIL   Вверх
sTa1kEr
Дата 6.12.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Цитата(webtech @  6.12.2009,  14:49 Найти цитируемый пост)
А как же без индекса быстро удалять устаревшие записи ? Понятно что часть таких записей удалиться при get(). А если идет set() и закончилось свободное место ? Ходить по всем папкам и искать expired-файлы ? ИМХО индекс существенно ускорит удаление устаревших записей. 

Запуск раз в час по крону
Код

$ find /path/to/storage -mmin +60 -type f -exec rm -f {} \;

практически никакой нагрузки не создаст.

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

Это сообщение отредактировал(а) sTa1kEr - 6.12.2009, 15:08
PM MAIL   Вверх
webtech
Дата 6.12.2009, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 30.11.2009

Репутация: нет
Всего: нет



Цитата(sTa1kEr @ 6.12.2009,  14:33)

Запуск раз в час по крону
Код

$ find /path/to/storage -mmin +60 -type f -exec rm -f {} \;

практически никакой нагрузки не создаст.

Тогда и для винды надо команду не забыть.

Цитата(sTa1kEr @ 6.12.2009,  14:33)

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

Важнее конечно скорость. Но место под кеш может закончится раньше, чем через час. Допустим через пол часа. Получается остальные полчаса ничего записывать не будем ? Или принудительно запускать очистку ? По сути дела, при куче файлов (например 20 млн.) это займет значительное время. Лучше удалить несколько самых старых файлов, освободив только необходимое свободное место. А тут без индекса не обойдешься.

Вообще, в принципе я согласен, что это все какие-то заморочки. Лучше проследить сколько кэша набирается в час пик. Задать под кэш в 1,5 раза больше места и не париться с индексами. Это все же ближе к жизни.
PM MAIL   Вверх
sTa1kEr
Дата 6.12.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



Цитата(webtech @  6.12.2009,  16:26 Найти цитируемый пост)
Тогда и для винды надо команду не забыть.

Пфф. Зачем? Запомните: в highload проектах универсальность совершенно не нужна, в highload систему настраивают под проект, а не проект под систему(ы). 

Все вышесказанное мной в этой теме про файловый кеш относится к *nix, насколько будет эффективен файловый кеш в Windows я понятия не иммею.

Цитата(webtech @  6.12.2009,  16:26 Найти цитируемый пост)
Но место под кеш может закончится раньше, чем через час. Допустим через пол часа. Получается остальные полчаса ничего записывать не будем ?

Не может.
Во первых, перед тем как вести разработку механизма кеширование, вы должны проанализировать какого примерно объема в нем будут храниться данные и сколько нужно выделить памяти.
Во вторых. Идеология кеша такова, что он не может гарантировать 100% сохранность данных. Любые данные из кеша могут быть удалены в любой момент времени.
В третьих. Если у вас вообще возникает проблема нехватки памяти, то скорее всего принудительная очистка кеша от старых записей даст лишь кратковременный результат. Тут уже надо думать об увеличении памяти или создании дополнительного хранилища.

Цитата(webtech @  6.12.2009,  16:26 Найти цитируемый пост)
По сути дела, при куче файлов (например 20 млн.) это займет значительное время.

Вы ошибаетесь.

Это сообщение отредактировал(а) sTa1kEr - 6.12.2009, 16:01
PM MAIL   Вверх
webtech
Дата 6.12.2009, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 30.11.2009

Репутация: нет
Всего: нет



sTa1kEr, да не кому вопросы уточняющие по заданию задавать, вот и мудрю.  smile 

Это сообщение отредактировал(а) webtech - 6.12.2009, 16:18
PM MAIL   Вверх
Simpliest
Дата 6.12.2009, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



webtech
я все понимаю, но на мой взгляд это задание надо было закончить еще 4-6 дней назад.

Не думаю что от тебя хотели получить вылизанное решение - готовое к применению "искаропки" в промышленных масштабах.


--------------------
user posted image
PM   Вверх
webtech
Дата 6.12.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 30.11.2009

Репутация: нет
Всего: нет



Simpliest, да не, ты что, я не все это время только этим и занимаюсь smile Думаю суммарное время не превысит 2-3 рабочих дней.
PM MAIL   Вверх
MyDarkSide
Дата 7.12.2009, 14:43 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 21.3.2008

Репутация: -1
Всего: -1



Цитата(sTa1kEr @  2.12.2009,  22:43 Найти цитируемый пост)
Самый простой (а самый простой часто и самый эффективный) способ - это использовать для одного значения один файл. 

ага самый простой и самый бестолковый, про размер кластера забываете господа, в *nix не знаю, в винде по умолчанию кластер = 4 кб, 
т.е. у вас может быть записано одно число в файлик (количество юзеров онлайн например)  - а занимать он будет все равно 4 килобайт. 
Даже при заполнении файлов 70% в среднем на миллионе файлов потери будут астрономические. 
Вот эта строка для наглядности:
1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 
120 байт весит, т.е. в стандартный кластер можно еще 34 таких куска запихнуть.
Не уверен, но сдается, что на серверах кластер еще больше для ускорения обращения к файлам.




PM ICQ   Вверх
Simpliest
Дата 7.12.2009, 15:31 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 625
Регистрация: 1.9.2009

Репутация: нет
Всего: 3



Цитата(MyDarkSide @  7.12.2009,  13:43 Найти цитируемый пост)
потери будут астрономические

они не имеют значения для кеша.

я когда предлагал сохранять несколько значений в файл исходил исключительно из того, что чтение происходит в любом случае блоком.
Т.е. исключительно для ускорения чтения, но не для экономии места на диске smile


--------------------
user posted image
PM   Вверх
MyDarkSide
Дата 7.12.2009, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 21.3.2008

Репутация: -1
Всего: -1



Цитата(Simpliest @  7.12.2009,  15:31 Найти цитируемый пост)
они не имеют значения для кеша.

 smile  smile  smile 

1кБ не использованный * 1 000 000 файликов =  грубо 1 ГБ
 меня бы убили 
PM ICQ   Вверх
sTa1kEr
Дата 7.12.2009, 17:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



MyDarkSide, знаете такую поговорку "промолчи, глядишь за умного сойдешь"?

Во первых, если мы возьмем reiserfs, то в ней более гибкая структура позволяющая размещать в одном блоке части различных фалов. Более того в ней очень маленькие файлы хранятся в своем inode, что означает значительное увеличение производительности при чтении маленьких файлов(т.к. вовсе не придется читать ни одного блока, сам файл будет получен вместе с ее метаданными) и еще более эффективное использование дискового пространства.
А во вторых
Цитата(sTa1kEr @  3.12.2009,  17:30 Найти цитируемый пост)
при достаточном количестве оперативной памяти на сервере все эти данные лягут в дисковый кеш и будут отдаваться так же из RAM


Цитата(MyDarkSide @  7.12.2009,  15:43 Найти цитируемый пост)
Не уверен, но сдается, что на серверах кластер еще больше для ускорения обращения к файлам.

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

Добавлено через 3 минуты и 12 секунд
Цитата(MyDarkSide @  7.12.2009,  18:00 Найти цитируемый пост)
1кБ не использованный * 1 000 000 файликов =  грубо 1 ГБ
 меня бы убили  

Вы не путайте, всякие "интернет магазины" и highload проекты - это два совершенно разных уровня задач.

Добавлено через 3 минуты и 57 секунд
Пруфлинк по reiserfs http://www.citforum.ru/operating_systems/l...bins/fs01.shtml
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0970 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.