Forum Webscript.Ru
Программирование => PHP => Тема начата: Nicki от 26 Марта 2006, 13:09:57
-
Вопрос и по мускулю и по файлам, поэьтому постю сюда. Меня интерисует вопрос скорости выполнения операции выборки. Ситуация такая. Скрипт поддерживает несколько языков - инглишь, русиш, франсиш и т.д.. Возникает необходимость добавлять новые записи на этих нескольких языках (список категорий, разделов сайта, статей и т.д.). Есть два варианта: БД и файлы. Файлы реализовать проще, НО никто не захочет лизить по lang-файлам и добавлять новые элементы в массив сообщениями. В тоже время меня мучают сомнения что загрузка и подключение массива из файла будет быстрее выборки из БД.
Вот мне и хотелось бы узнать интерисует что будет быстрее и насколько. Допустив что нужно подключить\\загрузить несколько файлов\\запросов:
- общие сообщения для всех модулей
- сообщения конкретного модуля
таблица примерно такая
id int unsigned NOT NULL auto_increment,
languageId int unsigned NOT NULL default \'1\',
moduleId int unsigned NOT NULL default \'1\',
langMark varchar(32) NOT NULL default \'\',
message text NOT NULL default \'\',
PRIMARY KEY (id),
UNIQUE _languageId_langMark (languageId,langMark)
файл
$msg[\'repeateSendAct\'] = \'\';
$msg[\'regNotConfirmed\'] = \'\';
... и т.д.
-
ИМХО Mysql будет работать быстрее за исключением случая если в конечном итоге придется непосредственно работать с бинарными файлами.
Nicki:
-
т.е. в моем случае мускуль все таки предпочтительнее по скорости, да? Даже если учитывать что в файле подключается уже готовый массив, который просто array_merge() с уже ранее подключенным массивом сообщений, а с мускулем еще надо разобрать возвращенный ресурс, сохранив все в массив.
-
Nicki
погоди, с помощу чего ты формируешь массив в файл ?
-
пока что руками добавляю во все файлы Lang строки типа
$msg[\'mark1\'] = \'Message text\';
$msg[\'mark2\'] = \'Message text 2\';
но заказчику такая головная боль не нужна, поэтому придется делать с базой. А если файлом все таки быстрее работает, чем запросом, то придется ухитрится как то ... написать парсер из бд в файлы и их потом подключать, чтоб и волки были сыты и овцы целы :)) но опять же гимор.
-
Nicki
Я бы наверное все данные хранил в БД. Таким образом мне бы не пришлось беспокоится на счет скорости выполнения скрипта.
[OFF]или же мне просто не приходилось хранить данные в файлах. Зачем хранить данные в файлах если для этого есть такой мощный интсрумент как БД[/OFF]
-
делюсь своими тестами. В общем тест такой:
- выполняется 1 секунду
- для файлов идет загрузка 4 файлов содержащим одним массив из строк который после инклюда прикрепляется к уже загруженным массивам из других файлов, т.е. все сваливаем в кучу $messages = $messages + $msg;
- для бд в каждой итерации происходил запуск 4 запросов к тем же данным что и в файлах, но уже занесенным в бд, и сохранение всех выборок в кучу. while ($arr = $result->FetchRow()) $messages[$arr[0]] = $arr[1];
- в начале всех итераций массив $messages сбрасывался
- итоговый массив в $messages конце каждой итерации насчитывал около 100 элементов
- для доступа к бд использовалась ADODB
- файлы инклюдились инструкцией include
средние результаты:
fileTest took 340 iterations/sec
dbTest took 180 iterations/sec
В общем, можно канать на ADO, но в крупных проектах слой доступа к данным необходим, поэтому вывод один - кешируйте обращения к БД где это возможно, если вопрос производительности стоит достаточно остро.
-
for_i_0
Иногда проще хранить в файлах, т.к. легко можно отредактировать любую его часть просто в текстовом редакторе, а вообще согласен, что бд необходимо применять везде где только возможно.
-
Nicki:
легко можно отредактировать любую его часть
тоже самое можно сказать о CMS. Ведь практически любое написания веб-приложений начинается именно с администрационной части.