|
|
|
| Дорый день.
Подскажите где лучше хранить большие по объему тексты (до 3 мб) в базе дынных или в обычном текстовом файле. php скрипт будет просто выводить эти тексты. В каком варианте нагрузки на сервер будет меньше? | |
|
|
|
|
|
|
|
для: lex8888
(03.08.2009 в 15:20)
| | просто выводить и никакого поиска по тексту? тогда лучше просто в файлах. | |
|
|
|
|
|
|
|
для: Valick
(03.08.2009 в 15:33)
| | В текстовых файлах тоже можно организовать поиск, но по индексу(отсеять все слова больше 10 и меньше 4 символов).
А вообще - я бы советовал использовать файлы, а в базе - информация о файлах. | |
|
|
|
|
|
|
|
для: Akdmeh
(03.08.2009 в 16:35)
| | А как лучше брать текст из этих файлов, использовать функции рабрты с файлами или просто подключать их с помощью include т.к. в этих файлах хранится простой html текст | |
|
|
|
|
|
|
|
для: lex8888
(05.08.2009 в 21:24)
| | подключая их с помощью include, Вы тем самым указываете серверу, что в них размещен php-код.
Если нужно лишь отдать текст целиком, самое простое дать ссылку на файл с этим текстом.
Остальное http-сервер сделает сам. | |
|
|
|
|
|
|
|
для: Trianon
(05.08.2009 в 22:16)
| | Нет мне не надо просто отдать текст. Сайт состоит из трех колонок. В правой и левой колонках php скрипт выводит различную информацию, а в центральной колонке и надо выводить эти длинные html тексты. Вот меня и интересует каким способом лучше выдать этот текст. | |
|
|
|
|
|
|
|
для: lex8888
(05.08.2009 в 22:49)
| | fopen(), fpassthru() если нужен произвольный доступ
readfile() если нет | |
|
|
|
|
|
|
|
для: Trianon
(05.08.2009 в 22:54)
| | А при использовании функции readfile стоит блокировать файл или функция делает это сама. | |
|
|
|
|
|
|
|
для: lex8888
(06.08.2009 в 16:50)
| | зачем Вам блокировать файл (независимо от функции) ? | |
|
|
|
|
|
|
|
для: lex8888
(05.08.2009 в 22:49)
| | И таки да, что это за текст на три метра, засунутый в центральную колонку?
Так контент не отдают. | |
|
|
|
|
|
|
|
для: Valick
(03.08.2009 в 15:33)
| | Зачем лишний раз нагружать файловую систему? Если файлов очень много, то лучше все же хранить в базе, а если мало - то и смысла оптимизировать особого нет. Файл в любом случае нужно прочитать в память для того чтобы работать с ним.
1. Отдавать просто ссылку на него - вы не сможете добавлять свои элементы дизайна, динамическую часть и т.д..
2. Если это статика - зачем вам вообще база и скриптовая часть? Выводите чистый html со ссылками на html
3. Почему файлы такие большие? Это ведь клиенту тянуть все. Может есть смысл разбить их на части?
Вообщем мое мнение такое, что проблемма не в том где хранить файл, а зачем оно надо? | |
|
|
|
|
|
|
|
для: Евгений Петров
(06.08.2009 в 00:55)
| | Зачем лишний раз нагружать файловую систему? Если файлов очень много, то лучше все же хранить в базе
Вы шутите? В базе оно храниться по-вашему как? В кульках, пакетах или авоськах? БД это те же файлы, особым образом организованные (оптимизированные для поиска и произвольного доступа) но по своей сути - это файлы. | |
|
|
|
|
|
|
|
для: Valick
(06.08.2009 в 06:26)
| | А если текст который вставляется в страницу не так уж и велик, ну скажем до 4000 строк. То как быть тогда? Что лучше использовать файлы или БД? | |
|
|
|
|
|
|
|
для: Keyses
(06.08.2009 в 06:35)
| | БД придумали для того чтобы хранить данные - так и храните их там. Никаких преимуществ у файлов перед БД нету.
Если ваши тексты достигают размеров 4000 строк, то стоит подумать о том насколько удобно будет пользователям читать этот текст а не о том где его хранить. | |
|
|
|
|
|
|
|
для: Valick
(06.08.2009 в 06:26)
| | собым образом организованные (оптимизированные для поиска и произвольного доступа)
Вот именно. Это тоже самое только база делает это намного лучше. База данных это не просто хранилище данных. Чтобы прочитать файл с диска его нужно сначала найти на диске, потом открыть его на чтение, закрыть. Это все операции и зачастую "дорогие". А если в папку засунуть 1000 000 файлов посмотрите как быстро файл будет читаться...
БД как правило хранит все данные в одном файле который открывается один раз и поиск любой записи по первичному ключу занимает очень мало время. Фактически обращение к диску происходит один раз - чтобы прочитать файл.
Ну и плюч ко всему прочему вы получаете возможность поиска, сортировки, и другие преимущества БД. | |
|
|
|
|
|
|
|
для: Евгений Петров
(06.08.2009 в 11:20)
| | Чтобы прочитать файл с диска его нужно сначала найти на диске, потом открыть его на чтение, закрыть. Это все операции и зачастую "дорогие".
Снова шутите? СУБД делает те же операции с файлом, точно так же открывает и закрывает.
Читайте мой первый пост.
Если нужно отдать содержимое файла целиком (+ никакого поиска), то быстрее, проще и с меньшей нагрузкой на процессор отдать файл не прибегая к возможностям базы данных.
А если в папку засунуть 1000 000 файлов
а если куллер к процессору гвоздями прибить? | |
|
|
|
|
|
|
|
для: Valick
(06.08.2009 в 11:34)
| | Снова шутите? СУБД делает те же операции с файлом, точно так же открывает и закрывает.
MyISAM хранит каждую таблицу в отдельном файле (точнее в 2-х, 3-х). Эти файлы открываются на чтение/запись при запуске сервера насколько я помню.
InnoDB вообще хранит всю базу в одном или нескольких файлов. Точно так же файл открывается один раз и дальше для чтения просто перемещается внутренний указатель в нужное место и производится чтение.
Если нужно отдать содержимое файла целиком (+ никакого поиска), то быстрее, проще и с меньшей нагрузкой на процессор отдать файл не прибегая к возможностям базы данных.
Если нужно просто отдать содержимое файла - то лучше хранить это статикой в html файлах, со ссылками на другие файлы. Да согласен, надежнее и быстрее статики ничего нету (хотя файлы по 4 метра - это спорный вопрос в этом случае)
а если куллер к процессору гвоздями прибить?
Сначала разбиение на поддиректории, потом в одной директории станет больше поддиректорий чем в другой - надо будет балансировать. В итоге приходим к Б-деревьям а потом и к тому что БД это все делает сама. | |
|
|
|
|
|
|
|
для: Евгений Петров
(06.08.2009 в 11:53)
| | >Сначала разбиение на поддиректории, потом в одной директории станет больше поддиректорий чем в другой - надо будет балансировать. В итоге приходим к Б-деревьям а потом и к тому что БД это все делает сама.
Современная файловая система делает это не хуже. | |
|
|
|
|
|
|
|
для: Евгений Петров
(06.08.2009 в 11:53)
| | Вы меня убиваете...
без базы: открыть файл - считать целиком - закрыть файл
с базой: установить соединение - открыть 3(!) файла - переместить указатель - считать часть файла - закрыть 3 файла | |
|
|
|
|
|
|
|
для: Valick
(06.08.2009 в 12:05)
| | > установить соединение
в динамичном проекте с большой нагрузкой скорее всего соединение и так устанавливается на каждой странице, поэтому этим можно пренебреч.
> открыть 3(!) файла
этого делать не нужно | |
|
|
|
|
|
|
|
для: Евгений Петров
(06.08.2009 в 12:23)
| | нет, всем чем угодно, а этим пренебрегать ненужно раз уж вам так захотелось докопаться до истины.
таблица в MyISAM - это три файла... который вы предлагаете не открывать? | |
|
|
|
|
|
|
|
для: Valick
(06.08.2009 в 12:33)
| | файлы базы данных открыты на чтение и запись всегда. Они открываются один раз при запуске сервера БД и сервер хранит указатели на открытые файлы. Дальше при необходимости чтения данных просто происходит переход в нужное место файла. | |
|
|
|
|
|
|
|
для: Евгений Петров
(06.08.2009 в 12:38)
| | Чушь. | |
|
|
|
|
|
|
|
для: Trianon
(06.08.2009 в 12:43)
| | Вы ещё скажите что открывает каждый раз... | |
|
|
|
|
|
|
|
для: Евгений Петров
(06.08.2009 в 12:59)
| | Я уже сказал. Нельзя сравнивать в лоб эти варианты.
Открывает другой сервер. Когда считает нужным (согласно логике кеширования).
Тратя на это ресурсы по совокупности ничуть не меньшие, чем http-сервер. | |
|
|
|
|
|
|
|
для: Trianon
(06.08.2009 в 13:08)
| | А, не пугайте так. ) В целом полностью согласен. И поэтому и не нужно придумывать велосипеды типа где лучше хранить. | |
|
|
|
|
|
|
|
для: Valick
(06.08.2009 в 12:05)
| | Это очень грубое сравнение.
Начать хотя бы с того, что во втором случае за обработку отвечает другой сервер. | |
|
|
|
|
|
|
|
для: Trianon
(06.08.2009 в 12:29)
| | нет никакого желания, да и ума не хватит расписывать всё досконально.
знаю одно что если дочь захочет поиграть в песочнице, я ей куплю совочек, а не экскаватор.
Начать хотя бы с того, что во втором случае за обработку отвечает другой сервер.
Тем паче | |
|
|
|
|
|
|
|
для: lex8888
(03.08.2009 в 15:20)
| | Лучше в текстовом формате, а в базу только ссылки на файлы. В этом случае по крайней мере Вы уменьшите нагрузку на сервер при занесении файлов /текста из файлов в базу. | |
|
|
|
|
|
|
|
для: lex8888
(03.08.2009 в 15:20)
| | Не знаю насчет сервера,но представляю как будет загружаться такой текст у кого низко скоростной интернет или диалап..про GPRS я промолчу :) | |
|
|
|
|
|
|
|
для: serjinio
(06.08.2009 в 03:39)
| | Эти файлы предназначены для узкого круга пользователей, а у них большая скорость интернет соединения. Так что с загрузкой у пользователей проблем быть не должно. | |
|
|
|
|
|
|
|
для: lex8888
(06.08.2009 в 10:22)
| | Да тут и не в скорости загрузке даже дело. Браузеру этот весь текст ещё в память надо загрузить и отрендерить на странице. Дело в том что никто не сможет эти 3 мб за раз прочитать. Гараздо удобнее когда текст структурирован, разбит на главы/страницы на которые можно сделать закладки в браузере чтобы не искать потом место где я закончил. | |
|
|
|
|
|
|
|
для: Евгений Петров
(06.08.2009 в 11:25)
| | В дополнение скажу что такой объем страницы не будет весь проиндексирован...да и читать и прокручивать такую портянку людям очень утомительно..это из психологического фактора.. | |
|
|
|
|
|
|
|
для: serjinio
(06.08.2009 в 11:52)
| | Ну на самом деле текст та будет не большой (большой только сам html код) т.к. это конвертированные из word тексты | |
|
|
|
|
|
|
|
для: lex8888
(06.08.2009 в 14:38)
| | а вот это в тысячу раз хуже всего
надо чистый контент + один файл стиля определяющий оформление на всех | |
|
|
|
|
|
|
|
для: Valick
(06.08.2009 в 14:49)
| | В будующем я обязательно вычищу этот html код. А пока меня интересует вопрос где же лучше все это хранить. В книге "PHP 5. На примерах" написано что лучше хранить в обычных файлах так как обращение к ними происходит быстрее чем к базе данных, хотя на многих форумах пишут совсем обратное. Так вот я в растерянности, какой же вариант лучше. | |
|
|
|
|
|
|
|
для: lex8888
(06.08.2009 в 15:49)
| | А много ли у Вас этих файлов в 3 МБ? на сколько я понял у Вас узкий круг "потребителей" контента, поэтому встает вопрос: Сколько раз в день будет обновляться (загружаться) данная страничка? Если это меньше чем несколько тысяч раз в день, то особой разницы где хранить данные нет, а если это несколько тысяч раз в 10-15 минут то необходимо задуматься об оптимизации. | |
|
|
|