С точки зрения
- Нагрузки на процессор хостера
- Скорость работы
Поделитесь своим мнением, мне это очень нужно
Спустя 5 минут, 11 секунд (20.03.2010 - 22:10) kirik написал(а):
Смотря для каких нужд
Спустя 18 минут, 27 секунд (20.03.2010 - 22:29) KaFw написал(а):
Ну для примера, у меня куча записей, текст, может быть там больше 2000 символов в одной записи (это может быть sql, а может и файл), и по этим записям надо будет произвести поиск, из это ситуации возникают два вопроса которые я озвучил
-----------------------
Я знаю одно, что принципиально скорость работы на файлах на 15-20% ниже чем SQL, но это не проверенная инфа
-----------------------
Я знаю одно, что принципиально скорость работы на файлах на 15-20% ниже чем SQL, но это не проверенная инфа
Спустя 1 час, 8 минут, 50 секунд (20.03.2010 - 23:38) vagrand написал(а):
Если ты хочеш искать запись по какому-то тексту в одном из ее полей и если это моле будет содержать как минимум 2000 то я бы посоветовал использовать БД MySQL и Sphinx (http://www.sphinxsearch.com/).
Если использовать голый MySQL даже при FULLTEXT индексах будет медлено и очень сильно будет грузить сервак, про поиск в файлах TXT я вообще молчу.
Если использовать голый MySQL даже при FULLTEXT индексах будет медлено и очень сильно будет грузить сервак, про поиск в файлах TXT я вообще молчу.
Спустя 33 минуты, 1 секунда (21.03.2010 - 00:11) FatCat написал(а):
Цитата (KaFw @ 21.03.2010 - 00:45) |
идеи, отличные от предложеных. |
Идея совместного распределенного хранения.
Сначала я эмпирически выявил, что "порог" составляет примерно 4 000 символов. Тексты меньше выгоднее хранить в БД, тексты больше в файлах.
Идея реализована в этом форуме. Если при отправке сообщения размер текста больше 4000, текст пишется в файл, в БД в текстовое поле пишется пустота.
Если при чтении из таблицы считывается пустой текст, запрашивается файл.
Спустя 15 часов, 56 минут, 55 секунд (21.03.2010 - 16:08) FatCat написал(а):
Собственно, вот функции для работы с файлами, используемые в этом форуме:
Таким образом в одной директории не больше 1000 файлов.
Файлы хранятся в каталоге на уровень выше директории сайта, поэтому вытянуть их по HTTP невозможно.
function extract_archived_post($pid, $j_type)
{
$arc_path = ($pid-$pid%1000)/1000;
$arc_path = "../arc/".$arc_path."/";
$arc_file = $pid%1000;
$arc_file = ROOT_PATH.$arc_path.$arc_file.".".$j_type;
if(is_writeable( $arc_file ))$archived_post = file_get_contents( $arc_file );
else $archived_post = "";
return $archived_post;
}
function create_archived_post($pid, $j_type, $txt)
{
$arc_path = ($pid-$pid%1000)/1000;
$arc_path = "../arc/".$arc_path."/";
$arc_file = $pid%1000;
$arc_file = $arc_path.$arc_file.".".$j_type;
if(file_exists($arc_file))unlink($arc_file);
if($txt != "")
{
if(!file_exists($arc_path))mkdir($arc_path, 0777);
$fh = fopen($arc_file, "w");
fwrite($fh, $txt);
fclose($fh);
}
}
Таким образом в одной директории не больше 1000 файлов.
Файлы хранятся в каталоге на уровень выше директории сайта, поэтому вытянуть их по HTTP невозможно.
Спустя 26 минут, 34 секунды (21.03.2010 - 16:34) Nikitian написал(а):
FatCat
Цитата |
if(is_writeable( $arc_file ))$archived_post = file_get_contents( $arc_file ); |
А почему не is_readable()?
Спустя 47 минут, 41 секунда (21.03.2010 - 17:22) Den Laden написал(а):
Допустим, что нужно искать по одному полю из, скажем, 20. Положим, что размер аналогично сформированной записи в такой базе строки = 3-4 кб. И положим, что суммарный размер полученого таким образом файла = 10 мб.
Если перебирать все эти 2500 строк входящих в файл в поисках вхождения искомой подстроки, то работать эта вся схемка будет медленно. Но! Что мешает в момент добавления записи в файл с данными добалять в своебразный индексный файл значения только того "поля", по которому будет проводиться поиск? При таком раскладе поиск по файлу может оказаться производительнее поиска по бд: Сначала ищешь в "индексном файле", перебирая strpos на каждый из массива его строк, дальше откладываешь индексы элементов, в которых она не дала false и считываешь строки с таким индексом из своего главного файла. И опять Но..
Одну нужную строку из середины, скажем, файла считать невозможно. Прийдется читать сначала все содержимое файла (а это 10мб) и потом выбирать нужную строку.
И да, чтение и запись в файл работает быстрее чтения и записи в бд.
P.S. Точно нельзя считать строку из файла просто зная ее номер?
Если перебирать все эти 2500 строк входящих в файл в поисках вхождения искомой подстроки, то работать эта вся схемка будет медленно. Но! Что мешает в момент добавления записи в файл с данными добалять в своебразный индексный файл значения только того "поля", по которому будет проводиться поиск? При таком раскладе поиск по файлу может оказаться производительнее поиска по бд: Сначала ищешь в "индексном файле", перебирая strpos на каждый из массива его строк, дальше откладываешь индексы элементов, в которых она не дала false и считываешь строки с таким индексом из своего главного файла. И опять Но..
Одну нужную строку из середины, скажем, файла считать невозможно. Прийдется читать сначала все содержимое файла (а это 10мб) и потом выбирать нужную строку.
И да, чтение и запись в файл работает быстрее чтения и записи в бд.
P.S. Точно нельзя считать строку из файла просто зная ее номер?
Спустя 5 часов, 8 минут (21.03.2010 - 22:30) Гость_Kafw написал(а):
Den Laden ты прав, файл надо разделить на строки. Я уже это обдумал.
Например вид файла с текстом
----------------------------
1 зарезервированная строка
2 зарезервированная строка
.
..
И т.д сколько понадобится
Потом же основной текст
-----------------------------------------
Понятно что для поиска я буду использовать не весь файл, а определенный кусок.
Но вот какая функция лучше будет для чтения фалов
file,или же explode("\n",file_get_contents("")) или еще другие есть, может fopen, что производительнее, вот шикарный вопрос.
Например вид файла с текстом
----------------------------
1 зарезервированная строка
2 зарезервированная строка
.
..
И т.д сколько понадобится
Потом же основной текст
-----------------------------------------
Понятно что для поиска я буду использовать не весь файл, а определенный кусок.
Но вот какая функция лучше будет для чтения фалов
file,или же explode("\n",file_get_contents("")) или еще другие есть, может fopen, что производительнее, вот шикарный вопрос.
Спустя 1 час, 22 минуты, 10 секунд (21.03.2010 - 23:52) Den Laden написал(а):
Из перечисленного тобой производительнее всех file().