ПЗ (1219668), страница 6
Текст из файла (страница 6)
curl_setopt($ch, CURLOPT_URL, 'http://localhost:5984/');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERPWD, 'Admin:admin');//аутентификация
// загрузка страницы и выдача её браузеру
curl_exec($ch);
// завершение сеанса и освобождение ресурсов
curl_close($ch);
?>
Выполнив этот запрос и если соединение будет установлено получим соответствующий ответ от сервера.
Рассмотрим процесс создания базы данных. Для этого создаем переменную с именем базы данных, которую хотим создать:
$table = "monitoring";
После этого посылаем запрос PUT:
curl_setopt($ch, CURLOPT_URL,'http://127.0.0.1:5984/'.$table);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');//PUT
Выполнив запрос создастся база данных с соответствующим именем.
При создании объекта в базе данных ему присваивается уникальный ключ. Он генерируется автоматически, используя встроенную функцию. Поэтому когда мы хотим создать объект необходимо обращаться к функции генерирования ключа. Это не обязательное действие, но в целях грамотного контроля объектов и во избежание путаницы лучше использовать генератор ключа. Сделать это можно путем запроса к http://127.0.0.1:5984/_uuids методом GET.
Получив сгенерированный ключ, можем создать объект. Для этого в установке URL адреса 'http://127.0.0.1:5984/monitoring/. $generik_ID['_id'] ', указываем тип _id с параметром сгенерированного ключа и отправляем методом PUT.
Для заполнения объекта данными необходимо указывать ключ, а параметром CURLOPT_POSTFIELDS отправлять данные в формате JSON.
Для получения объекта указываем ключ и методом GET делаем запрос.
Для того чтобы сделать обновление документа необходимо помимо ключа указывать параметр _rev – ревизия. Он создается автоматически при создании документа, имеет уникальный ключ и служит для создания ревизий. Указываем ключ, ревизию и методом PUT обновляем данные.
Для удаления документа применяется аналогичная выше описанная процедура, но с методом DELETE.
Так же CouchDB позволяет хранить приложения, любые данные (PDF, изображения, музыку, видео и т.д.).
Рассмотрев взаимодействие php и curl с CouchDB. Можно приступить к реализации интеграции данных из MySQL в NoSQL. Сделать это можно двумя способами:
-
написание модуля в программном комплексе с помощью средств QT;
-
написание собственного web-приложения, для подключения к различным базам данных различных систем.
Рассмотрим сначала первый способ.
-
Написание программного модуля средствами Qt
Принцип работы модуля: перевод запросов SQL в формат JSON и выполнение запроса на добавление данных в CouchDB.
Особенности модуля:
-
создание запросов SQL;
-
перевод запросов в формат JSON;
-
возможность создать JSON документ непосредственно из журналов мониторинга;
-
отображение созданного формата JSON, с возможностью редактирования.
Приступим к написанию модуля.
Запросы создаются из соображения, какие данные мы хотим интегрировать. Например, для переноса содержимого каталогов используем такой запрос:
select Dates_create.Date_create, PC.Name_user_PC, name_file, Type_files.Type_name, size_file, Domen_t.Domen, date_time_ch, Catalogs.Catalog_path
FROM `Files` , `Dates_create` , `Type_files` , `Domen_t` , `Catalogs` , `PC`
WHERE Files.Date_create_id = Dates_create.ID_date_create
AND Files.type_file_id = Type_files.ID_file
AND Files.name_worker_id = PC.ID_name_user_PC
AND Files.domen_id = Domen_t.ID_domen
AND Files.catalog_id = CAtalogs.ID_Catalog;
После запроса формируется таблица с данными. Эти данные необходимо преобразовать в JSON формат. Используя библиотеки QJsonObject и QJsonDocument, и предварительно разобрав SQL запрос на соответствующие переменные, переводим данные в формат JSON. Ниже представлен код для формирования нужного формата:
QJsonObject log_files;
log_files.insert("Date_create",date_create);
log_files.insert("name_file",name_f);
log_files.insert("type_file",type_f);
log_files.insert("size_file",size_f);
log_files.insert("domen",domen);
log_files.insert("date_time_use",date_time);
log_files.insert("catalog",catalog);
QJsonDocument logs_f;
logs_f.setObject(log_files);
ui->plainTextEdit->appendPlainText(logs_f.toJson());
Графический интерфейс модуля представлен на рисунке 13.
-
Графический интерфейс модуля
На графическом интерфейсе видны дополнительные функции модуля.
Теперь рассмотрим способ второй, создание web-приложения.
-
Написание web-приложения средствами PHP
Принцип работы приложения: подключение к различным базам данных систем, выполнение SQL запросов и перевод в формат JSON.
Особенности web-приложения:
-
настройка подключения к любым базам данных;
-
создание SQL запросов;
-
перевод SQL запросов в JSON;
-
добавление данных в CouchDB.
Дальнейший анализ и исследование позволит определиться с выбором метода для интеграции данных из различных систем в NoSQL базу данных CouchDB
Запросы пишутся, так же как и в модуле, из соображения того, какие данные необходимо занести в NoSQL БД.
Воспользуемся тем же запросом, который использовался при описании модуля. После выполнения запроса можно преобразовать его в форме таблицы, для удобного чтения.
Далее необходимо этот запрос преобразовать в JSON. Для этого воспользуемся функцией json_encode(), которая преобразует массив данных в формат JSON.
После сформированные данные в формате JSON с помощью cURL передаем в CouchDB для заполнения. Программный код запроса, преобразования и добавления данных в базу представлен ниже.
<?php
$connection = mysqli_connect("localhost","root","","monitoring") or die("Error " . mysqli_error($connection));
$sql = 'select Dates_create.Date_create, PC.Name_user_PC, name_file, Type_files.Type_name, size_file, Domen_t.Domen, date_time_ch, Catalogs.Catalog_path
FROM `Files` , `Dates_create` , `Type_files` , `Domen_t` , `Catalogs` , `PC`
WHERE Files.Date_create_id = Dates_create.ID_date_create
AND Files.type_file_id = Type_files.ID_file
AND Files.name_worker_id = PC.ID_name_user_PC
AND Files.domen_id = Domen_t.ID_domen
AND Files.catalog_id = CAtalogs.ID_Catalog;';
$result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));
//create an array
$emparray[] = array();
while($row = $result->fetch_assoc())
{
$emparray[] = $row;
}
mysqli_close($connection);
$cur=json_encode($emparray);
$cur = substr($cur, 4);//приведение
$cur = substr($cur, 0, -1); //приведение
$begin="{\"logs_files\": {\"logs\": [";//дополнительные параметры для хранения JSON
$end = "]},\"TITLE\":\"ALL\"}"; // поле Title меняется в зависимости от запроса
$JSON_text=$begin.$cur.$end;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1:5984/_uuids');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-type: application/json', 'Accept: */*'));
$response = curl_exec($ch);
$_response = json_decode($response, true);
$UUID = $_response['uuids'];
$generik_ID= array("_id" => $UUID[0]);
curl_setopt($ch, CURLOPT_URL, 'http://127.0.0.1:5984/customers/'.$generik_ID['_id']);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); /* or PUT */
curl_setopt($ch, CURLOPT_POSTFIELDS, $JSON_text);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-type: application/json', 'Accept: */*'));
curl_setopt($ch, CURLOPT_USERPWD, 'Admin:admin');
$response = curl_exec($ch);
curl_close($ch);
?>
Каждый из методов имеет свои плюсы и недостатки.
Отрицательные качества написания модулей:
-
разработка потребуется знания нескольких языков программирования;
-
потребуется достаточно много времени на реализацию;
-
требует больших вложений ресурсов.
Положительные качества написания модулей:
-
отображаемая информация, как правило, представлена в собранном виде, что облегчает создание запросов;
-
модули не зависимы друг от друга;
Отрицательные качества написания единого web-приложения:
-
все системы зависят от web-приложения;
Положительные качества написания модулей:
-
относительно не дорогая реализация;
-
единый доступ ко всем базам данных.
-
ТЕХНИКО-ЭКОНОМИЧЕСКОЕ ОБОСНОВАНИЕ РАЗРАБОТКИ БАЗЫ ЗНАНИЙ ПРЕДПРИЯТИЯ НА ОСНОВЕ ТЕХНОЛОГИИ NoSQL
В данном разделе представлено технико-экономическое обоснование разработки базы знаний предприятия на основе NoSQL.
-
Обоснование целесообразности разработки проекта
Работа над данным проектом началась во время прохождения летней практики после окончания 3 курса в компании Дальаэропроект. В ходе прохождения данной практики была разработана система мониторинга действий пользователя. Функционал данной системы заключался в том, что во время работы запускался командный скрипт, который формировал список всех объектов файловой системы на компьютере пользователя. Далее протокол выполнения помещался в отдельный текстовый файл на сервере.
Скрипт запускался автоматически посредством применения групповой политики контроллером домена. В дальнейшем к данном функционалу был разработан программный модуль анализа действий пользователя. Разработанный модуль был призван производить анализ логов, сформированных скриптом. Далее эти данные считываются специально разработанной для этого программой, которая после взаимодействия с файлами логов загружала их в реляционную базу данных MySQL.
В рамках же данной ВКР была поставлена задача перевода информации из баз данных MySQL в базу знаний NoSQL. Реализация данной задачи велась в сотрудничестве с Дальневосточным центром системной и программной инженерии.
Данная технология создавалась с целью дальнейшего ее внедрения в крупные компании, которые заинтересованы в данном функционале. В следующем пункте подробно рассматривается планирование комплекса работ по разработке базы знаний предприятия на основе технологии NoSQL.
-
Планирование комплекса работ по разработке базы знаний предприятия на основе технологии NoSQL
В ходе разработки исполнитель проекта (инженер-программист) отвечает за проектирование информационного обеспечения, разработку программный модулей, реализацию вычислительных алгоритмов в виде завершенного продукта, разработку политик и скриптов.
Процессы жизненного цикла программных средств, устанавливающих стадии разработки программных продуктов, приведены в таблице 4.1.
Таблица 4.1 – Комплекс работ по разработке проекта
| Содержание работ | Исполнители | Длительность, дни | Загрузка | |
| дни | % | |||
| 1. Подготовка процесса разработки и анализ требований | ||||
| Исследование и обоснование разработки | ||||
| Постановка задачи | Программист | 1 | 1 | 100 |
| Сбор исходных данных | Программист | 1 | 1 | 100 |
| Анализ существующих методов решения задачи и программных средств | Программист | 2 | 2 | 100 |
| Обоснование принципиальной необходимости Разработки | Программист | 1 | 1 | 100 |
| Определение и анализ требований к проекту | Программист | 2 | 2 | 100 |
| Выбор технических и программных средств реализации | Программист | 1 | 1 | 100 |
| Согласование и утверждение технического задания | Программист | 1 | 1 | 100 |
| Итого по этапу 1 | Программист | 9 | 9 | 100 |
| Содержание работ | Исполнители | Длительность, дни | Загрузка | |
| дни | % | |||
| 2. Разработка проекта | ||||
| Разработка и отладка скрипта | Программист | 2 | 2 | 100 |
| Настройка контроллера домена и групповых политик | Программист | 1 | 1 | 100 |
| Разработка и отладка программного модуля анализа действий пользователя | Программист | 10 | 10 | 100 |
| Тестирование | Программист | 1 | 1 | 100 |
| Доработка | Программист | 1 | 1 | 100 |
| Внедрение программного модуля в опытную эксплуатацию | Программист | 1 | 1 | 100 |
| Добавление функционала анализа изменения базы данных | Программист | 4 | 4 | 100 |
| Тестирование системы и введение в эксплуатацию | Программист | 3 | 3 | 100 |
| Проектирование структуры хранилища данных | Программист | 3 | 3 | 100 |
| Разработка программного модуля переноса данных в NoSQL | Программист | 5 | 5 | 100 |
| Итого по этапу 2 | Программист | 31 | 31 | 100 |
| 3. Оформление рабочей документации | ||||
| Проведение экономических расчетов | Программист | 2 | 2 | 100 |
| Оформление пояснительной записки | Программист | 4 | 4 | 100 |
| Итого по этапу 3 | Программист | 6 | 6 | 100 |
| Итого по проекту | Программист | 46 | 46 | 100 |
-
Расчет затрат на разработку проекта
Капитальные вложения, связанные с разработкой проекта, рассчитываются по формуле















