Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Вибір СУБД для розробки проекту
Для створення програмного забезпечення, яке б могло генерувати робочу програму певної навчальної дисципліни нам знадобиться сховище даних. Найзручнішим таким сховищем буде система управління базами даних (СУБД). Серед різних СУБД я зупинився на MySQL Server 5.7. MySQL є найбільш пристосованою для застосування в середовищі web СУБД. Не секрет, що для виконання додатків клієнта на більшості хостинг-майданчиків провайдери надають невелику кількість ресурсів (як обчислювальних, так і дискових). Тому для даного застосування необхідна високоефективна СУБД, що володіє при цьому високою надійністю (більшість web-додатків і сайтів повинні працювати в режимі 24/7). З усіх цих причин MySQL стала непорушним стандартом в області СУБД для web, а тепер в ній розвиваються можливості для використання її в будь-яких критичних бізнес-додатках, тобто конкурує на рівних з такими СУБД таких виробників, як Oracle, IBM, Microsoft і Sybase. Перш ніж робити висновки, чи варто застосовувати пакет MySQL в якості сервера баз даних, спочатку треба з'ясувати, що він собою являє. MySQL - це реляційна СУБД. MySQL підтримує SQL (структурована мова запитів) і може застосовуватися в якості SQL-сервера. Це означає, що спілкуватися з сервером можна на мові SQL: клієнт посилає серверу запит, той його обробляє і віддає клієнту тільки ті дані, які були отримані в результаті цього запиту. Тим самим клієнтові не потрібно викачувати дані і виробляти обчислення, як, наприклад, в Microsoft Access. Крім того, MySQL - це програмне забезпечення з відкритим кодом, тобто його можна вільно вивчати та змінювати. Пакет розповсюджується на умовах GPL (General Public License), його можна безкоштовно завантажити з інтернету для некомерційного використання. З появою Інтернет-технологій, що дозволяють створювати динамічні Web-сторінки, надзвичайно зріс попит і на СУБД, які найбільш повно підходили б для цього по швидкодії, надійності і стабільності. І тут добре проявив себе пакет MySQL, який вийшов швидким, простим і надійним, але, правда, за рахунок погіршення функціональності (відразу обмовимося, що розробники MySQL обіцяють додати відсутні функції вже в найближчих версіях програми). За великим рахунком, відсутність деяких функцій, які були принесені в жертву швидкодії і надійності, не створює великих клопотів користувачам (хоча іноді якийсь дискомфорт і має місце). Для роботи з повноцінною корпоративною базою даних MySQL недотягує, але з повсякденними завданнями MySQL справляється досить добре. Ось короткий перелік основних функцій, яких не вистачає в MySQL. Транзакції - дозволяють об'єднати кілька SQL-запитів в одну одиницю роботи і в разі збою будь-якого із запитів, що входить в цю одиницю, виконати відкат, щоб повернути дані в початковий стан. Пояснимо на прикладі. Необхідно зняти гроші з одного рахунку і покласти на інший. Для цього потрібно виконати два SQL-запиту: перший - зняти гроші з одного рахунку, другий - зарахувати їх на інший рахунок. Якщо не застосовувати транзакції, то в разі збою при виконанні другого запиту гроші будуть зняті з рахунку, але не будуть зараховані на інший рахунок. Застосування транзакцій дозволяє зробити відкат, як якщо б гроші взагалі не знімалися з рахунку. Зауважимо, що за допомогою команди LOCK TABLES в MySQL можна емулювати транзакцію. Ця команда блокує таблицю на час виконання запитів, і тим самим забезпечується цілісність даних, але відкат все одно не можна зробити. Тригери - служать для автоматизації контролю за станом і роботою бази даних. Тригер зберігається в базі і спрацьовує, коли відбувається певна подія. Візьмемо той же приклад з переказом грошей: в разі збою при виконанні другого запиту спрацює тригер, який виконає відкат або пошле повідомлення адміністратору бази даних. Збережені процедури - це кілька SQL-команд, які зберігаються в базі даних під певним ім'ям і в сукупності виконують якусь функцію. За допомогою збережених процедур можна розширити синтаксис SQL так, що він буде схожий на звичайну мову програмування (наприклад, Oracle PL / SQL). У нашому прикладі з переказом грошей два SQL-запиту можна було б зберегти під одним ім'ям, а потім викликати цю процедуру, передавши їй в якості параметрів два номера рахунку і суму грошей. Тоді обидва запиту виконувалися б в одній транзакції. Вкладені запити - дозволяють підставляти значення в умови відбору динамічно, за результатами виконання іншого запиту. На думку автора, якщо без усього перерахованого вище ще можна якось обійтися, то відсутність вкладених запитів іноді дуже псує життя. Наприклад, щоб дізнатися, який автомобіль перевіз вантажів більше, ніж в середньому по автопарку, потрібно зробити такий SQL-запит: SELECT auto FROM autopark WHERE massa>! Більше чого? Я поняття не маю, яке середнє значення! Для цього середнє значення в полі massa потрібно обчислити: SELECT AVG (massa) FROM autopark Якщо підтримуються вкладені запити, то ці два запити можна вкласти один в одного: SELECT auto FROM autopark WHERE massa> (SELECT AVG (massa) FROM autopark) Але у випадку з MySQL середнє значення доводиться знаходити окремо і підставляти в інший запит безпосередньо в CGI-сценарії, що, безсумнівно, позначається на продуктивності. Інструкція UNION - просто кажучи, вона об'єднує висновок декількох запитів в один, з можливістю виключити дублікати рядків. Каскадне оновлення даних - дозволяє видаляти і оновлювати пов'язані дані. Наприклад, при видаленні з бази даних записи про клієнта з пов'язаних таблиць автоматично видаляються всі записи про замовлення цього клієнта. А тепер перерахуємо переваги MySQL. Швидкодія. Завдяки внутрішньому механізму багатопотоковості швидкодію MySQL дуже висока. Безпека. Досить високий рівень безпеки забезпечується завдяки базі даних mysql, що створюється при установці пакету і містить п'ять таблиць. За допомогою цих таблиць можна описати, який користувач з будь домену з якою таблицею може працювати і які команди він може застосовувати. Паролі, що зберігаються в базі даних, можна зашифрувати за допомогою вбудованої в MySQL функції password (). Ліцензія. Раніше ліцензування MySQL було трохи заплутаним; зараз ця програма для некомерційних цілей поширюється безкоштовно. Відкритість коду. Завдяки цьому ви зможете самі додавати в пакет потрібні функції, розширюючи його функціональність так, як вам потрібно. До речі, за окрему плату для вас це можуть зробити і самі автори MySQL. Щоб замовити розширення MySQL у творців пакета, просто зайдіть на їхній сайт і заповніть відповідну форму. Надійність. Творці MySQL потрудилися на славу: наскільки мені відомо, цей пакет досить стабільний і його важко вивести з ладу. Я не відстежую спеціально зведення результатів хакерських атак на MySQL, але мені жодного разу не траплялося на очі (на відміну від тих же Web-серверів) повідомлення про те, що MySQL був пошкоджений в результаті чийогось злого наміру. Ресурси. Це може залежати від різних чинників, але в будь-якому випадку суперкомп'ютер вам не буде потрібно. Спільнота. Як наслідок відкритості коду, безкоштовності програми, стабільної і надійної її роботи утворилося співтовариство людей, які не просто лояльні до MySQL, але і всіляко беруть участь як у розвитку самого пакету, так і в навчанні менш досвідчених людей роботі з ним. Існує величезна кількість листів розсилки і конференцій, де можна отримати безкоштовну допомогу в будь-який час доби. Переносимість. В даний час існують версії програми для більшості поширених комп'ютерних платформ. Це говорить про те, що вам не нав'язують певну операційну систему. Ви самі можете вибрати, з чим працювати, наприклад з Linux або Windows, але навіть у разі заміни ОС ви не втратите свої дані і вам навіть не знадобляться додаткові інструменти для їх перенесення. Не знаю, до недоліків або переваг віднести той факт, що у MySQL немає графічного інтерфейсу користувача (GUI). Мені, наприклад, зручніше написати SQL-запит вручну (до речі, результати його виконання можна перенаправити в файл), ніж користуватися майстром запитів, як в Microsoft SQL Server. Існує кілька клієнтських програм для MySQL, мають GUI, але вони далекі від досконалості і здебільшого тільки гальмують роботу. Якщо ви віддаєте перевагу GUI, то рекомендую скачати і спробувати ці програми, щоб підштовхнути їх творців до подальшого вдосконалення своїх виробів. Ось далеко не повний список програм з GUI: - Winmysqladmin - входить в Windows-дистрибутив MySQL, має стандартний графічний інтерфейс і дозволяє адмініструвати MySQL; - MySqlManager - входить в Windows-дистрибутив MySQL, несе в собі клієнтські функції (але нічого серйозного з її допомогою автору зробити так і не вдалося); - MySQL Administrator for Windows - більш "просунута" утиліта сторонніх розробників. Дозволяє зареєструвати і підключатися одночасно до кількох MySQL-серверів, створювати, видаляти і змінювати структуру баз даних і таблиць, створювати в таблицях ключі, писати SQL-запити і зберігати їх у файлі; - XMySQL - клієнт MySQL для X Window-подібних систем. Надає повний доступ до таблиць, допускає групові вставки і видалення, має конструктор запитів і функції адміністрування пакету. Більш повний список всіляких утиліт для MySQL (а він дуже великий) є за адресою http://www.mysql.com/downloads/. Там ви знайдете масу цікавих і корисних речей: експорт даних з MySQL в Microsoft Access і назад, драйвери ODBC і т.д. Незважаючи на відсутність графічного інтерфейсу, в пакет MySQL входять досить потужні засоби адміністрування з інтерфейсом командного рядка. Нижче наведено їх перелік із короткими описами утиліт: - MySQLAdmin - головний інструмент адміністрування MySQL. З його допомогою ви можете створювати, знищувати, змінювати бази даних і повністю контролювати свій сервер. - MySQLDump - утиліта резервування даних. - MySQLAccess - дозволяє змінювати таблиці прав доступу і виводити їх зміст в зручному для читання вигляді. - MySQLBug - в разі помилки в MySQL ця утиліта створює для розробників програми звіт про помилки, відсилаючи його також в поштовий список розсилки MySQL, щоб фахівці могли допомогти вирішити вашу проблему. - MySQLImport - імпортує дані з файлу з роздільниками в базу даних. - MySQLShow - показує структуру баз даних і таблиць, з яких вони складаються. Хочу загострити увагу ось на чому: зараз з'явилися програми, що працюють через CGI-інтерфейс, які надають практично повний пакет послуг адміністрування баз даних. Ці програми лежать на Web-серверах і являють собою звичайні CGI-скрипти. Дуже часто ці скрипти розміщуються в доступних для загального користування каталогах. Небезпека полягає в тому, що за допомогою пошукових машин будь-хто може знайти такі програми по імені файлу, а потім зробити з вашою базою даних все, що його душі завгодно. Цю проблему легко обійти, якщо розміщувати ці скрипти в закритих паролем каталогах сервера. Але краще рішення - взагалі відмовитися від використання таких програм на сервері. В MySQL є і власне розширення мови SQL. Ці функції можна використовувати в запиті двома способами. По-перше, як витягають значення: функція включається в список видобутих полів. Що повертається функцією значення буде обчислюватися для кожного запису таблиці і виводитися, як якщо б це було поле таблиці. Наприклад, виведемо заголовок статті і його довжину: SELECT title, LENGTH (title) FROM table В результаті отримаємо дві колонки, де одна взята з таблиці, а друга була обчислена. По-друге, може бути корисним як складову пропозиції WHERE - в даному випадку вона замінить собою константу в момент виконання запиту. Поясню на прикладі: необхідно знайти події, які відбулися більше доби тому. SELECT event FROM table WHERE time> (Unix_TIMESTAMP () - (60 * 60 * 24)) Тут функція Unix_TIMESTAMP () обчислює поточний час, від якого ми забираємо одну добу. На мою думку, найбільш підходяща для MySQL сфера застосування - це Інтернет та локальні програмні додатки, завдяки хорошій системі безпеки цього пакета, стабільній роботі і високій швидкодії. Якщо вашому проекту буде не вистачати транзакцій, можна використовувати Postgres. Postgres багато в чому схожий з MySQL, практично не поступається йому в продуктивності, але має більше функціональних можливостей. Втім, як показує досвід, можливостей MySQL для нескладних проектів цілком достатньо. Що ж стосується використання MySQL в якості корпоративної бази даних, то тут ситуація складається не дуже сприятливо. Сформулюємо вимоги до SQL-Сервер корпоративної бази даних, виходячи зі специфіки роботи співробітників, і оцінимо з точки зору цих вимог MySQL. Можливість роботи декількох користувачів. Це очевидне вимога слід доповнити тим, що інтенсивність використання бази даних в даному випадку буде значно вище, ніж на Web-сервері. Справді, для сайту 20 відвідувачів одночасно вважається великим успіхом, а в разі корпоративної бази таким показником може похвалитися навіть невелика фірма. Особливу увагу треба звернути на ту обставину, що корпоративна база даних використовує більш складні інтерфейси, ніж сторінки на сайті; іншими словами, більш інтенсивно посилає запити на сервер. З технічної точки зору це означає, що потрібна блокування на рівні змінною записи. Тут MySQL показує себе не кращим чином: блокування в ньому здійснюється на рівні таблиць. Це означає, зокрема, що якщо хтось вводить замовлення, то всім запитам (які аналізують статистику, що вибирають записи для звіту і т.п.) доведеться чекати, поки введення замовлення закінчиться. У разі корпоративної бази даних це зводить нанівець навіть таку перевагу MySQL, як швидкодія. Контроль цілісності даних на рівні SQL-сервера. Корпоративна база даних відрізняється складною схемою даних, і підтримувати цілісність даних засобами клієнтської програми дуже важко: одна реляція може з'єднувати п'ять-сім таблиць, а число таблиць може досягати 30-40. І в цьому разі істотної стає відсутня у MySQL можливість каскадного оновлення та видалення записів в пов'язаних таблицях. Крім того, ми вже згадували, що корпоративна база даних використовує більш складний інтерфейс, а ця обставина породжує ще дві вимоги: підтримку всіх стандартних інструкцій SQL (і корисних розширень), а також використання збережених процедур (stored procedure) і тригерів. На жаль, і тут MySQL нас не радує. Підсумовуючи все сказане, можна зробити висновок, що для більшості проектів можливостей СУБД MySQL цілком достатньо. Їх буде достатньо і для зберігання адресної книги у внутрішній мережі підприємства. Date: 2016-06-09; view: 1140; Нарушение авторских прав |