Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> БД и текстовые файлы, ресурсы и нагрузки 
:(
    Опции темы
CPLUSPLUS
Дата 24.7.2005, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 22.10.2003

Репутация: -1
Всего: 2



Здравствуйте, дорогие друзья!
Perl очень часто применяется для т. н. "текстовых баз данных" и прочего подобного. Очень часто данные сохраняются в текстовых файлах. В книжках очень часто используется построчное сохранение содержимого файла в массиве. Кроме того, иногда осуществляется построчное или побайтовое считывание с соответствующей обработкой (прерываемого действия smile). Но нигде ни слова я не видел об эффективности подобных методов, не слышал о моделях оптимизации стоимости ресурсов при подобных деяниях. Как выход мне как-то давно тут советовали использовать RDB, например, конечно, MySQL -- решение, использующее, по их словам, меньше ресурсов. Но почему виртуальные хостинги ставят ограничения на их количества, но умалчивают обычно о предельной загрузке аппаратных вычислительных средств? Достаточно мощные форумы, слышал, обходятся текстом. Как поступать подобным образом при большой нагрузке? Этот вопрос иногда волнует, точно, очень многих, но они предпочитают закрывать глаза и не думать об этом. Что далеко не всегда, конечно, является наиблагоразумнейшим из всех имеющихся выходов.
PM MAIL   Вверх
chaos
Дата 25.7.2005, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Файл с данными может выглядеть так:

Иванов И.И.::888-0000::Какая-то улица, 17, кв 40
Сидоров П.И.::888-8429::Другая улица, 5, кв 21
...... и тд.

тогда программа, которая читает данные, может быть примерно такого вида:
Код

#!/usr/bin/perl

# открываем файл
open DATA, 'data.dat' or die "Невозможно открыть data.dat: $!";

# читаем построчно из файла
while (<DATA>) {
        chomp; # удаление символа конца строки
        # теперь в $_ есть строка и мы ее разделяем на переменные
        ($name, $phone, $address) = split(/::/);
        # и выведем на печать
        print "Имя: $name, телефон: $phone, адрес: $address\n";
}
close DATA;


Больше проблем возникает в случее, если надо удалить или отредактировать
запись, но и их можно довольно просто и элегантно решить, если использовать
механизм редактирования на месте (inplace edit) -- при использовании операции
"ромб"(<>), можно читать из одного файла, а писать в другой:

Код

#!/usr/bin/perl 
$^I = '~'; # запускаем inplace edit
while (<>) { # Обратите внимание, что мы не открывали файл: при такой
        #конструкции имя файла берется из коммандной строки
        chomp;
        ($name, $phone, $address) = split(/::/);
        if (.... некоторое условие, при котором мы оставляем наши данные ... )
        {
                print "$name::$phone::$address\n"; # теперь данные есть в новом файле
        }
}


если запустить это программу как

change.pl data.dat

,то в текущем каталоге будут два файла: data.dat, с записями, которые
удовлетворили нашим условиям и data.dat~ -- предыдущая копия.
(также, во многих случаях, всю программу такого типа можно записать как one-liner: perl -i~ -n -e 'print if(... условие)' )


Двоичные файлы

Для чтения двоичных файлов в Perl можно использовать функции read и unpack.
К примеру, если использовать двоичный файл для хранения телефонной книги такого
формата:
40 символов -- фамилия, И.О.
10 символов -- номер телефона,
60 cимволов -- адрес,
то строка описания формата для unpack будет выглядеть так:
$format_str = 'A40 A10 A60';

а сама программа, аналогичная первому примеру:

Код

#!/usr/bin/perl
$format_str = 'A40 A10 A60';
open DATA, 'binary.dat' or die "$!";
while (read(DATA, $buf, 40+10+60)) { # <DATA> не покатит: такая
# конструкция будет читать до символа перевода строки, а это не то, что нужно
        ($name, $phone, $address) = unpack($format_str, $buf);
        # Теперь в $name, $phone, $address есть данные и с ними можно делать
        # все, что захочется
}
close DATA;


Чтобы вывести в файл такую запись можно использовать конструкцию типа

Код

print FILE pack($format_str, $name, $phone, $address);


PM WWW   Вверх
CPLUSPLUS
Дата 25.7.2005, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 22.10.2003

Репутация: -1
Всего: 2



Это все конечно очень интересно, спасибо, но вот ты не задумывался при этом, какие ресурсы гробятся? Что может лучше использовать какие-то другие методы?
Те же формуы как пишутся?
Добавлено @ 11:12
И на txt, и на MySQL. А в чем разница?
PM MAIL   Вверх
chaos
Дата 25.7.2005, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Цитата
Что может лучше использовать какие-то другие методы?

кроме как файлов и БД ничего в голову не приходит)
Цитата
но вот ты не задумывался при этом, какие ресурсы гробятся?
ресурсы гробятся и при использовании фалов и при БД, вопрос только в том кто их больше гробит smile это я думаю зависит от поставленной задачи
Цитата
И на txt,  и на MySQL. А в чем разница?

разница я думаю в том что у кого-то есть возможность пользовать БД, а у кого-то ее нет!

Лично я так думаю!



PM WWW   Вверх
CPLUSPLUS
Дата 25.7.2005, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 22.10.2003

Репутация: -1
Всего: 2



"Как выход мне как-то давно тут советовали использовать RDB, например, конечно, MySQL -- решение, использующее, по их словам, меньше ресурсов. Но почему виртуальные хостинги ставят ограничения на их количества, но умалчивают обычно о предельной загрузке аппаратных вычислительных средств?"
Вот именно, для операций поиска, сравнения, хранения что? Для форума большого что лучше?
PM MAIL   Вверх
chaos
Дата 25.7.2005, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



я думаю буз спорно БД
PM WWW   Вверх
wladk
Дата 25.7.2005, 23:41 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Беспорно у хранения данных в простых текстовых файлах есть свои преимущества. Точно так же есть свои приимущества при использовании БД.

Текстовые файлы, на мой взгляд подходят для систем:
1. С небольшим объемом данных (десятки тысяч строк).
2. С небольшой нагрузкой (до 10 запросов в секунду).

Перл - некое универсальное средство. На мой взгляд, универсальная вещь - это вещь одинаково плохо выполняющая все возложенные на нее функцииsmile.
Что то мне подсказывает что специально заточенный энджайн, для работы с файлами специального формата, ко всему еще и скомпилированный в бинарник будет работать быстрее чем интерпритируемый перловый скрип юзающий текстовый файл.
На мой взгляд основные операции с БД это поиск и сортировка. А это вещи весьма не тривиальные. У Кнута вон целый том на эту тему написан... В готовых СУБД это уже реализовано. Хорошо или плохо, но уже есть. SQL опять же.... Определенно мне больше СУБД нравятсяsmile

Посему смотри на задачи. Только вот я бы вообще отказался от простых текстовых файлов в пользу хмл...

  Вверх
CPLUSPLUS
Дата 27.7.2005, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 22.10.2003

Репутация: -1
Всего: 2



Но все-таки скажите, почему не лимитируют виртуальные хостинги (слава Богу, не использую) кол-во всяких тестовых файлов а количество баз всегда четко определено?
PM MAIL   Вверх
wladk
Дата 28.7.2005, 13:26 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











БД на ВХ - система общего пользования. Один сервер на всех участников.
А наличие файлов тоже ограничиватеся, но не "в лоб".
1 - лимитируестся место для ВХ
2 - уверен, что лимитируются так же и выделение памяти и процессорного времени под процесс для конкретного ВХ.
  Вверх
korob2001
Дата 30.7.2005, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



Да просто база данных, расходует больше ресурсов, но работать с ней намного удобней. Если ты хранишь пару тысячь записей, то можно воспользоваться и текстовым файлом, но а вот когда у тебя сотни тысячь записей, то лучше юзать базу, так как манипуляции с данными там делаются намного быстрее и удобнее. Например можно обратиться одним запросом на выборку данных из нескольких таблиц, это всего одна строка SQL запроса, плюс в этом же запросе отсортировать данные по определённым критериям, плюс можно запросто сделать реверс данных и всё это в одной строке SQL запроса.
А теперь давай попробуем прикинуть, сколько кода нужно написать на Perl, что бы выбрать связанные данные из нескольких файлов? Сколько ресурсов при этом мы израсходуем? Удобен ли будет код, для каких либо изменений в будущем? Например: для сортировки данных из текстового файла, что нужно сделать? Или как мы будем делать реверс данных? Ответив на все эти вопросы, ты явно увидешь приимущество баз данных.

Удачи.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
CPLUSPLUS
Дата 31.7.2005, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 92
Регистрация: 22.10.2003

Репутация: -1
Всего: 2



Я, дурак, ничего не понял, и увидел некоторые "противоречия" тут:

"Да просто база данных, расходует больше ресурсов, но работать с ней намного удобней"
"так как манипуляции с данными там делаются намного быстрее и удобнее."
"сколько кода нужно написать на Perl, что бы выбрать связанные данные из нескольких файлов? Сколько ресурсов при этом мы израсходуем?"

Удачи тебе также.
PM MAIL   Вверх
korob2001
Дата 1.8.2005, 06:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



А что тут не понятного? База данных расходует больше ресурсов, но работать с ней удобнее, чем с файлом, потому использовать её например: только для счётчика посещений, не самый лучший вариант. Вобщем если быть очень кратким, то самому нужно смотреть, где и когда стоит использовать базу, а где файлы.
Но опять же, это насколько я понял вопрос. Если же я тебя не верно понял, то будь добр и потрудись перефразировать его. Какой вопрос, такой и ответ. smile
Цитата

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

Вот этого я вообще не понял. Тебе не кажется, что ты задаёшь довольно пространственный вопрос, да и не в тот раздел? Лучше всех, на него тебе ответит админ такого хоста, хотя может и не ответит. У таких товарищей, как правило просто нет времени, на подобное. А лично я тебе могу сказать лишь то, что всё лимитируется и база и дисковое пространство.

Это сообщение отредактировал(а) korob2001 - 1.8.2005, 06:41


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0775 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.