Автор Тема: Чем SQL лучше?  (Прочитано 10405 раз)

0 Пользователей и 1 Гость просматривают эту тему.

  • Гость
Чем SQL лучше?
« : 12 Мая 2002, 02:42:55 »
Объясните, пожалуйста, начинающему, в двух словах, почему нужно применять MySQL, и нельзя обходиться базами, которые может делать Perl в виде текстового файла со строчками данных и полями произвольной длины, произвольного набора? Чем SQL лучше и насколько, и в каких случаях надо переходить к ним от обычных текстовых баз?

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Чем SQL лучше?
« Ответ #1 : 12 Мая 2002, 02:57:29 »
Лучше, т.к.
1. проекты с SQL более масштабируемы
2 надежнее (как никак, большая часть БД - это системы с многопользовательским доступом)
3. при больших объемах данных быстрее, причем существенно, ну а когда две, три, десять записей ;) то наоборот текстовые БД существенно быстрее.
4. легче программировать и структурировать :) особенно когда структура данных довольно сложная
 в исканиях.

Оффлайн SteelRat

  • Funk U!
  • Старожил
  • ****
  • Сообщений: 290
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thewebfactory.fatal.ru
У кого-нить
« Ответ #2 : 12 Мая 2002, 19:43:30 »
есть дока по практическому применеию связки Perl+MySQL?
Не документация на DBI (типа такая-то функция возвращает кое-что из ничего), а что-нибудь конкретное в примерах, а именно - вставка данных, чтение, добавление колонок/строк/изменение....
Debian/GNU Linux is rulezz...

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
ага
« Ответ #3 : 13 Мая 2002, 03:08:52 »
есть отличная книжка "Программирование на Perl DBI", авторы: Аллигатор Декарт, Тим Банс. Издательство OReilly, на русском издана издательством "Символ"

Как говорится, весьма и весьма. Несколько глав посвящено альтернативным DB (текстовые, DBM), а потом о SQL +Perl
 в исканиях.

  • Гость
Чем SQL лучше?
« Ответ #4 : 13 Мая 2002, 04:15:42 »
...при больших объемах данных быстрее, причем существенно


А какие объемы уже считаются большими?

Оффлайн SteelRat

  • Funk U!
  • Старожил
  • ****
  • Сообщений: 290
  • +0/-0
  • 2
    • Просмотр профиля
    • http://thewebfactory.fatal.ru
2Green Kakadu
« Ответ #5 : 13 Мая 2002, 16:20:26 »
Спасибо, пойду копать в гамазинах....
Debian/GNU Linux is rulezz...

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Чем SQL лучше?
« Ответ #6 : 16 Мая 2002, 04:29:00 »
Цитировать
А какие объемы уже считаются большими?

;) все зависит от того, как все организовано
Т.е. стоит тесты поставить и т.д. Но где-то я видел результаты подобного теста - если в каждой строке текстовой БД несколько полей, то уже при 1000 строчках SQL выползет вперед по скорости при выполнении всех операций. Ведь при замене, обновлении, удалении для текстовой БД как правило приходится перебирать все записи (правда, если используются записи фиксированной длины, то се перебирать не придется).
+ не стоит забывать о надежности.
 в исканиях.

  • Гость
Вот, это уже хоть что-то.  Вопрос, насколько вперед. Если какая-то операция делается 1 секунду, а в SQL - 0,8 с или даже 0,5 c, то так ли это существенно? И как в реальной жизни применять записи фиксированной длины, например, для форума? На каком уровне их зафиксировать. И, опять же, зачем это нужно? В чем, и насколько, выигрыш?

А насчет надежности - если не забывать запирать файлы flock - то почему надежность ниже? Моя первая Доска объявлений уже два года работает автономно - и тьфу-тьфу.

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Чем SQL лучше?
« Ответ #8 : 17 Мая 2002, 04:13:35 »
Цитировать
насчет надежности - если не забывать запирать файлы flock - то почему надежность ниже?

;) в том то и дело, что если его запереть, а операция довольно продолжительная, то остальные ждут. В то время как SQL БД поддерживает одновременно несколько коннектов и при этом гарантирует надежность и достоверность данных.
В форуме это критично.

и flock - это еще не значит что никто к этому файлу не обратится пока он используется другими.
Чем больше пользователей, тем больше опасность того, что все накроется.

Цитировать
И как в реальной жизни применять записи фиксированной длины, например, для форума?

;) ф-ции pack, unpack, sbstr
у них есть большой недостаток: если размер данных меньше поля определенной длины, то данные все равно доращиваются до нужных размеров поля путем вставки заполнителей, т.е. размер файлов получается весьма немаленький из-за такой неэффективной записи;

если вдруг что-то недодумаете или произойдет сбой во время записи и допустим запишется не все, то ;) потом найти что либо сам скрипт не сможет.

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

  • Гость
Чем SQL лучше?
« Ответ #9 : 18 Мая 2002, 03:28:40 »
>flock - это еще не значит что никто к этому файлу не обратится пока он используется другими


А что же это значит?

Я делаю так:

open(A,"<$basa") || die print " $!";
flock(A,2);
@users=;
flock(A,8);
close (A);

т.е. закрываю сразу, а работаю с @users, а файл уже свободен.

Так же и при записи. Если что и потеряю, так не в базе, а только с оперативными данными, что не так страшно.

>а операция довольно продолжительная,

или сам процесс запирания продолжительный? Сколько и почему? И как обходится Windows без этого запирания?

А вообще кое-что проясняется. Жалко только, что цифр мало. А мне, как инженеру, правда по другой специальности, слова долго, надежнее, быстрее мало о чем говорят, скорее на эмоции походит. Нужно в цифрах оценить насколько, и сколько потом это улучшение будет стоить, и только тогда можно о чем-то судить, да и то для данного конкретного случая. И может эффективнее решить проблему скорости со стороны харда - уж очень быстро все дешевеет.

>Довольно "жесткая" логика у текстовых БД

А конкретнее, это интересно.

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Чем SQL лучше?
« Ответ #10 : 18 Мая 2002, 04:44:24 »
Цитировать
>flock - это еще не значит что никто к этому файлу не обратится пока он используется другими
А что же это значит?

;) а то, что flock ничего физически не запирает - это как договоренность, мол я работаю не лезьте. Если к "закрытому" файлу обратится кто-то не использующий функцию flock при открытии, то он доступ к нему получит без проблем.

Кроме того, нельзя использовать flock пока вы не открыли файл, т.е.
1 открываем
2 потом flock
а между первой и второй - есть промежуток небольшой :) за который "возможно" сделать что-то не то. Некоторые поэтому делают иначе - открывают пустой файл-локер, его flock, а потом открывают уже рабочий файл
open(L, ">lock.lock")||die("Error:$!");
flock(L,2);
open(DB, "...
close DB;
close L;

Об этом подробно и с примерами тут:
http://www.samag.com/documents/s=4075/sam1013019385270/sam0203i.htm



Цитировать
>а операция довольно продолжительная,

или сам процесс запирания продолжительный? Сколько и почему? И как обходится Windows без этого запирания?

нет. Подразумевалась работа с данными.
Можно действительно все в переменную скинуть и закрыть, и когда данных немного, то это нормально. Но если БД большая, то грузить все в память - это не всегда удачное решение, иногда занимаются построчным считыванием и сразу делают то или иное действие, значит файл будет занят долго.
а Win.. ;) в 9x нету, но наверняка они там что-то свое придумали но никому не сказали. Можно переименовывать lock файл и проверять переименован он или нет (т.е. альтернатива - флок поставлен или нет)

Цитировать
Нужно в цифрах оценить насколько, и сколько потом это улучшение будет стоить, и только тогда можно о чем-то судить, да и то для данного конкретного случая. И может эффективнее решить проблему скорости со стороны харда - уж очень быстро все дешевеет.

в цифрах то можно Benchmark.pm ;) все-таки все зависит от того, что нужно. А то что все дешевеет - так это можно и иначе смотреть, например раньше MySQL предлагали существенно меньше хостеров в тарифных планах чем сейчас, а сейчас почти что обязательно суют по умолчанию
Цитировать
Довольно "жесткая" логика у текстовых БД

А конкретнее, это интересно.

все критично зависит от того, насколько сразу все спланируется. Это конечно относится ко всем БД, но с SQL базами можно выкрутится за счет гибкости самого языка SQL, а вот в случае с текстом - все думаете вы, все выборки алгоритмы записи, обновление, разбивку полей делаете тоже вы.. и если вдруг понадобится ввести новое поле, или нужно будет добавить сортировку по какому-то полю то могут возникнуть сложности со встраиванием этих "дополнительных" возможностей в скрипт.

А есть же и альтернативы:
DBM (DB_File.pm, BerkeleyDB.pm) кстати их можно и в текстовые файлы кидать, если задать тип ДБ RECNO (правда у DBM с блокировкой не лучше дело обстоит, чем у текстовых БД)
(у других DBM администраторов ограничения на размер записи 1-5кб)

Можно на текстовых БД сделать и SQL базу DBI+DBD::CSV (громоздко правда)
« Последнее редактирование: 18 Мая 2002, 04:51:54 от Green Kakadu »
 в исканиях.

  • Гость
Чем SQL лучше?
« Ответ #11 : 19 Мая 2002, 04:25:27 »
>Но если БД большая, то грузить все в память - это не всегда удачное решение

1 млн. записей по 100 байт в строке = 100 кБ - это много для сбрасывания в память?
1000 записей по 1кБ = 1мБ - это много или мало для памяти? Интересно, что по этому поводу думают провайдеры.

А насчет вдруг понадобившегося еще одного поля - это я на себе испытал. Неприятно, но жить можно.

Ха-ха!
Пошел по Вашей ссылке http://www.samag.com/documents/s=4075/sam1013019385270/sam0203i.htm
 
а там:

Service Unavailable
We\'re sorry, but our server is currently experiencing technical difficulties. We appreciate your patience; we\'ll have things working again as soon as possible.

Internal error: Can\'t connect to database: java.sql.SQLException: JZ006: Caught IOException: java.net.ConnectException: Connection refused

Вот Вам и надежность java.sql.SQL

Кстати я не первый раз встречаю ошибки из-за SQL.

Я так думаю, что если хостер достаточно квалифицированный, то у него и Перл надежно будет пахать. Причем без всяких заездов, типа "все скрипты только в эту папку, а HTML  - в эту".  Прямо все бросай, и меняй структуру сайта под этого хостера. На что они рассчитывают? На Virtualave.net клади куда хошь, пиши что хошь - за два года ни одного сбоя! Даже когда хозяин сменялся. И это бесплатно! А ведь у них 1,5 млн. сайтов...
Вот чем больше определяется надежность. Надежность - понятие интегральное.
« Последнее редактирование: 19 Мая 2002, 11:17:34 от Britva »

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Чем SQL лучше?
« Ответ #12 : 20 Мая 2002, 02:58:32 »
Цитировать
Кстати я не первый раз встречаю ошибки из-за SQL

в случае текстовой БД это бы означало полный капут всем данным :)
такой сайт уже на тексте не сделаешь.
Цитировать
1 млн. записей по 100 байт в строке = 100 кБ - это много для сбрасывания в память?
1000 записей по 1кБ = 1мБ - это много или мало для памяти? Интересно, что по этому поводу думают провайдеры.

;)  я думаю, скрипт даже не выполнится ;)) попробуйте в домашних условиях запустить. А вот с SQL кол-во записей как бы по барабану (в смысле нагрузки сервера. хотя есть некие "рекомендуемые" объемы для простых SQL баз)
Цитировать
Причем без всяких заездов, типа "все скрипты только в эту папку, а HTML - в эту".

спорное утверждение, все таки это стиль Unix - все по разным директориям, вместе ничего не замешиваем.
 в исканиях.

  • Гость
Чем SQL лучше?
« Ответ #13 : 21 Мая 2002, 04:54:20 »
>с SQL кол-во записей как бы по барабану

Получается, что в SQL идет не построчное сканирование полей, а как-то по-другому?  Можно подробнее об этом? Как это все физически происходит,  в чем  отличие от текста? Можно ведь и текст записать двоичным, или я опять что-то не понимаю?

>я думаю, скрипт даже не выполнится

Неужели 1Мб для памяти много? Или у Перла есть какие-то теоретические ограничения?

  • Гость
Чем SQL лучше?
« Ответ #14 : 21 Мая 2002, 06:33:27 »
>>Неужели 1Мб для памяти много? Или у Перла есть какие-то теоретические ограничения?

У Перла ограничений нет. И 1 Мб это не много. Ограничения обычно есть на сервере, потому что кто-нибудь вот так же подсчитает "1 млн. записей по 100 байт в строке = 100 кБ" и решит, что 100 кб это ерунда, можно скрипт запускать. А Перлу потом мучиться придется, потому как "1 млн. записей по 100 байт в строке" это 100 МБ одних только данных, плюс накладные расходы на создание массива, которые у Перла достаточно велики, и в данном случае могут вылиться в еще 50 Мб.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28