Научная статья на тему 'ФОРМИРОВАНИЕ ОЦЕНОЧНОГО СТЕНДА ДЛЯ СРАВНИТЕЛЬНОГО АНАЛИЗА ФУНКЦИОНАЛЬНОСТИ МЕХАНИЗМОВ ПОЛНОТЕКСТОВОГО ПОИСКА БАЗ ДАННЫХ В ОБЛАЧНОЙ ИНФРАСТРУКТУРЕ YANDEX CLOUD'

ФОРМИРОВАНИЕ ОЦЕНОЧНОГО СТЕНДА ДЛЯ СРАВНИТЕЛЬНОГО АНАЛИЗА ФУНКЦИОНАЛЬНОСТИ МЕХАНИЗМОВ ПОЛНОТЕКСТОВОГО ПОИСКА БАЗ ДАННЫХ В ОБЛАЧНОЙ ИНФРАСТРУКТУРЕ YANDEX CLOUD Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
43
11
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПОЛНОТЕКСТОВЫЙ ПОИСК / SPHINX / ELASTICSEARCH / YANDEX CLOUD

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Романенко А. И.

В наше время, когда количество информации, находящейся в сети Интернет, базах данных и электронных документах растет с каждым днем, поиск нужной информации становится все более сложным и трудоемким. Полнотекстовый поиск помогает решить эту проблему, позволяя пользователям быстро и эффективно находить нужную информацию. Полнотекстовый поиск является одним из самых распространенных и эффективных способов поиска информации в интернете. Он используется в различных областях, включая базы данных, электронную почту, сайты и другие источники информации. Например, в больших корпоративных базах данных полнотекстовый поиск может использоваться для быстрого поиска информации о клиентах, продуктах или услугах. В электронной почте полнотекстовый поиск может помочь пользователю быстро найти все сообщения, которые содержат определенные ключевые слова или фразы. На сайтах полнотекстовый поиск может использоваться для поиска информации о товарах, услугах или статьях. В данной статье демонстрируется формирование оценочного стенда для сравнительного анализа функциональности механизмов полнотекстового поиска в различных базах данных с использование облачной инфраструктуры Yandex Cloud. Для сравнительного анализа были выбраны механизмы полнотекстового поиска, встроенные в СУБД PostgreSQL, MySQL, Microsoft SQL Server, а также внешние системы полнотекстового поиска Sphinx и Elasticsearch. Описана подробная схема для установки и настройки выбранных механизмов в облачной инфраструктуре, а также приведены результаты тестирования на подготовленных данных.

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

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Романенко А. И.

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

CREATION OF AN EVALUATION STAND FOR A COMPARATIVE ANALYSIS OF THE FUNCTIONALITY OF FULL-TEXT DATABASE SEARCH MECHANISMS IN THE YANDEX CLOUD INFRASTRUCTURE

Nowadays, when the amount of information on the Internet, databases and electronic documents is growing every day, the search for the necessary information is becoming more and more complex and time-consuming. Full-text search helps to solve this problem, allowing users to quickly and efficiently find the information they need. Full-text search is one of the most common and effective ways to search for information on the Internet. It is used in various fields, including databases, email, websites and other sources of information. For example, in large corporate databases, full-text search can be used to quickly find information about customers, products or services. In email, a full-text search can help the user quickly find all messages that contain certain keywords or phrases. On websites, full-text search can be used to find information about products, services or articles. This article demonstrates the formation of an evaluation stand for a comparative analysis of the functionality of full-text search mechanisms in various databases using the Yandex Cloud infrastructure. For comparative analysis, full-text search mechanisms built into PostgreSQL, MySQL, Microsoft SQL Server DBMS, as well as external full-text search systems Sphinx and Elasticsearch were selected. A detailed scheme for installing and configuring the selected mechanisms in the cloud infrastructure is described, as well as the results of testing on the prepared data.

Текст научной работы на тему «ФОРМИРОВАНИЕ ОЦЕНОЧНОГО СТЕНДА ДЛЯ СРАВНИТЕЛЬНОГО АНАЛИЗА ФУНКЦИОНАЛЬНОСТИ МЕХАНИЗМОВ ПОЛНОТЕКСТОВОГО ПОИСКА БАЗ ДАННЫХ В ОБЛАЧНОЙ ИНФРАСТРУКТУРЕ YANDEX CLOUD»

Формирование оценочного стенда для сравнительного анализа функциональности механизмов полнотекстового поиска баз данных в облачной инфраструктуре Yandex Cloud

А.И. Романенко

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

В данной статье демонстрируется формирование оценочного стенда для сравнительного анализа функциональности механизмов полнотекстового поиска в различных базах данных с использование облачной инфраструктуры Yandex Cloud. Для сравнительного анализа были выбраны механизмы полнотекстового поиска, встроенные в СУБД PostgreSQL, MySQL, Microsoft SQL Server, а также внешние системы полнотекстового поиска Sphinx и Elasticsearch. Описана подробная схема для установки и настройки выбранных механизмов в облачной инфраструктуре, а также приведены результаты тестирования на подготовленных данных.

Ключевые слова— полнотекстовый поиск, Sphinx, Elasticsearch, Yandex Cloud.

I. Введение

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

Механизмы полнотекстового поиска - это

А. И. Романенко, МГУ им. М.В. Ломоносова (e-mail: alex.rom1519@gmail.com)

специальные программные средства, которые позволяют осуществлять поиск информации, по ключевым словам, в текстовых документах. Они позволяют находить не только точное совпадение слов, но и синонимы, словоформы, а также учитывать контекст и порядок слов в запросе.

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

Данная стать посвящена рассмотрению механизмов полнотекстового поиска в различных базах данных в облачном хранилище Yandex Cloud.

II. Архитектура оценочного стенда

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

Архитектура оценочного стенда визуально отображена на схеме ниже и представлена следующими компонентами:

• Программный комплекс, развёрнутый на

локальной машине пользователя

• Облачная виртуальная машина Yandex Cloud,

на которой развёрнуты следующие компоненты:

o СУБД PostgreSQL o СУБД MySQL o СУБД Microsoft SQL Server o Система полнотекстового поиска Sphinx

o Система полнотекстового поиска

Elasticsearch o Система сбора статистики

От

s!

Рис. 1 - Архитектура оценочного стенда

III. Функционал программного комплекса

Для практического сравнения механизмов полнотекстового поиска определим следующие критерии.

• Скорость построения индекса

• Размер индекса

• Скорость выполнения следующих типов

запросов:

o Запрос на естественном языке o Запрос в логическом режиме o Префиксный поиск o Фразовый поиск

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

Функционал программного комплекса состоит из следующих модулей:

• Модуль создания полнотекстового индекса

• Модуль выполнения полнотекстовых запросов

различных типов

• Модуль ручного ввода запросов, напрямую к

СУБД

• Модуль работы со словарями

• Модуль конфигурации подключений к

выбранным СУБД и внешним механизмам

• Модуль сбора статистики

Рис. 2 - Интерфейс программного комплекса

IV. Создание виртуальной машины Yandex Cloud

Для работы оценочного стенда и получения практических параметров было использовано облачное хранилище данных «Yandex Cloud» и сервис «Yandex Compute Cloud», который предоставляет вычислительные мощности для создания виртуальных машин и размещения своих проектов.

Перед созданием виртуальной машины необходимо:

• Зарегистрировать аккаунт «Яндекс ID»,

который позволяет проходить авторизацию в сервисах Яндекса.

• Авторизоваться с помощью аккаунта «Яндекс

ID» в сервисе «Yandex Cloud».

• На странице биллинга подключить платёжный

аккаунт, указав свои персональные данные и убедиться, что он находится в статусе ACTIVE или TRIAL_ACTIVE.

• Создать каталог в сервисе «Yandex Cloud»,

указав его имя.

• Создать сервисный аккаунт (аккаунт, от имени

которого программы могут управлять ресурсами в Yandex Cloud), указав имя и роль в каталоге editor.

Также, для доступа к виртуальной машине по протоколу SSH, нужна пара ключей: открытый ключ размещается на ВМ, а закрытый ключ хранится у пользователя. Такой способ более безопасен, чем подключение по логину и паролю. Для создания пары ключей в ОС «Windows 10» необходимо:

• Ввести команду

ssh-keygen -t ed25519

• Указать имена файлов, в которые будут

сохранены ключи.

• Ввести пароль для закрытого ключа.

Для создания виртуальной машины необходимо перейти на официальный сайт «https://cloud.yandex.ru/», зайти в личный кабинет, выбрать раздел «Виртуальные

машины» и выбрать пункт «Создать ВМ». Далее откроется меню создания виртуальной машины, где потребуется ввести базовые параметры:

• Имя виртуальной машины

• Описание

• Зона доступности

В качестве операционной системы была выбрана Ubuntu версии 22.04.

достаточно 2-х ядер. Гарантированная доля vCPU, которая будет выделена виртуальной машине - была выбрана 100%, так как виртуальная машина, с гарантированной долей меньше 100%, могла бы не предоставить нам всю заявленную вычислительную мощность, что могло бы повлиять на результаты наших исследований. Объём оперативной памяти был установлен в 2 ГБ. Опция «Прерываемая» означает, что сервисы Яндекса могут остановить машину в любой момент и гарантированно, по истечению 24 часов с момента запуска, однако она предоставляет скидку на услугу.

Рис. 3 - Базовые параметры

В процессе настройки облачного хранилища под задачу формирования оценочного стенда были определены следующие характеристики создаваемого диска, такие как:

• Тип диска

• Размер диска

Был выбран загрузочный диск для операционной системы типа SSD, размером 50 ГБ с максимальным значением ЮPS (количество операций чтения / записи, выполняемых диском в секунду) 4000/4000 и максимальной пропускной способность 60/60 МБ/с.

Рис. 5 - Вычислительные ресурсы

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

Сетевые настройки

Подсеть ? Публичный адрес Дополнительно Внутренний VI адрес

{Маи11:/с1еГаи11:ти-сеп1га11-Ь ч/

Автоматически Список Без адреса Защита от ООоБ-атак ? Автоматически Вручную

Рис. 4 - Диски и файловые хранилища

Далее определяются параметры вычислительных ресурсов машины. Yandex Compute Cloud предоставляет различные виды физических процессоров. Выбор платформы гарантирует тип физического процессора в дата-центре и определяет набор допустимых конфигураций vCPU (виртуальный процессор) и RAM (оперативная память). Также, к виртуальной машине можно добавить графический ускоритель (GPU).

Для нашей задачи была выбрана платформа «Intel Ice Lake», которая предоставляет в пользование процессор «Intel Xeon Gold 6338» с максимальным количеством ядер 96 и базовой частотой в 2.00 Гц. Для нашей задачи

Рис. 6 - Сетевые настройки

В блоке «Доступ» были указаны данные для доступа к виртуальной машине:

• Сервисный аккаунт, который мы создали

раннее

• Имя пользователя

• В поле SSH-ключ скопировано содержимое

файла открытого ключа, сгенерированного раннее

Также опционально можно разрешить доступ к серийной консоли. Серийная консоль — это способ получить доступ к виртуальной машине вне зависимости от состояния сети или операционной системы. Таким образом, вы можете использовать консоль, например, для устранения неисправностей ВМ или при возникновении проблем с доступом через SSH.

Доступ

Сервисный аккаунт ? Логин' ? 55Н-КПЮЧ* ?

Дополнительно

fts-compute-cloud ^ или Создать новый fts_user

ssh-ed25519

AAAAC3NzaC1 IZDI1 NTE5AAAAIAU+tG1xP+X8R KNY9Xpv0nz1 reí Kpb/+WDvWUIvwlm RP xeylo@ DESKTO P-9CE8TL4

Разрешить доступ к сери/чей консоли ?

Рис. 7 - Доступ

После создания виртуальной машины мы можем узнать публичный Г?у4 адрес для подключения в разделе «Сеть» виртуальной машины и подключиться к ней по протоколу SSH с помощью ключа, сгенерированного раннее.

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

Рис. 8 - Сеть

Для подключения к виртуальной машине

c:\_tmp\ssh\yc_key_fts

использовалась команда

ssh ^

fts_user@51.25 0.8 4.181

После этого предоставляется управление виртуальной машиной.

PS C:\Users\xeylo> ssh - i c:\_tmp\ssh\yc_key_fts fts_user@51.259.84.181 Enter passphrase for key 'c:\_tmp\ssh\yc_key_fts":

Welcome to Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-70-generic xS6_64)

* Documentation: https://help.ubuntu.com

* Management: https://landscape.canonlcal.com

* Support: https://ubuntu.com/advantage

System informatii

of Mon May 1 09:47:35 PM LTTC 2023

System load: 1.678125 Processes: 138

Usage of /: 8.6% of 49.12GB Users logged in: 0

Memory usage: 9% IPv4 address for eth0: 10.128.0

Swap usage: 0%

Expanded Security Maintenance for Applications

updates can be applied Immediately.

Last login: Mon May 1 01:26:42 2023 from 109.252.220.135

fts_user@fts: $ _

Рис. 9 - Управление виртуальной машиной

V. УСТАНОВКА И НАСТРОЙКА POSTGRESQL

Для установки PostgreSQL в ОС Ubuntu с помощью apt (advanced packaging tool) — программы для установки, обновления и удаления программных пакетов в операционных системах Debian и основанных на них есть два способа: через репозиторий Ubuntu и через официальный репозиторий PostgreSQL. В первом случае установка требует меньше команд, однако версия PostgreSQL будет установлена та, которая лежит в

репозитории Ubuntu и может быть не последней. Второй способ требует большего числа команд, однако гарантирует, что версия СУБД будет последней. Воспользуемся вторым способом. Создадим файл pgdg.list в директории /etc/apt/sources.listd, который будет содержать адрес официального репозитория PostgreSQL, в зависимости от конкретно вашей версии Ubuntu.

sudo sh -c ' echo "deb

http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" >

/etc/apt/sources.list.d/pgdg.list'

Затем добавим PostgreSQL GPG (GNU Privacy Guard) ключ в менеджер пакетов. APT будет использовать этот ключ для проверки подлинности пакетов в репозитории.

wget --quiet -O -

https://www.postgresql.org/media/keys/ACCC4C F8.asc | sudo apt-key add -

Теперь обновим списки пакетов, чтобы APT знал, где найти официальные пакеты PostgreSQL.

sudo apt update -y

Можно заметить, что команда теперь включает адрес официального репозитория PostgreSQL при проверке наличия пакетов.

Reading package lists... Done Building dependency tree... Done Reading state information... Done

Рис. 10 - Проверка наличия пакетов

Установим PostgreSQL с помощью команды

sudo apt install -y postgresql postgresql-contrib postgresql-client

Проверим установленную версию PostgreSQL с помощью команды

sudo dpkg --status postgresql

fts_user@fts: $ sudo dpkg --status postgresql Package: postgresql Status: install ok installed Priority: optional Section: database Installed-Size: 71

Maintainer: Debian PostgreSQL Maintainers <team+postgresql@tracker.debian.org> Architecture: all

Source: postgresql-common (248.pgdg22.04+1)

I у.ч11 i«t Чв ЯШк+Т'Р

Depends: postgresql-15 Suggests: postgresql-doc

Description: object-relational SQL database (supported version) This metapackage always depends on the currently supported PostgreSQL database server version.

Рис. 11 - Проверка установленной версии

Установка PostgreSQL завершена, запустим PostgreSQL сервис

sudo systemctl start postgresql.service

Проверим статус PostgreSQL, выполнив приведенную ниже команду

sudo systemctl status postgresql.service

Fts_user@fts: $ sudo systemctl status postgresql.service • postgresql.service - PostgreSQL RDBMS

Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled) Active:[active (exited)|since Mon 2923-05-01 23:05:08 UTC; 6min ago Main PID: 4737 (code=exited, status=0/SUCCESS) CPU: 1ms

CONNECTIONS AND AUTHENTICATION

Connection Settings -

listen_addresses = '*' # what IP address(es) to listen on;

# comma-separated list of addresses;

# defaults to 'localhost'; use "*' for all

# (change requires restart) port = 54-32 # (change requires restart) max_connections = 100 # (change requires restart) #superuser_reserved_connections = 3 # (change requires restart) unix_socket_directories = '/var/run/postgresql1 # comma-separated list of directories

# (change requires restart) ftunix socket group = # (change requires restart) #unix_socket jermissions = 0777 # begin with 0 to use octal notation

# (change requires restart) #bonjour = off # advertise server via Bonjour

# (change requires restart) #bonjour_name = 1" # defaults to the computer name

# (change requires restart)

Рис. I2 - Проверка статуса службы

Служба должна быть в статусе active.

Проверим подключение к базе данных. По умолчанию для доступа пользователя к базе данных пароль не требуется. Зайдём в PostgreSQL shell и выведем список всех доступных баз на сервере.

Рис. 13 - Список доступных баз

Создадим базу данных fts_db с помощью команды

create database fts_db;

Создадим учётную запись пользователя fts_db_user с паролем fts_pass

create user fts_db_user with encrypted password 'fts_pass';

Выдадим пользователю права доступа к созданной БД

grant all privileges on database fts_db to fts_db_user;

Проверим подключение с правами пользователя

psql -hlocalhost -U fts_db_user -W fts_db

tsuserffts: $ psql -hlocalhost -U fts_db_user -W fts_db isql (15,2 (Ubuntu 15.2-l.pgdg22,0d+l)>

¡SL connection (protocol: TLSvl.3, cipher: TLS_AES_256_GCM_SHA384, compression: off) "ype "help" for help.

:ts_db=> \conninfo

'on are connected to database "ftsdb" as user "ftsdbuser" on host "localhost" (address "::1") at port "5432" ■SL connection (protocol: TLSvl.3, cipher: TLS_AES_256_GCM_SHA33i, compression: off) ts db=> .

Рис. 14 - Проверка подключения

Создадим схему FTS, которая будет содержать целевые таблицы с данными для использования функционала разрабатываемого модуля

CREATE SCHEMA FTS;

Создадим в новой схеме таблицу, по которой в дальнейшем будет происходить поиск.

CREATE TABLE FTS.text_table_1k ( id int4, title text, body text

);

Загрузим в созданную схему подготовленный дамп данных

COPY FTS.text_table_1k (id, title, body) FROM '

/home/fts_user/fts_data/text_table_1k.csv' DELIMITER ',' CSV HEADER;

Так как PostgreSQL по умолчанию принимает только локальные подключения, настроим возможность подключения к базе извне. Для этого изменим текуший конфигурационный файл postgresql.conf, который лежит по адресу /etc/postgresql/15/main. Установим значение параметра listen_addresses = '*', чтобы PostgreSQL мог принимать запросы на подключение с любого IP адреса.

Рис. 15 - Настройка внешнего подключения

Далее выдадим нашему пользователю fts_db_user сетевой доступ к базе данных fts_db с любого адреса после авторизации по md5-паролю. Для этого добавим в конфигурационный файл pg_hba.conf следующую строку host fts_db fts_db_user 0.0.0.0/0 md5 Затем перезапустим PostgreSQL. Настройка PostgreSQL завершена.

VI. Установка и настройка MySQL

Для установки MySQL с официального репозитория разработчиков перейдём на страницу загрузки официального сайта dev.mysql.com, выберем последнюю версию MySQL APT Repository и выполним команду для её загрузки

wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.25-1_all.deb Установим пакет

sudo dpkg -i mysql-apt-config_0.8.25-|1_all.deb

В процессе установки выберем следующие параметры:

• MySQL Server & Cluster: mysql-8.0

• MySQL Tools & Connectors: Enabled

• MySQL Preview Peckages: Enabled Обновим репозиторий

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

sudo apt-get update Установим MySQL сервер sudo apt-get install mysql-server В процессе установки зададим пароль для root пользователя fts_root_pass и выберем плагин аутентификации по умолчанию «Strong Password Encryption».

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

• Использование компонента VALIDATE

PASSWORD (установить уровень валидации, выбрав из: 0 - низкий, 1 - средний, 2 -высокий)

• Изменение пароля от root (скрипт оценит

надёжность введённого пароля и запросит ваше согласие на его использование)

• Удаление анонимных пользователей

• Запрет на удалённый логин под root

• Удаление тестовой базы и доступа к ней

• Обновление таблицы привилегий sudo mysql_secure_installation

Настройка безопасности завершена.

Создадим новую базу данных fts_db

CREATE DATABASE fts_db;

Так как изначально MySQL слушает только localhost, для прослушивание всех адресов необходимо отредактировать файл конфигурации MySQL и добавить или изменить значение опции bind-address. Вы можете установить один IP-адрес или диапазоны IP-адресов. Если адрес установлен 0.0.0.0, сервер MySQL принимает соединения на всех интерфейсах IPv4 хоста. Установим опцию в значение 0.0.0.0, для этого откроем файл mysqld.cnf в директории etc/mysql/mysql.conf.d и добавим туда строку

bind-address = 0.0.0.0

[mysqld]

pid-file = /var/run/mysqld/mysqld.pid

socket = /var/run/mysqld/mysqld.sock

datadir = /var/lib/mysql

log-error = /var/log/mysql/error.log

l^ind-address = 0.0.0.0 )

Рис. 16 - Настройка опции bind-address

Перезапустим службу MySQL sudo systemctl restart mysql Создадим пользователя fts_db_user с паролем fts_pass, который будет иметь доступ к базе с любого IP-адреса, для этого укажем параметр '%' после имени пользователя

CREATE USER ,fts_db_user'@,%' IDENTIFIED BY 'fts_pass';

Выдадим пользователю права доступа к созданной БД GRANT ALL PRIVILEGES ON fts_db.* TO ,fts_db_user'@,%';

Для подключения к базе с локального компьютера будем использовать следующие параметры:

• Хост: 51.250.84.181

• Порт: 3306

• База данных: fts_db

• Пользователь: fts_db_user

• Пароль: fts_pass

Также, для подключения необходимо добавить параметры соединения

allowPublicKeyRetrieval = true useSSL = false

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

VII. УСТАНОВКА И НАСТРОЙКА SQL SERVER

Чтобы настроить SQL Server в Ubuntu, выполним следующие команды в терминале для установки пакета mssql-server.

Импортируем открытые ключи GPG из репозитория

wget -qO-

https://packages.microsoft.com/keys/microsof t.asc | sudo tee

/etc/apt/trusted.gpg.d/microsoft.asc

Зарегистрируем репозиторий Ubuntu для SQL Server sudo add-apt-repository "$(wget -qO-https://packages.microsoft.com/config/ubuntu /2 0.04/mssql-server-2 022.list)" Теперь обновляем список пакетов sudo apt-get update

И устанавливаем ms sql server sudo apt-get install -y mssql-server После установки пакета настроим конфигурацию SQL Server

sudo /opt/mssql/bin/mssql-conf setup Выберем выпуск SQL Server Developer и зададим пароль.

fts_user@fts2: S sudo /opt/mssql/bin/mssql-conf setup Choose an edition of SQL Server:

1) Evaluation (freea no production use rightSj 180-day limit)

2) Developer (free., no production use rights)

3) Express (free)

4) Web (PAID)

5) Standard (PAID)

6) Enterprise (PAID) - CPU core utilization restricted to 20 physical/40 hyperthreaded

7) Enterprise Core (PAID) - CPU core utilization up to Operating System Maximum

8) I bought a license through a retail sales channel and have a product key to enter.

9) Standard (Billed through Azure) - Use pay-as-you-go billing through Azure.

10) Enterprise Core (Billed through Azure) - Use pay-as-you-go billing through Azure.

Details about editions can be found at

https://go.microsoft.com/fwlink/?LinkId=2109348&clcid=0x409

Рис. 17 - Выбор выпуска SQL Server Developer

Чтобы создать базу данных, необходимо подключиться с помощью средства, которое позволяет выполнять инструкции Transact-SQL в SQL Server. Инструмент для подключения к СУБД, по умолчанию, не устанавливается с сервером. Также для его установки используется другой репозиторий, нежели чем для самого SQL Server.

Импортируем открытые ключи GPG из репозитория: curl

https://packages.microsoft.com/keys/microsof t.asc | sudo tee

/etc/apt/trusted.gpg.d/microsoft.asc Зарегистрируем репозиторий Ubuntu curl

https://packages.microsoft.com/config/ubuntu /20.04/prod.list | sudo tee

/etc/apt/sources.list.d/msprod.list

Обновим список источников и выполним команду установки с помощью пакета разработчика unixODBC sudo apt-get update

sudo apt-get install mssql-tools unixodbc-dev

Для удобства добавим /opt/mssql-tools/bin/ в переменную среды PATH, чтобы sqlcmd или bcp можно было открыть из оболочки bash. Изменим переменную среды PATH в файле ~/.bash_profile с помощью следующей команды

export PATH="$PATH:/opt/mssql-tools/bin" Для локального подключения к базе будем использовать команду

sqlcmd -S localhost -U sa Создадим базу данных fts_db CREATE DATABASE fts_db;

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

USE fts_db;

CREATE LOGIN fts_db_login WITH

PASSWORD='Ftspass968' ;

CREATE USER fts_db_user FOR LOGIN fts_db_login;

EXEC sp_addrolemember 'db_owner', ' fts_db_user';

По умолчанию SQL Server слушает внешние IP-адреса, следовательно необходимости в дополнительных сетевых настройках нет. Для подключения будем использовать следующие параметры:

• Хост: 51.250.84.181

• Порт: 1433

• База данных: fts_db

• Пользователь: fts_db_login

• Пароль: Ftspass968

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

VIII. Установка и настройка Sphinx Для установки Sphinx добавим Sphinxsearch репозиторий и обновим список пакетов

sudo add-apt-repository

ppa:builds/sphinxsearch-rel22 sudo apt-get update Установим пакет Sphinxsearch sudo apt-get install sphinxsearch Поисковая система Sphinx успешно установлена на сервер. После установки Sphinx нуждается в дополнительной настройке. Конфигурации Sphinx должны храниться в файле sphinx.conf в каталоге /etc/sphinxsearch. Они состоят из трёх основных блоков: index, searchd и source.

Создадим конфигурационный файл и зададим конфигурацию

sudo nano /etc/sphinxsearch/sphinx.conf Блок source содержит тип источника данных, имя пользователя и пароль. Первый столбец sql_query должен содержать уникальный ID. Запрос SQL будет выполняться для каждого индекса, а затем передавать данные в индексный файл Sphinx. Блок source состоит из таких полей:

• type: тип источника данных. В нашем случае

это mysql (также система поддерживает типы

pgsql, mssql, xmlpipe2, odbc и т.д.)

• sql_host: имя хоста; в нашем случае это

localhost. В это поле нужно внести домен или

IP-адрес

• sql_user: имя пользователя (в нашем случае это

root)

• sql_pass: пароль

• sql_db: имя БД, в которой хранятся нужные

данные

• sql_query: запрос, который сбрасывает данные

в индексный файл Блок index содержит данные об источнике и путь к местонахождению данных.

• source: имя блока source. В нашем случае это

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

src1.

• path: путь к индексному файлу.

Блок searchd содержит порты и переменные для запуска демона Sphinx

• listen: порт, на котором нужно запустить

Sphinx, и используемый протокол.

Популярные протоколы Sphinx - sphinx

(SphinxAPI) и :mysql41 (SphinxQL)

• query_log: путь к логу запросов

• pid_file: путь к PID-файлу Sphinx

• max_matches: максимальное количество

совпадений, которое нужно выводить за один раз

• seamless_rotate: предотвращает останов searchd

при кэшировании большого объема данных

• preopen_indexes: указывает, нужно ли

предварительно открывать все индексы

• unlink_old: указывает, нужно ли отключить

старые копии индекс-файлов Ниже приведены все конфигурации файла sphinx.conf.

source text_table_1k_source {

pgsql

51.250.84.181

fts_db_user

fts_pass

fts_db

5432

type

sql_host sql_user sql_pass sql_db sql_port sql_query = \

SELECT ID, title, body AS ID, title, body \

FROM FTS.text_table_1k

}

index text_table_1k_index {

source = text_table_1k_source

path =

/var/lib/sphinxsearch/data/text_table_1k_ind ex

docinfo = extern

}

searchd {

listen = 9306:mysql41

log =

/var/log/sphinxsearch/searchd.log

query_log =

/var/log/sphinxsearch/query.log read_timeout = 5

max_children = 30

pid_file =

/var/run/sphinxsearch/searchd.pid seamless_rotate = 1 preopen_indexes = 1 unlink_old = 1

binlog_path =

/var/lib/sphinxsearch/data

}

Добавим данные новой конфигурации в индекс Sphinx

sudo indexer -all

user@fts: $ sudo ind nx 2.2.Il-id64-relea night (c) 2001-2016, night (c) 2008-2016,

g config file '/etc/ xing index 'texttab ING: Attnibute count ected 991 docs, 5.5 I ed 9.4 Mhits, 109.0% 1 991 docs, 5502856 1 0.236 sec, 2327940 1 3 reads, 0.001 sec 1 16 writes, 9.003 s

ogies Inc (http://sphinxseanch.com)

hinx.conf'...

g to none docinfo

92.34 docs/sec

I avg, 0.5 msec/call avg

II avg, 0.2 tnsec/call avg

Рис. 18 - Добавление индекса Sphinx

По умолчанию демон Sphinx отключен. Чтобы включить Sphinx, откроем /etc/default/sphinxsearch и изменим START=no на START=yes

sudo sed -i 's/START=no/START=yes/g' /etc/default/sphinxsearch

Перезапустим Sphinx с помощью systemctl

sudo systemctl restart

sphinxsearch.service

Для подключения к Sphinx с локального компьютера дополнительных настроек не требуется, так как в блоке searchd мы указали параметр listen = 9306:mysql41, Sphinx будет слушать все IP-адреса порта 9306. Аутентификации не требуется. Для подключения будем использовать следующие параметры:

• Хост: 51.250.84.181

• Порт: 9306 Настройка Sphinx завершена.

IX. Установка и настройка Elasticsearch Для установки Sphinx добавим Sphinxsearch репозиторий и обновим список пакетов

Компоненты Elasticsearch отсутствуют в репозиториях пакетов Ubuntu по умолчанию. Однако их можно установить с помощью APT после добавления списка источников пакетов Elastic.

Установим пакет OpenJDK 11, который необходим для работы Elasticsearch:

sudo apt install openjdk-11-jdk Добавим ключ и репозиторий Elasticsearch в APT: wget -qO -

https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

echo "deb

https://artifacts.elastic.co/packages/7_x/ap t stable main" | sudo tee

/etc/apt/sources.list.d/elastic-7.x.list Обновим список пакетов и установим Elasticsearch: sudo apt update

sudo apt install elasticsearch Настроим Elasticsearch, отредактировав файл конфигурации /etc/elasticsearch/elasticsearch.yml.

Рассмотрим некоторые наиболее важные настройки:

• cluster.name: имя кластера Elasticsearch

• node.name: имя узла Elasticsearch

• network.host: IP-адрес или имя хоста, на

котором будет работать Elasticsearch

• http.port: порт HTTP API Elasticsearch

• bootstrap.memory_lock: true, чтобы разрешить

Elasticsearch заблокировать память в области страницы, что уменьшает вероятность переключения контекста и улучшает производительность. По умолчанию Elasticsearch доступен только с локального адреса, для прослушивания внешних адресов зададим параметр network.host: 0.0.0.0 и http.port: 9200, также зададим имя кластера cluster.name: fts_cluster и имя узла node.name: fts_node. cluster.name: fts_cluster node.name: fts_node network.host: 0.0.0.0 http.port: 9200 bootstrap.memory_lock: true Запустим службу Elasticsearch sudo systemctl start Elasticsearch Проверим, что Elasticsearch работает, отправив запрос к его API:

curl http://51.250.84.181:9200/

Ответ сервера

{

"name" : "fts_node", "cluster_name" : "fts_cluster", "cluster_uuid" : "niwmztQkSpO9ODZGmHuQ", "version" : {

"number" : "7.17.9", "build_flavor" : "default", "build_type" : "deb", "build_hash": "83c34f45 6ae2 9d60e94d8 8 6e455e6a34 09bba9ed",

"build_date" : "2023-02-

02T21:56:19.031608185Z",

"build_snapshot" : false, "lucene_version" : "9.5.0", "minimum_wire_compatibility_version" : "6.8.0",

"minimum_index_compatibility_version"

: "6.0.0-beta1" },

"tagline" : "You Know, for Search"

}

Настройка Elasticsearch завершена.

X. Настройка системы сбора статистики

Для сбора статистических данных развернём ещё одну базу данных fts_statistics с помощью СУБД PostgreSQL

create database fts_statistics;

Создадим в ней схему fts и таблицы для сбора статистики по результатам выполнения запросов полнотекстового поиска «query_log_table» и результатам работы модуля построения полнотекстового индекса «index_log_table». Состав полей продемонстрирован на диаграмме.

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

¡ndex_log_table

з id

eng¡ne_name varchí 1able_name varcha

¡ndex_name varcha

ir de/ column name varcha ¡ndex_s¡ze creation_t¡me 1es1_dttnn

queryJog_table

¿s Id

eng¡ne_name varct

table_name varcr

search_column_name varch query varchar

query_type varcl

tests_num search_t¡me tesLdttm

Рис. 19 - Диаграмма базы данных статистики

Настройка системы сбора статистики завершена.

XI. РЕЗУЛЬТАТЫ РАБОТЫ ОЦЕНОЧНОГО СТЕНДА

Для получения практических параметров был скачан дамп русскоязычной википедии с сайта https://dumps.wikimedia.org/backup-index.html. Он имеет формат xml и содержит более 1 миллиона статей. Для проведения тестов были подготовлены таблицы размерностью 1000, 10000, 100000, 1000000 записей с полями title и body, содержащие заголовок и тело статей соответственно.

Для тестирования скорости работы поиска на естественном языке, поиск проводился по фразе «американский фильм». Время работы механизмов представлено на рисунке 20.

Рис. 20 - Поиск на естественном языке

Поиск на естественном языке дольше всех выполнял встроенный в MySQL механизм, наиболее быстрым оказался Sphinx. Среди встроенных механизмов быстрее всех был SQL Server.

Для тестирования скорости работы поиска в логическом режиме, поиск проводился по запросу «+фильм +боевик -драма».

Рис. 21 - Логический поиск

Префиксный поиск тестировался запросом «рус*» такой запрос должен найти все фрагменты, начинающиеся на «рус».

Рис. 22 - Префиксный поиск

Фразовый поиск тестировался на фразе «драматический сериал». Данный вид поиска ищет документы, в точности содержащие искомую фразу.

Рис. 23 - Фразовый поиск

Поиск на естественном языке, в логическом режиме, фразовый поиск и префиксный поиск дольше всех выполнял встроенный в MySQL механизм, наиболее быстрым в поиске на естественном языке, в логическом режиме и фразовом поиске оказался Sphinx, быстрее всего с префиксным поиском справился Elasticsearch. Среди встроенных механизмов быстрее всех на всех типах запросов отработал SQL Server.

XII. Заключение

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

полнотекстового поиска для различных баз данных в облачной инфраструктуре Yandex Cloud. Описана архитектура оценочного стенда и взаимодействие его компонент. Подробно продемонстрирована установка и настройка СУБД PostgreSQl, MySQL, SQL Server, а также внешних систем полнотекстового поиска Sphinx и Elasticsearch. Приведены результаты тестирования на подготовленных данных.

Библиография

[1] Официальная документация по полнотекстовому поиску PostgreSQL [Электронный ресурс]. - Режим доступа: https://www.postgresql.org/docs/current/textsearch.html

[2] Официальная документация по полнотекстовому поиску MySQL [Электронный ресурс]. - Режим доступа: https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html

[3] Официальная документация по полнотекстовому поиску Microsoft SQL Server [Электронный ресурс]. - Режим доступа: https://docs.microsoft.com/ru-ru/sql/relational-databases/search/full-text-search?view=sql-server-ver16

[4] Официальная документация Sphinx [Электронный ресурс]. -Режим доступа: http://sphinxsearch.com/docs/current.html

[5] Официальная документация Elasticsearch [Электронный ресурс]. -Режим доступа: https://www.elastic.co/guide/index.html

[6] Виноградова М.В. Обзор системы полнотекстового поиска в постреляционной базе данных PostgreSQL [Электронный ресурс]. -Режим доступа: https://cyberleninka.ru/article/n/obzor-sistemy-polnotekstovogo-poiska-v-postrelyatsionnoy-baze-dannyh-postgresql/viewer

[7] Бартунов О., Сигаев, Ф. Введение в полнотекстовый поиск в PostgreSQL [Электронный ресурс]. - Режим доступа: http://citforum.ru/database/postgres/fts/

[8] Полнотекстовый поиск (Full-Text Search) в Microsoft SQL Server [Электронный ресурс]. - Режим доступа: https://info-comp.ru/sisadminst/486-full-text-search-ms-sql-server.html

[9] Виноградова М.В. Обзор системы полнотекстового поиска в постреляционной базе данных PostgreSQL [Электронный ресурс]. -Режим доступа: https://cyberleninka.ru/article/n/obzor-sistemy-polnotekstovogo-poiska-v-postrelyatsionnoy-baze-dannyh-postgresql/viewer

[10] Адаманский А. Обзор методов и алгоритмов полнотекстового поиска. [Электронный ресурс]. - Режим доступа: http://grusha-store.naшd.m/olderfUes/1/Obzor_metodov_polnotekstovogo_poiska.pdf

[11] Рязанова Н.Ю. Анализ вопросов автоматизации поиска информации [Электронный ресурс]. - Режим доступа: https://cyberleninka.ru/article/n/analiz-voprosov-avtomatizatsii-poiska-informatsii

Creation of an Evaluation Stand for a Comparative Analysis of the Functionality of Full-text Database Search Mechanisms in the Yandex Cloud

Infrastructure

A.I. Romanenko

Abstract—Nowadays, when the amount of information on the Internet, databases and electronic documents is growing every day, the search for the necessary information is becoming more and more complex and time-consuming. Full-text search helps to solve this problem, allowing users to quickly and efficiently find the information they need. Full-text search is one of the most common and effective ways to search for information on the Internet. It is used in various fields, including databases, email, websites and other sources of information. For example, in large corporate databases, full-text search can be used to quickly find information about customers, products or services. In email, a full-text search can help the user quickly find all messages that contain certain keywords or phrases. On websites, full-text search can be used to find information about products, services or articles.

This article demonstrates the formation of an evaluation stand for a comparative analysis of the functionality of full-text search mechanisms in various databases using the Yandex Cloud infrastructure. For comparative analysis, full-text search mechanisms built into PostgreSQL, MySQL, Microsoft SQL Server DBMS, as well as external full-text search systems Sphinx and Elasticsearch were selected. A detailed scheme for installing and configuring the selected mechanisms in the cloud infrastructure is described, as well as the results of testing on the prepared data.

Keywords— full-text search, Sphinx, Elasticsearch, Yandex Cloud.

References

[1] Official documentation on PostgreSQL full-text search [Electronic resource]. - Access mode: https://www.postgresql.org/docs/current/textsearch.html

[2] Official MySQL Full-text Search Documentation [Electronic resource]. - Access mode: https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html

[3] Official documentation on Microsoft SQL Server full-text search [Electronic resource]. - Access mode: https://docs.microsoft.com/ru-ru/sql/relational-databases/search/full-text-search ?view=sql-server-ver16

[4] Official Sphinx Documentation [Electronic resource]. - Access mode: http://sphinxsearch.com/docs/current.html

[5] Official Elasticsearch documentation [Electronic resource]. - Access mode: https://www.elastic.co/guide/index.html

[6] Vinogradova M.V. Review of the full-text search system in the postrelational database PostgreSQL [Electronic resource]. - Access mode: https://cyberleninka.ru/article/n/obzor-sistemy-polnotekstovogo-poiska-v-postrelyatsionnoy-baze-dannyh-postgresql/viewer

[7] Bartunov O., Sigaev, F. Introduction to full-text search in PostgreSQL [Electronic resource]. - Access mode: http://citforum.ru/database/postgres/fts /

[8] Full-Text search in Microsoft SQL Server [Electronic resource]. -Access mode: https://info-comp.ru/sisadminst/486-full-text-search-ms-sql-server.html

[9] Vinogradova M.V. Review of the full-text search system in the postrelational database PostgreSQL [Electronic resource]. - Access mode: https://cyberleninka.ru/article/n/obzor-sistemy-polnotekstovogo-poiska-v-postrelyatsionnoy-baze-dannyh-postgresql/viewer

[10] Adamansky A. Review of methods and algorithms of full-text search. [electronic resource]. - Access mode: http://grusha-store.narod.ru/olderfiles/1/Obzor_metodov_polnotekstovogo_poiska.pdf

[11] Ryazanova N.Yu. Analysis of automation issues of information retrieval [Electronic resource]. - Access mode: https://cyberleninka.ru/article/n/analiz-voprosov-avtomatizatsii-poiska-informatsii

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