Interested Article - Reindexer
- 2021-03-04
- 1
|
В статье есть список
источников
, но
не хватает
сносок
.
|
Reindexer — NoSQL in-memory база данных общего назначения с открытым кодом . Основная цель Reindexer — это обеспечивать быстрый поиск по сложным запросам.
Reindexer сочетает в себе два подхода по структуре хранения данных:
- опциональное колоночное хранение выбранных индексных полей.
- оптимизированное бинарное представление JSON с дополнением из табличной строки с индексируемыми полями;
Reindexer состоит из ядра, написанного на C++, API написанного на Go и пользовательского интерфейса, написанного на Vue.js.
История
Прототип Reindexer появился в конце 2016, как альтернатива Elasticsearch для нужд платформы интерактивного телевидения компании ПАО Ростелеком . К середине 2017 была выпущена первая рабочая версия Reindexer с хранилищем на основе LevelDB/RocksDB и поддержкой полнотекстового поиска. В этом же году код был опубликован на .
В 2021 году, Reindexer отдаёт более 150 млн результатов на крупнейших российских сайтах, таких как Wink, Ситилинк и
Возможности
Индексы
Для выполнения запросов в Reindexer есть 6 типов индексов:
- хэш-таблица, применяется для выборки по значению;
- b-tree, с возможностью выборок по условиям 'больше', 'меньше' и сортировкой по полю;
- колонка, с минимальным размером индекса в памяти, но с более медленным поиском, чем у хеш-таблицы и b-tree;
- две реализации полнотекстовых индексов: нетребовательная к памяти и на базе триграмм;
- индекс TTL, предназначенный для представления полей даты (хранящихся в виде временных меток UNIX), срок действия которых истекает через указанное количество секунд;
- геоиндекс, позволяет найти все точки на расстоянии от конкретной точки.
В Reindexer используется метод «ленивого» построения индексов при добавлении записей в таблицу. Таким образом, сначала происходит добавление записи, тогда как индексы достраиваются, только когда они требуются для выполнения запроса .
Дисковое хранилище
Reindexer — полностью in-memory база данных, что означет, что данные, должны находиться в оперативной памяти. Таким образом, основное назначение дискового хранилища — это загрузка данных на момент начала работы системы. При добавлении записей, данные пишутся на диск в фоновом режиме.
В качестве программно-аппаратной части дискового хранилища Reindexer может использовать или .
Полнотекстовый поиск
У Reindexer существует два собственных компонента:
- fast, на базе префиксного дерева , c поддержкой опечаток и морфологии.
- fuzzy, триграммный.
Оба компонента поддерживают поиск транслитом и поиск с неверной раскладкой клавиатуры. Ранжирование результатов поиска происходит с учетом статистических вероятностей ( BM25 ) и точности совпадения. Reindexer позволяет настраивать формулу ранжирования, в зависимости от задачи.
Кроме того, существует возможность полнотекстового поиска по нескольким таблицам, с выдачей результатов, отсортированных по релевантности.
В Reindexer реализована «ленивая» индексация. Полнотекстовый индекс строится на первом запросе в полнотекстовом поле. Индексирование использует несколько потоков, что позволяет эффективно расходовать ресурсы современных многоядерных процессоров и получать высокую скорость процесса. На современном оборудовании скорость индексации составляет ~ 50 МБ / сек.
Join
Reindexer поддерживает аналог Join для NoSQL баз данных, — это функциональность, позволяющая добавить в каждый результат ответа поле, содержащее компоненты из присоединяемой таблицы. При этом, поддерживаются методы inner и left join Кроме того, есть возможность объединить несколько Join использую логические операторы.
Кэш десериализованных объектов
Данные в Reindexer хранятся в области памяти под управлением C++, и при получении выборки в Go-приложении происходит десериализация результатов в Go структуру.
Object cache в Go части Reindexer решает задачу переиспользования уже десериализованных объектов, без расходования времени на повторную десериализацию.
Инструменты
Reindexer доступен для систем OSX, Linux и Windows.
REST API
Для отображения интерактивной документации REST API, Reindexer использует Swagger
Веб-интерфейс
Reindexer поставляется вместе с встроенным web-интерфейсом , написанном на Vue.js.
В 2021, дизайн UI Reindexer получил награду Red Dot в номинации Brands & Communication Design .
GRPC API
Reindexer поддерживает GRPC API начиная с версии 3.0.
Командная строка
Инструмент командной строки поддерживает следующие функции:
- Создание резервной копии всей базы данных и ее выгрузку в текстовый файл или консоль;
- Выполнение запросов к базе данных;
- Измение документов и метаданных базы данных.
Инструмент командной строки может работать в двух режимах. С сервером через сеть и напрямую с хранилищем, в так называемом без серверном режиме.
Лицензирование
Reindexer выходит под лицензией Apache License 2.0
Дополнительная литература
- , Олег Герасимов.
- , Антон Баширов.
- , Gabriel Hodoroaga
- , Олег Герасимов
- , Илья Новиков
- , Олег Герасимов
Примечания
- от 27 сентября 2021 на Wayback Machine , Олег Герасимов.
- от 27 сентября 2021 на Wayback Machine , Никита Денисенко.
- , red-dot.org
Ссылки
- 2021-03-04
- 1