Научная статья на тему 'Использование нереляционного подхода в распределенной системе баз данных'

Использование нереляционного подхода в распределенной системе баз данных Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
302
57
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
БАЗА ДАННЫХ / РЕЛЯЦИОННАЯ / НЕРЕЛЯЦИОННАЯ / ПАРТИЦИОНИРОВАНИЕ / ШАРДИНГ / РЕПЛИКАЦИЯ / ИНТЕГРАЦИЯ

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Торган Юлия Николаевна, Зубрилина Татьяна Васильевна

Представлен вариант решения проблемы масштабирования и производительности реляционной базы данных, основанный на применении методов, используемых в NoSQL базах данных (шардинг и репликация).

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

The article presents the solution of scaling problem and performance of relational database, based on methods used in NoSQL databases (sharding and replication).

Текст научной работы на тему «Использование нереляционного подхода в распределенной системе баз данных»

2. Блеканов, И.C. Тематический краулинг на основе алгоритма HITS [Текст] / И.С. Блеканов, Д.С. Бон-даренко // Научно-технические ведомости СПбГПУ. -2010. -№ 3 (101). -С. 111-118.

3. Печников, А.А. Вебометрические исследования Web-сайтов университетов России [Текст] / А.А. Печников // Информационные технологии. -2008. -№ 11. -С. 74-78.

4. Печников, А.А. Разработка инструментов для вебометрических исследований гиперссылок научных сайтов [Текст] / А.А. Печников, Н.Б. Луговая, Ю.В. Чуйко, И.Э. Косинец // Вычислительные технологии. -2009. -Т. 14. -№ 5. -С. 66-78.

5. Печников, А.А. Исследование связности научно-образовательного Веба [Текст] / А.А. Печников, А.В. Чирков, Ю.В. Чуйко // Ученые записки Петрозаводского государственного университета. Естественные и технические науки. -2011. -№ 8 (121). -С. 111-113.

6. Arasu, A. Searching the web [Text] / A. Arasu, J. Cho, H. Garcia-Molina [et al.] // ACM Transactions on Internet Technology. -Aug. 2001. -Vol. 1. -№ 1. -P. 2-43.

7. Bar-Ilan, J. How much information the search engines disclose on links to a web page? A case study of the

«Cybermetrics» home page [Text] / J. Bar-Ilan // Proc. VIII Intern. Conf. on Scientometrics and Informetrics. -2001. -Vol. 1. -P. 63-73.

8. Cho, J. The evolution of the web and implications for an incremental crawler [Text] / J. Cho, H. GarciaMolina // In Proc. of the XXVI Intern. Conf. on Very Large Databases. -CA, USA. -2000. -P. 200-209.

9. Mohr, G. Introduction to Heritrix: an open source archival quality web crawler [Text] / G. Mohr, M. Kimpton, M. Stack [et al.] // Proc. of the 4th International Web Archiving Workshop (IWAW'04). -Bath, UK. -2005. -P. 15.

10. Najork, M. High-Performance Web Crawling [Text] / M. Najork, A. Heydon. -MA, USA: Kluwer Academic Publishers, 2002. -P. 25-45.

11. Raghavan, S. Crawling the Hidden Web [Text] / S. Raghavan, H. Garcia-Molina. -San Francisco, CA, USA: Morgan Kaufmann Publishers Inc., 2001. -P. 129-138.

12. Sang, Ho Lee. On URL normalization [Text] / Lee Sang Ho, Sung Jin Kim, Seok Hoo Hong // Proc. of the Intern. Conf. on Computational Science and its Applications (ICCSA). -2005. -Vol. 2. -P. 1076-1085.

УДК 681.3

Ю.Н. Торган, Т.В. Зубрилина

использование нереляционного подхода

в распределенной системе баз данных

Резкое увеличение объемов данных привело к появлению новых тенденций в области систем хранения. Одна из популярных тенденций - использование NoSQL баз данных (БД). Названный термин подразумевает под собой ряд подходов, которые реализуют модели БД, имеющие существенные отличия от используемых в традиционных реляционных СУБД.

Для классических реляционных СУБД проблемой является работа с данными большого объема в проектах с высокой нагрузкой. По этим причинам основными принципами NoSQL стали отказ от реляционной модели для учета специфики обрабатываемых данных, а также горизонтальная масштабируемость до сотен и тысяч серверов для обеспечения необходимой скорости работы.

Однако это выявило проблему нереляционных БД: невозможно одновременно выполнить

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

Альтернативным вариантом является написание «нереляционной надстройки» над существующей реляционной СУБД с использованием методов нереляционного подхода [2].

Существуют три типовых метода, используемые в нереляционных БД для решения проблемы масштабирования: партиционирование (partitioning), репликация (replication) и шардинг (sharding).

Партиционирование представляет собой раз-

биение больших структур баз данных, таких, как таблицы и индексы, на логические части по некоторым выбранным критериям, позволяющее увеличить скорость выборки данных из этих таблиц. Однако оно уже выполняется средствами большинства известных СУБД.

Репликация представляет собой синхронное (асинхронное) копирование данных с ведущих серверов на ведомые (возможно также на ведущие) сервера. Ведущие сервера называют «master-сервер», ведомые - «slave-сервер». В таких системах запрос на чтение данных можно сделать любому серверу, а запрос на изменение -только мастеру [3].

В случае синхронной репликации все запросы на изменение сразу же дублируются master-сервером на все slave-сервера. При синхронной репликации не придется заботиться о реплика-ционном лаге, однако это отразится на скорости отработки запросов на изменение и вставку данных. В случае асинхронной репликации master-сервер ведет журнал изменений и через определенные промежутки времени рассылает журнал всем slave-серверам для синхронизации данных. В связи с наличием проблем в существующей ИС, связанных с ограничением пропускной способности чтения данных, для реализации надстройки выбрана асинхронная репликация (master-slave).

Шардинг представляет собой разделение данных на уровне ресурсов. В реализации над-

стройки выбран горизонтальный шардинг, т. е. размещение разных данных одной таблицы на нескольких серверах. На сегодняшний день для шардинга не существует решения на уровне известных платформ, т. к. он - специфическая задача для отдельно взятого приложения. Главное преимущество использования данного метода в надстройке - горизонтальный шардинг бесконечно масштабируем [3].

На рис. 1 представлена общая схема нереляционной надстройки.

На схеме показано взаимодействие сервера балансировки нагрузки LoadBalancer, мастер- и слэйв-серверов. Запросы на чтение данных отправляются сервером балансировки всем серверам, запросы на изменение данных отправляются только мастер-серверам. Периодически мастер-серверы асинхронно отправляют журнал с изменениями слэйв-серверам для синхронизации данных. Для настройки и масштабирования в системе предусмотрена программа для администратора.

При проектировании системы использовался объектно-ориентированный подход. Диаграммы построены с использованием языка UML в среде Rational Rose. Основными компонентами нереляционной надстройки системы являются:

Load Balancer - серверная программа, взаимодействующая с клиентом, предназначена для распределения нагрузки на серверы;

Administrator

© 1

Load Balancer

Users

\

© ©

Master -1

РСУБД

Master #N

РСУБД

A

a

Slave #1. M

РСУБД

Slave #1.M

■С

РСУБД

А

Slave #N.1

РСУБД

Slave #N.M

РСУБД

о

Рис. 1. Общая схема проектируемой системы

SocketApplication

*main(args : String[]) : void

«create»

_Y_

Socke tServer

LoadBalancer LoadBalancer ^>clientSocket : Socket

ServerDescriptor

Oport : int

<>isMaster : boolean <?keyFrom : char <£>keyTo : char OlastSyncDate : Date

*ServerDescriptor() *ServerDescriptor() *getlastSyncDate()

*SocketServer(socket : Socket) *run() : void

LoadBalancer

LcountGetQuerv : int ^serverList : List<ServerDescriptor>

^LoadBalancer() *getlnstance(): LoadBalancer *execute(strQuery : String): String i^addNewMaster(parameters : StringQ): String ^addNewSlave(parameters : Stringf]): String ^getQueryExecute(query Query): String ^changeDataQueryExecute(query Query) String ^getMaster(address InetAddress. port: int) : ServerDescriptor ^locateNeedMaster(ch : char): ServerDescriptor ^locateNeedServersfch char): List<ServerDescriptor>

¿L

«create»"! *

<<create>>

JL

Query

^>parameters[] : String = null

♦QueryO

^getArrayParametersFromStringO *getQueryType()

*getQueryParameters()

QueryType

OPUT

OGET

¿»REMOVE

OUPDATE

OADD_MASTER

OADD_SLAVE

<?MOVE DATA

Рис. 2. Диаграмма классов Load Balancer

Server Programm - универсальная серверная программа для master- и slave-сервера, взаимодействующая с балансером, принимает запросы от балансера, обрабатывает и выполняет их, результаты выполнения запросов отправляет обратно балансеру. Содержит компоненты для реализации обработки и выполнения запросов. Для работы с реляционной базой данных в СУБД MS SQL Server используется фреймворк Hibernate;

Lib - пакет утилитных классов, необходимых для работы в сети, например сериализация, десе-риализация объектов. Утилитные классы уже в скомпилированном виде могут поставляться со всеми перечисленными программами в виде jar-архива.

Для каждой компоненты нереляционной надстройки построена диаграмма классов, предназначенная для представления статической структуры модели системы в терминологии классов объектно-ориентированного программирования (рис. 2).

Load Balancer предназначен для управления нагрузкой на серверы в системе. Он определяет, к какому серверу отправлять запрос на чтение - решает, считывать с master-сервера или slave-сервера; и к какому на запись - локализует master-сервер с необходимыми данными. Класс

Load Balancer (рис. 2) реализует основную логику работы - обработку запросов клиентов или администраторов системы: определение типа запроса, локализацию сервера по необходимому ключу в запросе, транспортировку запроса, обработку ответов от серверов и транспортировку результатов клиенту или администратору.

Так как Load Balancer представляет собой консольную программу, работающую со всеми компонентами в системе по TCP/IP, предусмотрены классы SocketServer, отвечающий только за работу с клиентом или администратором (общение с серверами хранения данных происходит в основном классе LoadBalancer), и SocketApplication, запускающий работу сервера. Благодаря реализованной схеме классы, отвечающие за работу c клиентами и администраторами по TCP/IP, могут быть заменены на HTTP-сервер, в результате чего балансер сможет принимать запросы по протоколу HTTP.

Сервер хранения данных в проектируемой системе представляет собой универсальную программу как для master-сервера, так и для slave-сервера, поэтому сервер при запуске не знает, какую роль он будет исполнять.

Функциональность сервера описывают три интерфейса:

Рис. 3. Диаграмма классов Server

• BaseServer - интерфейс, определяющий общий функционал для master- и slave-серверов. К нему относятся установка типа сервера setServerMode() и общий метод для мастера и слэйва - getQueryResult(), т. к. запрос на чтение данных в системе может осуществляться как с master-сервера, так и со slave-сервера;

• MasterServer - интерфейс, описывающий функциональность master-сервера по выполнению запросов на изменение данных executeQuery();

• SlaveServer - интерфейс, описывающий функциональность slave-сервера, - возможность обновления данных после получение журнала изменений.

В системе предусмотрен один универсальный класс Server (рис. 3), реализующий все три интерфейса, это сделано в связи с тем, что master-сервер может прямо в процессе работы переключиться и стать slave-сервером, аналогичная ситуация для slave-сервера.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

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

ней рассылки журнала slave-серверам. Данная функциональность используется только master-сервером. SyncThread реализует асинхронную отправку журнала списку slave-подписчиков.

BaseDataStorage - интерфейс, описывающий функциональность работы любого хранилища. Выделен специально в случае если хранилище необходимо будет изменить, допустим, с реляционной СУБД на другой формат хранения данных, например, xml-формат. Storage - класс, реализующий интерфейс BaseDataStorage для реляционной СУБД.

Система реализована средствами языка Java. Для реализации работы с реляционной СУБД использовался фреймворк Hibernate.

Для начала работы с системой необходимо запустить сервер, после запуска на консоль сервер выведет свой адрес IP и порт. Следующим шагом является запуск работы сервера балансировки нагрузки (его IP адрес и порт прописаны в программе).

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

■ Balancer

►► Л

as щ m й я

□о

О

"C:\Program ... =Actainistrator process=

For working with data you can U3e next ccirn <all information about new applicants-, exj For administration you can use next ccmman: Chosen balancer:localho3t/127.0.0.1:1234

add master 127.0.0.1 41391 A Z Ok

put Torgac 13.07.19S9 OK

put Zorro 01.01.2001 OK

add slave 127.0.0.1 41402 127.0.0.1 41391 Ok

get Torgan Torgan 13.07.1989 get Zorro Zorro 01.01.2001

=Load Balancer=

got request: ADD_MASTER

result -> Ok

got request: FUT

result -> OK

got request: POT

result -> OK

got request: ADD_SLAVE

Slave wa3 successfully added

result -> Ok

got request: GET

get query gees to: /127.0.0.1 41391 result -> Torgan 13.07.1989 got request: GET

get query goes to: /127.0.0.1 41402 result -> Zorro 01.01.2001

Ъ Server

►►

a

ви m m

□ G

X

9

* +

1

а

_= Server =_ Network addre33: 127.0.0.1 41391

Got query. Start processing... query for setting 3erver mode result -> Ok

Got query. Start proce33ing... executing PUT query query for changing data: PUT result -> OK

Got query. Start processing... executing PUT query query for changing data: PUT result -> OK

Got query. Start processing... adding new slave... result -> Ok

Got query. Start processing... get query result of GET query query GET

result -> Torgan 13.07.1989

_= Server =_ Network address: 127.0.0.1 41402

Got query. Start processing___

query for setting server mode result -> Ok

Got query. Start processing... JOURNAL UPDATE result ->

Got query. Start processing... get query result of GET query] query GET

result -> Zorro 01.01.2001 Got query. Start processing... JOURNAL UPDATE result ->

Got query. Start prcce33ing... JOURNAL UPDATE result ->

Got query. Start processing___

JOURNAL UPDATE result ->

Рис. 4. Пример работы реализованной системы

При добавлении первого master-сервера системный администратор использует команду add master. В качестве параметров кроме адреса сервера указывается полный диапазон ключей. В дальнейшем при добавлении нового master-сервера администратору следует указать только один ключ «keyFrom» - нижнюю границу для добавляемого master-сервера. Balancer по заданным параметрам распределит данные между серверами: укажет master'1 передать необходимые данные на новый master'2. Таким образом, добавле-

ние новых серверов не требует ручной работы по перемещению данных, новые серверы сами конфигурируют свою работу в соответствии с командами администратора. Пример работы системы представлен на рис. 4.

Предложенная нереляционная надстройка позволит обеспечить хорошую горизонтальную масштабируемость, повышение производительности, надежности и отказоустойчивости существующей ИС.

СПИСОК ЛИТЕРАТУРЫ

1. NOSQL Patters [Электронный ресурс] // Pragmatic Programming Techniques // Режим доступа: http:// horicky.blogspot.com/2009/11/nosql-patterns.html (Дата обращения Nov. 2009)

2. NoSQL - подходы к решению типичных задач [Электронный ресурс] // Highload Web // Режим досту-

па: http://highload.com.ua/index.php/2010/06/03 (Дата обращения June 2010)

3. Шардинг, партиционирование, репликация - зачем и когда? [Электронный ресурс] // Highload Web // Режим доступа: http://highload.com.ua/index.php/2009/05/06 (Дата обращения May 2009)

i Надоели баннеры? Вы всегда можете отключить рекламу.