Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: IX Международной научно-практической конференции «Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ» (Россия, г. Новосибирск, 07 марта 2013 г.)

Наука: Информационные технологии

Скачать книгу(-и): Сборник статей конференции

Библиографическое описание:
Шахматов А.А. ФАЙЛ-СЕРВЕРНАЯ NOSQL СУБД // Научное сообщество студентов XXI столетия. ТЕХНИЧЕСКИЕ НАУКИ: сб. ст. по мат. IX междунар. студ. науч.-практ. конф. № 9. URL: http://sibac.info/archive/technic/9.pdf (дата обращения: 25.04.2024)
Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

ФАЙЛ-СЕРВЕРНАЯ  NOSQL  СУБД

Шахматов  Александр  Александрович

студент  4  курса,  факультета  информатики,  математики  и  физики  ШГПИ,  г.  Шадринск

E-mailxardas1307@gmail.com

Слинкин  Дмитрий  Анатольевич

научный  руководитель,  канд.  пед.  наук,  доцент  ШГПИ,  г.  Шадринск

 

По  мнению  аналитического  агентства  Gartner,  манипуляции  с  большими  объемами  данных  при  помощи  внешних  нетрадиционных  NoSQL-хранилищ  входят  в  «Топ-10  стратегических  технологических  трендов  2013  года»  [3].  Однако,  NoSQL  базы  могут  быть  более  эффективны  и  на  малых  объемах  данных,  которые  предполагают  некоторую  иерархичность.  Так  называемые,  «schemaless  key-value  storage»  позволяет  быстро  начать  работу  над  данными  и  не  требуют  детальной  проработки  и  длительной  проектировки,  как  реляционные  базы  данных  (РБД).

Так,  например,  для  нужд  автоматизированной  системы  управления  мероприятиями  научно-теоретического,  научно-практического  и  методического  характера  потребовалось  хранилище,  которое  отвечало  бы  следующим  требованиям:

1.Полная  изоляция  данных  и  возможность  напрямую  редактировать  их  без  наличия  СУБД.

2.Наличие  доступого  API  для  большинства  известных  языков  программирования.

3.Возможность  AJAX-запросов  к  СУБД.

4.Возможность  удобной  работы  с  бинарными  данными  (графические  изображения,  видеофайлы,  документы  различных  форматов).

Одним  из  самых  подходящих  под  заданные  критерии  была  СУБД  от  Apache  —  документо-ориентированная  CouchDB,  которая  обладает  огромным  потенциалом,  но,  к  сожалению,  не  подходящая  по  причине  не  слишком  удобной  (хотя  и  несомненно  лучшей,  чем  у  аналогов)  работы  с  бинарными  данными  и  невозможности  напрямую  редактировать  данные  без  веб-интерфейса  (хотя,  опять  же,  редактировать  данные  можно  и  с  помощью  CURL  по  HTTP,  однако  данное  решение  слишком  громоздко  и  неудобно).

Таким  образом,  было  принято  решение  разработать  свою  СУБД,  которая  бы  в  полной  мере  отвечала  заданным  критериям,  а  именно:

1.  Имела  бы  полноценный  REST-интерфейс.

2.  Данные  хранились  бы  напрямую  в  файлах.

Если  с  первым  всё  очевидно  (соответствие  второму  и  третьему  пункту  требований),  то  со  вторым  пунктом  имелись  некоторые  сложности.  Необходимо  было  решить,  как  именно  будут  храниться  данные,  по  какому  принципу  и  т.  д.  Решение  было  навеяно  структурой  JSON  документов  в  CouchDB  и  MongoDB.

Согласно  RFC-2627  [2],  JavaScript  Object  Notation  (JSON)  —  легковесный,  основанный  на  текстовой  информации,  независящий  от  языка  программирования  изменяемый  формат  для  сериализации  структурированных  данных.  С  помощью  JSON  можно  представить  в  удобном  для  человека  и  автоматизированной  обработки  формате  иерархическую  структуру  любой  сложности  в  формате  ключ-значение  (key-value).  Многие  REST-сервисы  предоставляют  API  для  работы  со  своими  ресурсами  при  помощи  JSON  или  XML.  JSON  имеет  преимущество  перед  XML  в  более  легком  восприятии  его  человеком,  а  также  встроенными  платформонезависимыми  типами  данных.  Собственно,  по  этой  причине  он  и  был  выбран.

Однако  для  упрощенного  доступа  к  данным  и  пакетной  их  обработке  напрямую  стандартными  средствами  GNU/Linux  было  предложено  использовать  следующую  структуру:  все  пары  ключ-значение  преобразуются  по  правилу  «ключ  —  название  файла,  значение  —  его  содержимое»,  вложенные  пары,  у  которых  значение  является  ключом  для  следующей  пары  —  преобразуются  в  папки.  Таким  образом,  можно  быстро  превратить  JSON-структуру  в  файловую  и  наоборот,  древовидную  структуру  файлов  и  папок  представить  в  виде  JSON-документа.

В  соответствии  с  идеологией  REST  [1],  для  обращения  к  БД  используются  4  HTTP-запроса:  GET,  POST,  PUT,  DELETE.  GET  для  получения,  POST  для  обновления,  PUT  для  добавления  и  DELETE  для  удаления  (стандартные  CRUD-операции  (Create  Read  Update  Delete))  данных.

При  обращении  по  определенному  URL  методом  GET,  имеющего  вид  имя_протокола:  //имя.сервера:  порт/db/*,  часть  URL,  которая  соответствует  символу  «*»  в  схеме  разбивается  на  имена  директорий  (например,  https://shgpi.edu.ru:5678/db/xyz/123/  разбивается  на  на  две  папки:  xyz  и  вложенная  в  неё  папка  123).  При  этом  в  JSON-ответ,  формируемый  сервером,  попадает  полное  дерево  каталогов  и  файлов  начиная  от  той  папки,  которую  мы  указали  в  URL,  при  условии  её  существования.  Иначе  будет  выдана  ошибка  с  кодом  404  и  ответом  {“ok”:  false,  “error”:  “Not  found”}.

По  аналогии  создаются  запросы  и  другими  методами.  Например,  при  обращении  к  серверу  методом  PUT  по  URL  https:  //shgpi.edu.ru:5678/db/xyz/123/  будет  осуществлена  проверка  существования  указанной  директории,  если  таковая  существует,  будет  выдана  ошибка  с  кодом  409  и  ответом  {"ok"  =>  false,  "error"  =>  "Item  already  exist"},  иначе  директорая  будет  создана,  и  в  неё  будет  записано  содержимое  данных  запроса,  которые  обязательно  должны  представлять  собой  консистентный  JSON-документ,  иначе  будет  выдана  ошибка  с  кодом  400  и  ответом  {"ok"  =>  false,  "error"  =>  "Not  valid  JSON"}.  В  случае  успеха  генерируется  стандартный  ответ  с  кодом  200  и  текстом  {"ok"  =>  true}.  При  обращении  методом  POST  поведение  сервера  схоже,  за  исключением  того,  что  начальная  директория  проверяется  не  на  отсутствие,  а  на  наличие.  При  обращении  же  методом  DELETE  проверяется  на  наличие  исходной  директории  и  если  присутствуют  данные  в  запросе,  которые  представляют  собой  валидный  массив  JSON,  то  удаляются  только  присутствующие  в  массиве  элементы,  при  отсутствии  данных  запроса  удаляется  только  директория,  к  которой  происходит  обращение.

В  указанной  схеме  имеется  некоторое  отличие  от  классического  использования  REST-архитектуры:  для  обновления  данных  используется  POST  вместо  PUT,  и  наоборот  для  создания  нового  ресурса  используется  PUT  вместо  POST.  Данная  рассогласованность  возникла  из-за  желания  максимизировать  совместимость  данной  СУБД  с  HTTP-интерфейсом  CouchDB.

На  данный  момент  кроме  обычных  GET-запросов  поддерживаются  запросы  с  параметрами.  Параметр  GET  type=conference  означает,  что  в  результирующую  выборку  должны  попасть  только  элементы  дерева,  у  которых  свойство  type  равняется  conference,  включая  все  его  ветви.  В  дальнейшем  планируется  расширение  возможностей  выборки  по  различным  категориям,  включая  регулярные  выражения,  а  также  создание  пользовательских  представлений  для  данных.

Поддерживается  также  кэширование  ответов  сервера  на  GET-запросы,  основанное  на  механизме  с  использованием  HTTP-заголовка  Last-Modified.

Для  предотвращения  выполнения  операций  создания,  изменения  и  удаление  от  неавторизованного  пользователя  был  внедрен  механизм  разделения  ресурсов  на  основе  Basic  HTTP  Authentication,  для  защиты  которого  было  использовано  SSL-шифрование.

Сам  прототип  СУБД  был  написан  на  ЯП  Ruby  под  ОС  Альт  Линукс  6,  с  использованием  следующих  гемов:  thin  (легковесный  веб-сервер),  sinatra  (веб-фреймворк  для  упрощенного  роутинга  и  пр.)  и  rack  (обработка  HTTP-запросов),  json/ext  из  stdlib  (для  обеспечения  быстрой  обработки  данных  в  формате  JSON),  rb-inotify  (для  отслеживания  изменений  файловой  системы,  в  целях  оптимального  кэширования  ответов).  Исходный  код  и  вся  сопутствующая  документация  доступны  по  ссылке:  https://github.com/X2rdas/easedb  .

Данная  СУБД  была  использована  в  проекте  «Система  автоматизированного  проведения  конференций»,  которая  успешно  внедряется  в  ФГБОУ  ВПО  «Шадринский  государственный  педагогический  институт»  в  рамках  студенческого  форума  «Актуальные  проблемы  теории  и  методики  информатики,  математики  и  физики».  Планируется  дальнейшее  развитие  СУБД,  а  также  добавление  веб-интерфейса,  который  бы  позволял  редактировать  данные  в  БД  без  непосредственного  входа  на  сервер  и  различные  другие  механизмы.

 

Список  литературы:

  1. Crockford  D.  RFC  4627.  The  application/json  Media  Type  for  JavaScript  Object  Notation  (JSON)  //  The  Internet  Engineering  Task  Force.  —  2006.  [Электронный  ресурс]  —  Режим  доступа.  —  URL:  http://tools.ietf.org/html/rfc4627  (дата  обращения  2.03.2013)
  2. Fielding  R.T.  Architectural  Styles  and  the  Design  of  Network-based  Software  Architectures.  Chapter  5.  Representational  State  Transfer  (REST):  Ph.  D  /  Roy  T.  Fielding.  —  University  of  California,  Irvine.  —  2000.  [Электронный  ресурс]  —  Режим  доступа.  —  URL:  http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm  (дата  обращения  01.03.2013)
  3. Savitz  E.  Gartner:  Top  10  Strategic  Technology  Trends  For  2013  //  Forbes.  —  10/23/2012.  [Электронный  ресурс]  —  Режим  доступа.  —  URL:  http://www.forbes.com/sites/ericsavitz/2012/10/23/gartner-top-10-strategic-technology-trends-for-2013/  (дата  обращения  01.03.2013)
Проголосовать за статью
Конференция завершена
Эта статья набрала 0 голосов
Дипломы участников
У данной статьи нет
дипломов

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.