- Клієнт-сервер з бізнес-логікою на клієнті У даних системах зберігання, вибірка і підтримку несуперечності...
- N-рівнева архітектура
- Практичні заняття
- Підготовка SQL скриптів генерації схеми відносин БД в ERwin. Розробка скрипта для введення тестової...
- Архітектура MS SQL Server 2005. Налагодження та використання основних компонент середовища. Створення...
- Робота з СУБД MS SQL Server 2005, ORACLE 10g. Приклади з'єднань з БД, технології розробки кліенского додатки
- Робота з базами даних з J2EE Web-контейнера
- Об'єктно-реляційне відображення для роботи з базами даних
- Використання препроцесора для роботи з API СУБД
Клієнт-сервер з бізнес-логікою на клієнті
У даних системах зберігання, вибірка і підтримку несуперечності даних покладається на сервер БД, а вся бізнес-логіка і логіка уявлення виконуються на клієнтських машинах. Так як всі операції з маніпулювання даними здійснюються тільки через сервер, продуктивність і збереження даних залежить тільки від сервера БД. Сервери БД спочатку розраховані на багато користувачів режим роботи, мають ефективні алгоритми кешування даних. Сучасні сервери мають хорошу масштабованість.
Клієнтська частина обмінюється даними з сервером за допомогою SQL запитів. Обробка інформації в клієнт -серверних системах ведеться на рівні безлічі кортежів.
Процес розробки розділяється на створення БД і написання клієнтської частини з бізнес-логікою.
переваги
- Висока продуктивність, стабільність і надійність при багато користувачів роботі.
- Легко організовується захист даних (шифрування мережевого трафіку SSH, SSL)
- Універсальність мови визначення і маніпулювання даними
недоліки
- Більш висока ціна СУБД. (Сервер БД продається окремо).
- Досить високі вимоги до кваліфікації розробників
- Навички адміністрування сервера БД
- Підвищені вимоги до пропускної здатності мережі
- Підвищені вимоги до клієнтських місцях (на них виконується шар бізнес- логіки)
висновки
При кількості користувачів від 2 до ~ 50 вона є хорошим варіантом. З ростом числа користувачів починає позначатися недостатня пропускна здатність мережі.
Клієнт-сервер з бізнес-логікою на сервері
Використовується можливість сучасних серверів БД виконувати збережені SQL процедури на сервері, куди і переноситься максимально можлива частина бізнес-логіки. Вимоги до сервера БД зростають, однак різко знижуються вимоги до клієнтських машин (за рахунок виносу з них бізнес-логіки) і до пропускної здатності мережі (клієнту передаються тільки дані, необхідні користувачеві).
переваги
- Знижені, в порівнянні з попереднім класом систем, вимоги до пропускної здатності мережі і клієнтським місцях.
- Простіший процес створення бізнес-логіки.
недоліки
- Підвищені вимоги до сервера БД. (Кожен сеанс "з'їдає" пам'ять з розрахунку граничного завантаження)
- Невисока переносимість (мобільність) системи на інші сервери БД.
висновки
У порівнянні з попередніми класами, дозволяє тримати велике навантаження.
N-рівнева архітектура
Основними елементами є сервера БД, сервер (кластер) додатків і клієнтська частина. Головна ідея n-рівневої архітектури полягає в максимальному спрощенні клієнта (тонкий клієнт), винесення всієї бізнес-логіки з клієнта і сервера БД.
Тонкий клієнт являє собою певний термінал типу HTML -browser або емулятори X- терміналу
Вся бізнес- логіка оформляється у вигляді набору додатків, що запускаються на сервері додатків під управлінням ОС типу UNIX.
Сервера БД займаються тільки проблемами зберігання, додавання, модифікації і підтримки несуперечності даних.
Сервер додатків з'єднаний з сервером БД за допомогою окремого високошвидкісного сегмента мережі.
переваги
- Підвищена захищеність.
- Висока продуктивність .
- Легкість розвитку і модифікації.
- Легкість адміністрування.
- Можливість створення системи з масовим паралелізмом (серверів БД може бути кілька, а сервером додатків можуть служити кілька з'єднаних в кластер комп'ютерів).
недоліки
- Висока складність.
- Висока ціна рішення.
- У деяких випадках поступається по продуктивності клієнт -серверним системам з бізнес-логікою на сервері.
висновки
Єдина альтернатива для створення ІС для дуже великої кількості користувачів.
Практичні заняття
Постановка задачі. Проектування даних на концептуальному і логічному рівнях. Нормалізація відносин.
Презентація по ER-моделювання
ER нотації
Приклад моделі в ERwin
Підготовка SQL скриптів генерації схеми відносин БД в ERwin. Розробка скрипта для введення тестової інформації.
Відео-презентація (Для програвання потрібно Windows Media Player)
Архітектура MS SQL Server 2005. Налагодження та використання основних компонент середовища. Створення навчальної бази даних.
Відео-презентація (Для програвання потрібно Windows Media Player)
Робота з СУБД MS SQL Server 2005, ORACLE 10g. Приклади з'єднань з БД, технології розробки кліенского додатки
Використання технології Java Database Connectivity (JDBC) для роботи з базами даних
презентація
Приклади до презентації
SQL-скрипти, проект і вихідні коди
package org.mai806.jdbcsample; import java.sql. *; public class QuerySample {public static void main (String [] args) throws Exception {/ * ======== Підключення до MS SQL Server ===== * / // Завантаження драйвера Class.forName ( "com. microsoft.sqlserver.jdbc.SQLServerDriver "); // З'єднання з базою даних Connection connection = DriverManager.getConnection ( "jdbc: sqlserver: // localhost: 1 433; databaseName = o01;", // localhost - сервер СУБД, o01 - ім'я бази даних "sa", "123") ; // користувач, пароль / * ======== Підключення до Oracle ============ // Завантаження драйвера Class.forName ( "oracle.jdbc.OracleDriver"); // З'єднання з базою даних Connection connection = DriverManager.getConnection ( "jdbc: oracle: thin: @localhost: 1 521: orcl", // localhost - сервер СУБД, orcl - SID бази оракла "o01", "o01"); // користувач, пароль // Створення Statement PreparedStatement stmt = connection.prepareStatement ( "select ID, NAME from PERSON where NAME like?"); stmt.setString (1, "% S%"); // Виконання запиту ResultSet rs = stmt.executeQuery (); // Перебір результату виконання запиту while (rs.next ()) {// Приклад вибору параметра за номером або по імені System.out.println ( "ID:" + rs.getLong (1) + "; NAME =" + rs .getString ( "NAME")); } // закриття використаних ресурсів БД rs.close (); stmt.close (); connection.close (); }} Лістинг P.1. Виконання запиту: QuerySample.java package org.mai806.jdbcsample; import java.sql. *; import java.util.ResourceBundle; public class StoredProcedureSample {private static Connection connection = null; public static void main (String [] args) throws Exception {// Отримання сполуки з значень параметрів у файлі properties ResourceBundle properties = ResourceBundle.getBundle ( "database"); Class.forName (properties.getString ( "driver")); connection = DriverManager.getConnection (properties.getString ( "url"), properties.getString ( "user"), properties.getString ( "password")); transferAmount (1,2,100.0); connection.close (); } / ** * Перекладає зазначену суму з одного рахунку на інший * @param from рахунок платника * @param to рахунок одержувача * @param amount сума * / public static void transferAmount (long from, long to, double amount) throws Exception {/ / Створення Statement CallableStatement stmt = connection.prepareCall ( "{call TransferAmount (?,?,?)}"); // Установка параметрів stmt.setLong (1, from); stmt.setLong (2, to); stmt.setDouble (3, amount); // Виконання процедури stmt.execute (); }} Лістинг P.2. Виконання процедури, що: StoredProcedureSample.java package org.mai806.jdbcsample; import java.sql. *; import java.util.ResourceBundle; public class TransactionalSample {private static Connection connection = null; public static void main (String [] args) throws Exception {// Отримання сполуки з значень параметрів у файлі properties ResourceBundle properties = ResourceBundle.getBundle ( "database"); Class.forName (properties.getString ( "driver")); connection = DriverManager.getConnection (properties.getString ( "url"), properties.getString ( "user"), properties.getString ( "password")); // Ручне управління транзакціями connection.setAutoCommit (false); try {transferAmount (2, 1, 10.0); } Finally {connection.close (); }} / ** * Перекладає зазначену суму з одного рахунку на інший * @param from рахунок платника * @param to рахунок одержувача * @param amount сума * / public static void transferAmount (long from, long to, double amount) throws Exception { PreparedStatement stmt = null; Statement query = null; try {stmt = connection.prepareStatement ( "update ACCOUNT set AMOUNT = AMOUNT +? where ID =?"); // Забираємо суму з рахунку платника stmt.setDouble (1, -amount); stmt.setLong (2, from); stmt.execute (); // Додаємо суму на рахунок одержувача stmt.setDouble (1, amount); stmt.setLong (2, to); stmt.execute (); // Пост-перевірка: негативність рахунку платника query = connection.createStatement (); ResultSet rs = query.executeQuery ( "select AMOUNT from ACCOUNT where ID =" + from + "and AMOUNT <0"); if (rs.next ()) {throw new Exception ( "На рахунку №" + from + "недосточності засобів [" + (amount + rs.getDouble (1)) + "] для зняття суми [" + amount + "]") ; } Connection.commit (); System.out.println ( "Перерахування коштів успішно виконано"); } Catch (Exception e) {e.printStackTrace (); connection.rollback (); } Finally {if (stmt! = Null) stmt.close (); if (query! = null) query.close (); }}} Лістинг P.3. Робота з транзакціями: TransactionalSample.java
Робота з базами даних з J2EE Web-контейнера
презентація
Об'єктно-реляційне відображення для роботи з базами даних
презентація
Використання препроцесора для роботи з API СУБД
презентація
Select ID, NAME from PERSON where NAME like?Update ACCOUNT set AMOUNT = AMOUNT +?
Where ID =?