PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (2): [1] 2 »

> Найдено сообщений: 17
PlayTime Отправлено: 23 Сентября, 2013 - 19:57:00 • Тема: Кеширование данных • Форум: Хранение данных, их вывод и обработка

Ответов: 18
Просмотров: 4426
Squirrel пишет:
Мда? Вот потому, что ты такой бред пишешь, тебя и отправляют учить мат часть.


Ты это имеешь в виду?
Цитата:
Страничный кэш в системе Linux ("Cached:" в meminfo) является в большинстве систем самым крупным потребителем памяти. Каждый раз, когда вы выполняете операцию чтения read () из файла, расположенного на диске, данные считываются в память и помещаются в страничный кэш....


Squirrel пишет:
Да нифига подобного. Данные останутся в КЭШе, читай в памяти, и только в случае длительного простая, и при условии нехватки памяти другим задачам, твои данные будут удалены из кэша физически.

В дисковом кеше останутся? Я имел ввиду кеш MySQL.

Цитата:
Кроме результатов, MySQL хранит в кеше список таблиц, выборка из которых закеширована. Если в любой из таблиц, выборка из которой есть в кеше, проиcходят изменения (вставка или изменение строк), то MySQL удаляет из кеша такие выборки. Такой подход ускоряет работу MySQL, но может быть неэффективным для систем с большим количеством запросов на изменение таблиц.


Я не отрицаю того что есть то чего я не знаю.
Но я сравнил один и тот же запрос к таблице типа MyISAM и MEMORY без использование кеширования MySQL. С таблицы типа MEMORY выборка была сделана в два раза быстрее. Проходов было сделано 2000 на каждый тип таблицы.
Я понял что данные с файла будут помещены в дисковый кеш и если к ним будет частое обращение то они там будут долго. Наверно это связано с самим механизмом работы с таблицами MyISAM и MEMORY.
PlayTime Отправлено: 23 Сентября, 2013 - 16:12:23 • Тема: Кеширование данных • Форум: Хранение данных, их вывод и обработка

Ответов: 18
Просмотров: 4426
LIME пишет:
будем дальше гадать))

Почему гадать? Я мало данных привел или плохо описал то что нужно?
У меня только один столбец, не связан больше ни с какой таблицей.
PlayTime Отправлено: 23 Сентября, 2013 - 15:52:56 • Тема: Кеширование данных • Форум: Хранение данных, их вывод и обработка

Ответов: 18
Просмотров: 4426
caballero пишет:
потому и надо.
Сервер БД сам закеширует в памяти часто используемые данные.


Я не очень корректно написал название темы, но описание корректное.
Я с вами согласен но вы не до конца поняли именно эту задачу.
MySQL кеширует данные. Но если таблица была изменена то данные уже не будут браться с кеша а опять сделают выборку с диска.
Таблица состоит из строк в котором один столбец типа INT(4). (если использовать MYSQL).
Выборка почти никогда не попадет в кеш так как данные часто изменяются, по этой причине даже отключено кеширование данного MySQL запроса.
По этому нужно хранилище к которому есть быстрый доступ но запросы к нему не будут помещены в кеш а данные удалены пока сервер не будет перезагружен или не будет произведен запрос на удаление.
PlayTime Отправлено: 23 Сентября, 2013 - 14:44:26 • Тема: Как рассчитать мощность сервера • Форум: Apache и другие веб-серверы

Ответов: 20
Просмотров: 3628
Берут конкретный скрипт и нагружают бенчмарками выходя из предполагаемой нагрузки.
Потом выбирают подходящий сервер чтобы в запасе было около 25% мощности.
PlayTime Отправлено: 23 Сентября, 2013 - 14:36:08 • Тема: Как рассчитать мощность сервера • Форум: Apache и другие веб-серверы

Ответов: 20
Просмотров: 3628
grafillo пишет:
ну а по личному опыту сколько операций какой сервер держит?

Этого вам никто не скажет.
Сколько вы книжек можете перенести за раз? 10, 20, 30?

Ответ - если вес книжки 300 грамм то и 30 книжек поднять не будет проблемой, ну а если 2 кг?

Надеюсь намек понятен Подмигивание
PlayTime Отправлено: 23 Сентября, 2013 - 12:18:08 • Тема: Кеширование данных • Форум: Хранение данных, их вывод и обработка

Ответов: 18
Просмотров: 4426
Squirrel пишет:
Лучше озаботься правильной настройкой дискового кэша.

Зачем в решении данной задачи использовать дисковый кеш если таблицы и так на диске могут быть?
PlayTime Отправлено: 22 Сентября, 2013 - 22:25:13 • Тема: Отмена повторной отправки формы • Форум: Хранение данных, их вывод и обработка

Ответов: 4
Просмотров: 1748
Если использовать Куки то после проверки данных с формы устанавливайте ее или нет. А потом проверяйте значение куки. А выход это удаление куки.
PlayTime Отправлено: 22 Сентября, 2013 - 22:10:19 • Тема: Кеширование данных • Форум: Хранение данных, их вывод и обработка

Ответов: 18
Просмотров: 4426
caballero
Мемкеш я не могу использовать потому что он не дает гарантии сохранения данных. В то время как MySQL будет их хранить до перезагрузки сервера или удаления запросами.
Мелкий,
Спасибо.
Я не гуру в администрировании и не знал что "хорошие" сервера своп не используют (хотя у себя на 3 серверах я ни разу не видел использования свопа). Но думал что это штатная ситуация.
О том что данные после рестарта пропадут мне известно.
Но в данный момент меня это не сильно беспокоит (Сервер MySQL работает 88 дней, 11 часов, 0 минут и 19 секунд.).
Я сравнил операцию вставки в таблицу MyISAM и операцию выборки. Вставка была равна 8Е-5 в то время как выборки с этой же таблицы 0.025460679789652 (это MyISAM).
По этому я решил так - данные одновременно будут записываться в две таблицы. На диск и в память.
В случае рестарта сервера запуск MYSQL будет происходить через скрипт который сначала запустит MySQL а потом скопирует в MEMORY таблицу данные с той таблицы которая на диске.

Как я понял. Сервер не должен использовать СВОП. И если он это сделает то просто нужно добавить памяти. То есть я могу не переживать о том что данные MySQL попадут в файл подкачки.
PlayTime Отправлено: 22 Сентября, 2013 - 18:30:41 • Тема: Кеширование данных • Форум: Хранение данных, их вывод и обработка

Ответов: 18
Просмотров: 4426
EuGen пишет:
Вы никак не можете хранить данные в некотором хранилище (в данном случае - ОЗУ), если их размер превосходит размер хранилища.


Это понятно. Но выше я привел размер таблицы со 100 000 тысячами записей в MYSQL. Их размер по сравнению с общим количеством ОЗУ очень мал.
Опишу как я понял работу memcached: выделено место (например 250мб) и кеш их будет занимать потихоньку, со временем когда кеш будет заполнен он начнет удалять старые данные.
Мне было бы удобно выделить 20Мб памяти под таблицу и чтобы они все время были зарезервированы для нее. Благо 20 Мб памяти это совсем не много. Но чтобы ни при каких обстоятельствах они не попали в СВОП. Или все равно, если для других процессов не будет хватать памяти то они этот контейнер размером 20Мб вытеснят в СВОП? Хотя он активно используется (данные с контейнера).
PlayTime Отправлено: 22 Сентября, 2013 - 14:41:48 • Тема: Кеширование данных • Форум: Хранение данных, их вывод и обработка

Ответов: 18
Просмотров: 4426
Здравствуйте,
Стоит задача проверки IP пользователя на уникальность за текущие сутки. Самый простым способом есть хранение данных в таблицы MySQL и выборка данных с нее. Но нашел я такой тип таблиц как MEMORY таблицы. И это было то что мне нужно. Таблицу я сделал самой простой, один столбец в котором был IP преобразованный при помощи INET_ATON().
Скорость проверки наличия адреса в этой таблице была ровно в два раза больше чем в аналогичной таблице при использовании MyISAM. А размер со 100 000 тысячами записей всего 2мб. И все казалось хорошо, но была прочитана мной одна особенность. Данные могут попасть в СВОП что в данном случае сыграет против меня.
Думал попробовать хранить данные при помощи memcached но там тоже оказались минусы. В случае нехватки выделенной памяти старые данные будут удалены что никак не позволительно в данной ситуации так как список IP мне нужен за последние 24 часа. Есть ли какой то способ сделать так чтобы данные гарантировано находились в ОЗУ и к ним был быстрый доступ но в тоже время они никуда не пропадали в случае если память закончилась. (можно выделить для memcached много памяти, но это все равно не гарантирует сохранность данных).
Или может у меня не правильный подход к этому?
PlayTime Отправлено: 10 Марта, 2013 - 19:06:56 • Тема: Обновление форума. Баги и ошибки пишем здесь • Форум: Колонка администратора

Ответов: 468
Просмотров: 200323
Вот достаточно просто исправить. Можно делать более правильно но тогда нужно писать стили всем элементам а так можно только ICQ.

https://www[dot]dropbox[dot]com/s/jqsy74[dot][dot][dot]30310_190344[dot]png
PlayTime Отправлено: 10 Марта, 2013 - 17:42:53 • Тема: Обновление форума. Баги и ошибки пишем здесь • Форум: Колонка администратора

Ответов: 468
Просмотров: 200323
У меня у пользователя LIME вот такой баг

https://www[dot]dropbox[dot]com/s/j359wp[dot][dot][dot]30310_174141[dot]png
PlayTime Отправлено: 10 Марта, 2013 - 16:48:08 • Тема: Разбор работы функции explode() • Форум: Хранение данных, их вывод и обработка

Ответов: 5
Просмотров: 2622
Попробовал вариант от пользователя LIME - заработало так как нужно.

Вариант от пользователя Мелкий - тоже работает как нужно.

Подозреваю что в функции explode() тоже идет проверка внутри при помощи регулярных выражений.

Пустые строки убирают обе функции. Я подумал сначала что второй вариант лучше но проверил и убедился что и в первом пустые строки убраны.

Но вот определение:
Цитата:
PHP_EOL (string)
Корректный символ конца строки, используемый на данной платформе. Доступна начиная с версии PHP 4.3.10 и PHP 5.0.2


То есть если пользователь отправляет форму с ОС где символы переноса строки не такие как на сервере то будет ошибка такая же как я описал. Еще проверю, но кажется что будет ошибка если данная константа не такая как символ(ы) переноса строки на машине клиента.

Пока вам спасибо устное. Наберу достаточное количество сообщений и отблагодарю. Улыбка
PlayTime Отправлено: 10 Марта, 2013 - 02:55:11 • Тема: Разбор работы функции explode() • Форум: Хранение данных, их вывод и обработка

Ответов: 5
Просмотров: 2622
Здравствуйте
Есть задача: преобразовать данные приходящие через POST с textarea и преобразовать ее в массив построчно (новая строка => новый элемент).

Вот данные которые введены в textarea:
CODE (htmlphp):
скопировать код в буфер обмена
  1. example1.com
  2. example2.com
  3. example3.com
  4. example4.com


Делаем массив:
PHP:
скопировать код в буфер обмена
  1. $array = explode("\n", $_POST['textarea']);


При дебаге с применением var_dump() получаю длины значений массива: 13,13,13,12 . Визуально все одинаковое. Не понятно почему длина значений разная. Там есть какой то еще скрытый символ? Я думал что если перенос обозначен \n то он заменен. Хотя читал что может быть еще и \r вместе с \n. Получается что проблема в скрытом \r ?

Сделал проверку:

Длина значений была:4,4 . то есть в данном случае все правильно.

Может кто подскажет в чем проблема. А то в данном случае это для меня критично так как значение не проходит валидацию кроме последнего.

P.S Вспомнил за \r так как хостинг Windows
PlayTime Отправлено: 25 Февраля, 2013 - 15:56:46 • Тема: Что я не так делаю? • Форум: Напишите за меня, пожалуйста

Ответов: 2
Просмотров: 36
Если я не ошибаюсь то лимит нужно указывать как LIMIT 0,4
А выводить действительно в цикле
PHP:
скопировать код в буфер обмена
  1.  
  2. $res = mysql_query("SELECT * FROM news WHERE status='1' ORDER BY rand() LIMIT 0,12");
  3.  
  4. while($result = mysql_fetch_assoc($res)){
  5.  print_r($result);
  6. }
  7.  

Страниц (2): [1] 2 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB