Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Где лучше хранить большие тексты
 
 автор: lex8888   (03.08.2009 в 15:20)   письмо автору
 
 

Дорый день.
Подскажите где лучше хранить большие по объему тексты (до 3 мб) в базе дынных или в обычном текстовом файле. php скрипт будет просто выводить эти тексты. В каком варианте нагрузки на сервер будет меньше?

  Ответить  
 
 автор: Valick   (03.08.2009 в 15:33)   письмо автору
 
   для: lex8888   (03.08.2009 в 15:20)
 

просто выводить и никакого поиска по тексту? тогда лучше просто в файлах.

  Ответить  
 
 автор: Akdmeh   (03.08.2009 в 16:35)   письмо автору
 
   для: Valick   (03.08.2009 в 15:33)
 

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

  Ответить  
 
 автор: lex8888   (05.08.2009 в 21:24)   письмо автору
 
   для: Akdmeh   (03.08.2009 в 16:35)
 

А как лучше брать текст из этих файлов, использовать функции рабрты с файлами или просто подключать их с помощью include т.к. в этих файлах хранится простой html текст

  Ответить  
 
 автор: Trianon   (05.08.2009 в 22:16)   письмо автору
 
   для: lex8888   (05.08.2009 в 21:24)
 

подключая их с помощью include, Вы тем самым указываете серверу, что в них размещен php-код.
Если нужно лишь отдать текст целиком, самое простое дать ссылку на файл с этим текстом.
Остальное http-сервер сделает сам.

  Ответить  
 
 автор: lex8888   (05.08.2009 в 22:49)   письмо автору
 
   для: Trianon   (05.08.2009 в 22:16)
 

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

  Ответить  
 
 автор: Trianon   (05.08.2009 в 22:54)   письмо автору
 
   для: lex8888   (05.08.2009 в 22:49)
 

fopen(), fpassthru() если нужен произвольный доступ
readfile() если нет

  Ответить  
 
 автор: lex8888   (06.08.2009 в 16:50)   письмо автору
 
   для: Trianon   (05.08.2009 в 22:54)
 

А при использовании функции readfile стоит блокировать файл или функция делает это сама.

  Ответить  
 
 автор: Trianon   (06.08.2009 в 21:49)   письмо автору
 
   для: lex8888   (06.08.2009 в 16:50)
 

зачем Вам блокировать файл (независимо от функции) ?

  Ответить  
 
 автор: Trianon   (06.08.2009 в 01:09)   письмо автору
 
   для: lex8888   (05.08.2009 в 22:49)
 

И таки да, что это за текст на три метра, засунутый в центральную колонку?
Так контент не отдают.

  Ответить  
 
 автор: Евгений Петров   (06.08.2009 в 00:55)   письмо автору
 
   для: Valick   (03.08.2009 в 15:33)
 

Зачем лишний раз нагружать файловую систему? Если файлов очень много, то лучше все же хранить в базе, а если мало - то и смысла оптимизировать особого нет. Файл в любом случае нужно прочитать в память для того чтобы работать с ним.
1. Отдавать просто ссылку на него - вы не сможете добавлять свои элементы дизайна, динамическую часть и т.д..
2. Если это статика - зачем вам вообще база и скриптовая часть? Выводите чистый html со ссылками на html
3. Почему файлы такие большие? Это ведь клиенту тянуть все. Может есть смысл разбить их на части?

Вообщем мое мнение такое, что проблемма не в том где хранить файл, а зачем оно надо?

  Ответить  
 
 автор: Valick   (06.08.2009 в 06:26)   письмо автору
 
   для: Евгений Петров   (06.08.2009 в 00:55)
 

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

  Ответить  
 
 автор: Keyses   (06.08.2009 в 06:35)   письмо автору
 
   для: Valick   (06.08.2009 в 06:26)
 

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

  Ответить  
 
 автор: Евгений Петров   (06.08.2009 в 11:34)   письмо автору
 
   для: Keyses   (06.08.2009 в 06:35)
 

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

  Ответить  
 
 автор: Евгений Петров   (06.08.2009 в 11:20)   письмо автору
 
   для: Valick   (06.08.2009 в 06:26)
 

собым образом организованные (оптимизированные для поиска и произвольного доступа)
Вот именно. Это тоже самое только база делает это намного лучше. База данных это не просто хранилище данных. Чтобы прочитать файл с диска его нужно сначала найти на диске, потом открыть его на чтение, закрыть. Это все операции и зачастую "дорогие". А если в папку засунуть 1000 000 файлов посмотрите как быстро файл будет читаться...
БД как правило хранит все данные в одном файле который открывается один раз и поиск любой записи по первичному ключу занимает очень мало время. Фактически обращение к диску происходит один раз - чтобы прочитать файл.
Ну и плюч ко всему прочему вы получаете возможность поиска, сортировки, и другие преимущества БД.

  Ответить  
 
 автор: Valick   (06.08.2009 в 11:34)   письмо автору
 
   для: Евгений Петров   (06.08.2009 в 11:20)
 

Чтобы прочитать файл с диска его нужно сначала найти на диске, потом открыть его на чтение, закрыть. Это все операции и зачастую "дорогие".
Снова шутите? СУБД делает те же операции с файлом, точно так же открывает и закрывает.
Читайте мой первый пост.
Если нужно отдать содержимое файла целиком (+ никакого поиска), то быстрее, проще и с меньшей нагрузкой на процессор отдать файл не прибегая к возможностям базы данных.
А если в папку засунуть 1000 000 файлов
а если куллер к процессору гвоздями прибить?

  Ответить  
 
 автор: Евгений Петров   (06.08.2009 в 11:53)   письмо автору
 
   для: Valick   (06.08.2009 в 11:34)
 

Снова шутите? СУБД делает те же операции с файлом, точно так же открывает и закрывает.
MyISAM хранит каждую таблицу в отдельном файле (точнее в 2-х, 3-х). Эти файлы открываются на чтение/запись при запуске сервера насколько я помню.
InnoDB вообще хранит всю базу в одном или нескольких файлов. Точно так же файл открывается один раз и дальше для чтения просто перемещается внутренний указатель в нужное место и производится чтение.

Если нужно отдать содержимое файла целиком (+ никакого поиска), то быстрее, проще и с меньшей нагрузкой на процессор отдать файл не прибегая к возможностям базы данных.
Если нужно просто отдать содержимое файла - то лучше хранить это статикой в html файлах, со ссылками на другие файлы. Да согласен, надежнее и быстрее статики ничего нету (хотя файлы по 4 метра - это спорный вопрос в этом случае)

а если куллер к процессору гвоздями прибить?
Сначала разбиение на поддиректории, потом в одной директории станет больше поддиректорий чем в другой - надо будет балансировать. В итоге приходим к Б-деревьям а потом и к тому что БД это все делает сама.

  Ответить  
 
 автор: Trianon   (06.08.2009 в 11:55)   письмо автору
 
   для: Евгений Петров   (06.08.2009 в 11:53)
 

>Сначала разбиение на поддиректории, потом в одной директории станет больше поддиректорий чем в другой - надо будет балансировать. В итоге приходим к Б-деревьям а потом и к тому что БД это все делает сама.

Современная файловая система делает это не хуже.

  Ответить  
 
 автор: Valick   (06.08.2009 в 12:05)   письмо автору
 
   для: Евгений Петров   (06.08.2009 в 11:53)
 

Вы меня убиваете...
без базы: открыть файл - считать целиком - закрыть файл
с базой: установить соединение - открыть 3(!) файла - переместить указатель - считать часть файла - закрыть 3 файла

  Ответить  
 
 автор: Евгений Петров   (06.08.2009 в 12:23)   письмо автору
 
   для: Valick   (06.08.2009 в 12:05)
 

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

> открыть 3(!) файла
этого делать не нужно

  Ответить  
 
 автор: Valick   (06.08.2009 в 12:33)   письмо автору
 
   для: Евгений Петров   (06.08.2009 в 12:23)
 

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

  Ответить  
 
 автор: Евгений Петров   (06.08.2009 в 12:38)   письмо автору
 
   для: Valick   (06.08.2009 в 12:33)
 

файлы базы данных открыты на чтение и запись всегда. Они открываются один раз при запуске сервера БД и сервер хранит указатели на открытые файлы. Дальше при необходимости чтения данных просто происходит переход в нужное место файла.

  Ответить  
 
 автор: Trianon   (06.08.2009 в 12:43)   письмо автору
 
   для: Евгений Петров   (06.08.2009 в 12:38)
 

Чушь.

  Ответить  
 
 автор: Евгений Петров   (06.08.2009 в 12:59)   письмо автору
 
   для: Trianon   (06.08.2009 в 12:43)
 

Вы ещё скажите что открывает каждый раз...

  Ответить  
 
 автор: Trianon   (06.08.2009 в 13:08)   письмо автору
 
   для: Евгений Петров   (06.08.2009 в 12:59)
 

Я уже сказал. Нельзя сравнивать в лоб эти варианты.
Открывает другой сервер. Когда считает нужным (согласно логике кеширования).
Тратя на это ресурсы по совокупности ничуть не меньшие, чем http-сервер.

  Ответить  
 
 автор: Евгений Петров   (06.08.2009 в 15:06)   письмо автору
 
   для: Trianon   (06.08.2009 в 13:08)
 

А, не пугайте так. ) В целом полностью согласен. И поэтому и не нужно придумывать велосипеды типа где лучше хранить.

  Ответить  
 
 автор: Trianon   (06.08.2009 в 12:29)   письмо автору
 
   для: Valick   (06.08.2009 в 12:05)
 

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

  Ответить  
 
 автор: Valick   (06.08.2009 в 12:36)   письмо автору
 
   для: Trianon   (06.08.2009 в 12:29)
 

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

  Ответить  
 
 автор: Sergeich   (05.08.2009 в 23:38)   письмо автору
 
   для: lex8888   (03.08.2009 в 15:20)
 

Лучше в текстовом формате, а в базу только ссылки на файлы. В этом случае по крайней мере Вы уменьшите нагрузку на сервер при занесении файлов /текста из файлов в базу.

  Ответить  
 
 автор: serjinio   (06.08.2009 в 03:39)   письмо автору
 
   для: lex8888   (03.08.2009 в 15:20)
 

Не знаю насчет сервера,но представляю как будет загружаться такой текст у кого низко скоростной интернет или диалап..про GPRS я промолчу :)

  Ответить  
 
 автор: lex8888   (06.08.2009 в 10:22)   письмо автору
 
   для: serjinio   (06.08.2009 в 03:39)
 

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

  Ответить  
 
 автор: Евгений Петров   (06.08.2009 в 11:25)   письмо автору
 
   для: lex8888   (06.08.2009 в 10:22)
 

Да тут и не в скорости загрузке даже дело. Браузеру этот весь текст ещё в память надо загрузить и отрендерить на странице. Дело в том что никто не сможет эти 3 мб за раз прочитать. Гараздо удобнее когда текст структурирован, разбит на главы/страницы на которые можно сделать закладки в браузере чтобы не искать потом место где я закончил.

  Ответить  
 
 автор: serjinio   (06.08.2009 в 11:52)   письмо автору
 
   для: Евгений Петров   (06.08.2009 в 11:25)
 

В дополнение скажу что такой объем страницы не будет весь проиндексирован...да и читать и прокручивать такую портянку людям очень утомительно..это из психологического фактора..

  Ответить  
 
 автор: lex8888   (06.08.2009 в 14:38)   письмо автору
 
   для: serjinio   (06.08.2009 в 11:52)
 

Ну на самом деле текст та будет не большой (большой только сам html код) т.к. это конвертированные из word тексты

  Ответить  
 
 автор: Valick   (06.08.2009 в 14:49)   письмо автору
 
   для: lex8888   (06.08.2009 в 14:38)
 

а вот это в тысячу раз хуже всего
надо чистый контент + один файл стиля определяющий оформление на всех

  Ответить  
 
 автор: lex8888   (06.08.2009 в 15:49)   письмо автору
 
   для: Valick   (06.08.2009 в 14:49)
 

В будующем я обязательно вычищу этот html код. А пока меня интересует вопрос где же лучше все это хранить. В книге "PHP 5. На примерах" написано что лучше хранить в обычных файлах так как обращение к ними происходит быстрее чем к базе данных, хотя на многих форумах пишут совсем обратное. Так вот я в растерянности, какой же вариант лучше.

  Ответить  
 
 автор: lifead   (07.08.2009 в 05:25)   письмо автору
 
   для: lex8888   (06.08.2009 в 15:49)
 

А много ли у Вас этих файлов в 3 МБ? на сколько я понял у Вас узкий круг "потребителей" контента, поэтому встает вопрос: Сколько раз в день будет обновляться (загружаться) данная страничка? Если это меньше чем несколько тысяч раз в день, то особой разницы где хранить данные нет, а если это несколько тысяч раз в 10-15 минут то необходимо задуматься об оптимизации.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования