[Поисковые технологии, Программирование, NoSQL, Администрирование баз данных] Знакомство с ArangoDB
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
ArangoDB – мультимодельная БД с возможностью хранения данных как графов, документов и ключ-значение.Взял материал с бесплатного курса на udemy и Outline курса
Стоит обратить внимание на training center и докиМожно работать по HTTP API, фронт, терминал и библиотеку питонаКонцепцияArangoDB хранит объекты в json документах с поддержкой обращения по ключу, за которое отвечает специальное поле _key.Есть два типа коллекций:
- Стандартная. Хранилище документов json, специальные поля _key, _rev, _id. key можно задать самому. Последние два создаются автоматически.
- _key – ключ объекта в коллекции. ВАЖНО: case sensitive
- _rev – используется для внутренних алгоритмов
- _id – используется для связи с другими коллекциями. Имеет формат {collection name}/_key
- Edge. Специальные коллекции, хранящие в себе объекты связи между объектами стандартных коллекций. Имею два дополнительных поля _to, _from, в которых хранятся _id объектов, которых edge объект связывает
Есть фронт для работы с БД.
Есть утилита для подключения и работы с БД в терминале.CRUDИспользуется свой язык AQL. СозданиеСоздание объектов. Добавляем какие хотим значения, при попытке добавления объекта с существующем _key будет ошибка.Синтаксис:
INSERT {key: value} INTO collection [RETURN NEW]
RETURN NEW позволяет вернуть добавленный объектЧтениеЧтение объектов
Синтаксис:
RETURN DOCUMENT(_id) – вернёт объект по _id
RETURN DOCUMENT(collection_name, [_key, ...]) – вернёт список объектов из коллекции по ключам
ОбновлениеОбновление объектовСинтаксис:
UPDATE {_key: "value"} WITH {newVal: 1234} IN collection
УдалениеСинтаксис:
REMOVE {_key: "value"} IN collection
FORСинтаксис: FOR variableName IN expression
- Итерируется по массиву объектов
- Поддерживает вложенность
- Особенности в работе с графами
Update нескольких документов:
FOR doc in ["key1", "key2"]:
UPDATE doc WITH {newVal: 1234} IN collection
ФичиИндексыМожем ускорить операции индексируя ключи объектов. По дефолту ключи _key, _id, _to и _from индексируются.Есть 7 типов индексов:
- Primary – автоматически генерируемый для покрытия _key и _id
- Edge – автоматически генерируемый для покрытия _from и _to
- Hash – создаётся вручную и покрывает нужные поля
- Skiplist
- Persistent
- Geo
- Fulltext
При создании индекса запускается процесс индексации и рассчитывается коэффициент Selectivity, который отвечает за приоритет при выборе индекса для работы запросаФильтрацияСинтаксис: FILTER conditionВ одном запросе может быть несколько фильтров.
Например, хотим получить вип полёты:
FOR flight IN flights
FILTER flight.type == "VIP"
RETURN flight
Без индексации на большом объеме данных может выполнятся сотни миллисекунд.ОбъединениеРаботают за счёт вложенных циклов.
Например, хотим получить все полёты В аэропорты Далласа.
FOR airport IN airports
FILTER airport.city == "Dallas"
FOR flight in flights
FILTER flight._to == airport._id
RETURN {"airport": airport.name, "flight": flight.FlightNum}
ГруппировкаСинтаксис:
COLLECT variableName = expression options
Например, хотим собрать все штаты аэропортов:
FOR airport IN airports COLLECT state = airport.state RETURN state
Или посчитать сколько аэропортов в каждом штате и отсортировать по убыванию
FOR airport IN airports
COLLECT state = airport.state WITH COUNT INTO total
SORT total DESC
RETURN {"state": state, "total":total}
ГрафыСвязь объектов коллекций происходит с помощью коллекций связи (edge collections). В стандартных коллекциях у каждого объекта есть поле _id, которое содержит информацию о коллекции объекта и ключу объекта в этой коллекции.
Объекты коллекции edge имеют поля _to и _from, которые содержат _id объектов, которые они связывают. Объекты этой коллекции также json, то есть мы можем добавлять в них любую информацию, описывая связь между объектами.Синтаксис:
FOR vertex, edge, path IN 1..1 OUTBOUND _id GRAPH edge_collection RETURN path
FOR vertex, edge, path IN 1..1 OUTBOUND _id edge_collection RETURN path – анонимный граф, потому что не указали GRAPH. Можем использовать несколько edge коллекций
vertex – текущая вершина, обязательна
edge – текущее ребро
path – содержит два списка: всех вершин и всех рёбер между запрошенными вершинамиIN задаёт глубину поиска, min..max
OUTBOUND/INBOUND/ANY задаёт движение поиск. Смотрит на ключи _from, _to соответсвенно.
_id содержит строку с id объекта. Может быть самим объектом
GRAPH указывает на коллекцию edge типа, по которой будем искать связиНапример, мы хотим прямой рейс из Сан-Франциско на Гавайи:
FOR airport in airports
FILTER airport.city == "San Francisco"
FOR v, e, p IN 1..1 OUTBOUND airport flights
FILTER v._id == "airports/KOA"
RETURN p
Или хотим рейс с пересадками из Сан-Франциско на Гавайи:
FOR airport in airports
FILTER airport.city == "San Francisco"
FOR v, e, p IN 2..3 OUTBOUND airport flights
FILTER v._id == "airports/KOA"
RETURN p
Нужно быть осторожными с сложными запросами на графах, так как они могут выполняться долго. Для оптимизации стоит использовать индексы и ограничивать сложность запросовПоискИспользуется встроенный движок ArangoSearch, поддерживающий все модели данных БД.
Включает в себя полнотекстовый поиск, нечёткий поиск благодаря индексации, обработку текста и рангирование поискаArangoSearch состоит из двух компонентов: движок поиска и движок интеграций.Движок поиска – это analyzers, views и links
Analyzers позволяют сконфигурировать правила, по которым текст будет обработан. Есть набор встроенных анализаторов на популярные языки. Можно создавать свои анализаторы.
Views специальные объекты, которые хранят данные о результатах аналитики/индексации
Links объекты связывающие коллекции и views правилами аналитики полей. То есть мы задаём связь с коллекцией и какими анализаторами обрабатывать поля её объектов.Движок интеграции – слой предоставления данных.
Search – препроцессор, работает над views, может видеть только индексированные поля, то есть такие, которые мы описали в links.
Rank позволяет получить вес результатов, в соответсвии с запросом на поиск. Также можем ставить свои веса для частей поиска.Пример поиска слова "ninja" в описании фильмa:
FOR doc in view
SEARCH ANALYZER(d.description == "ninja", "text_en")
RETURN doc
===========
Источник:
habr.com
===========
Похожие новости:
- [JavaScript, Программирование] Взлом JavaScript с помощью JavaScript (перевод)
- [Поисковые технологии, Браузеры] I feel Brave: новый анонимный поиск открыт для всех (перевод)
- [Программирование, .NET] Создание пакета NuGet для библиотеки с платформозависимым API
- [Программирование, Машинное обучение, Учебный процесс в IT, Карьера в IT-индустрии] И в науку, и в индустрию. Магистерские программы при поддержке JetBrains
- [Информационная безопасность, Программирование] Что под капотом у R-Vision Threat Intelligence Platform?
- [Высокая производительность, PostgreSQL, *nix, Администрирование баз данных] Поиск среди 10000 GitHub репозиториев на Postgres (используя только MacBook) (перевод)
- [Системное администрирование, Программирование, IT-инфраструктура, Apache] Apache Pulsar как основа для системы очередей
- [Open source, JavaScript, Программирование, Серверное администрирование] zx – bash скрипты на javascript
- [Информационная безопасность, Поисковые технологии, Исследования и прогнозы в IT, Контекстная реклама, Поисковая оптимизация] Ученые научились определять действия пользователей по движениям курсора мыши
- [Python, Программирование, Гаджеты, История IT] Декодирование сигнала с видеофона 1988 года выпуска (перевод)
Теги для поиска: #_poiskovye_tehnologii (Поисковые технологии), #_programmirovanie (Программирование), #_nosql, #_administrirovanie_baz_dannyh (Администрирование баз данных), #_arangodb, #_grafovye_bd (графовые бд), #_multimodelnye_bd (мультимодельные бд), #_nosql, #_poiskovye_tehnologii (
Поисковые технологии
), #_programmirovanie (
Программирование
), #_nosql, #_administrirovanie_baz_dannyh (
Администрирование баз данных
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 02:44
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
ArangoDB – мультимодельная БД с возможностью хранения данных как графов, документов и ключ-значение.Взял материал с бесплатного курса на udemy и Outline курса Стоит обратить внимание на training center и докиМожно работать по HTTP API, фронт, терминал и библиотеку питонаКонцепцияArangoDB хранит объекты в json документах с поддержкой обращения по ключу, за которое отвечает специальное поле _key.Есть два типа коллекций:
Есть утилита для подключения и работы с БД в терминале.CRUDИспользуется свой язык AQL. СозданиеСоздание объектов. Добавляем какие хотим значения, при попытке добавления объекта с существующем _key будет ошибка.Синтаксис: INSERT {key: value} INTO collection [RETURN NEW]
Синтаксис: RETURN DOCUMENT(_id) – вернёт объект по _id
RETURN DOCUMENT(collection_name, [_key, ...]) – вернёт список объектов из коллекции по ключам UPDATE {_key: "value"} WITH {newVal: 1234} IN collection
REMOVE {_key: "value"} IN collection
FOR doc in ["key1", "key2"]:
UPDATE doc WITH {newVal: 1234} IN collection
Например, хотим получить вип полёты: FOR flight IN flights
FILTER flight.type == "VIP" RETURN flight Например, хотим получить все полёты В аэропорты Далласа. FOR airport IN airports
FILTER airport.city == "Dallas" FOR flight in flights FILTER flight._to == airport._id RETURN {"airport": airport.name, "flight": flight.FlightNum} COLLECT variableName = expression options
FOR airport IN airports COLLECT state = airport.state RETURN state
FOR airport IN airports
COLLECT state = airport.state WITH COUNT INTO total SORT total DESC RETURN {"state": state, "total":total} Объекты коллекции edge имеют поля _to и _from, которые содержат _id объектов, которые они связывают. Объекты этой коллекции также json, то есть мы можем добавлять в них любую информацию, описывая связь между объектами.Синтаксис: FOR vertex, edge, path IN 1..1 OUTBOUND _id GRAPH edge_collection RETURN path
FOR vertex, edge, path IN 1..1 OUTBOUND _id edge_collection RETURN path – анонимный граф, потому что не указали GRAPH. Можем использовать несколько edge коллекций edge – текущее ребро path – содержит два списка: всех вершин и всех рёбер между запрошенными вершинамиIN задаёт глубину поиска, min..max OUTBOUND/INBOUND/ANY задаёт движение поиск. Смотрит на ключи _from, _to соответсвенно. _id содержит строку с id объекта. Может быть самим объектом GRAPH указывает на коллекцию edge типа, по которой будем искать связиНапример, мы хотим прямой рейс из Сан-Франциско на Гавайи: FOR airport in airports
FILTER airport.city == "San Francisco" FOR v, e, p IN 1..1 OUTBOUND airport flights FILTER v._id == "airports/KOA" RETURN p FOR airport in airports
FILTER airport.city == "San Francisco" FOR v, e, p IN 2..3 OUTBOUND airport flights FILTER v._id == "airports/KOA" RETURN p Включает в себя полнотекстовый поиск, нечёткий поиск благодаря индексации, обработку текста и рангирование поискаArangoSearch состоит из двух компонентов: движок поиска и движок интеграций.Движок поиска – это analyzers, views и links Analyzers позволяют сконфигурировать правила, по которым текст будет обработан. Есть набор встроенных анализаторов на популярные языки. Можно создавать свои анализаторы. Views специальные объекты, которые хранят данные о результатах аналитики/индексации Links объекты связывающие коллекции и views правилами аналитики полей. То есть мы задаём связь с коллекцией и какими анализаторами обрабатывать поля её объектов.Движок интеграции – слой предоставления данных. Search – препроцессор, работает над views, может видеть только индексированные поля, то есть такие, которые мы описали в links. Rank позволяет получить вес результатов, в соответсвии с запросом на поиск. Также можем ставить свои веса для частей поиска.Пример поиска слова "ninja" в описании фильмa: FOR doc in view
SEARCH ANALYZER(d.description == "ninja", "text_en") RETURN doc =========== Источник: habr.com =========== Похожие новости:
Поисковые технологии ), #_programmirovanie ( Программирование ), #_nosql, #_administrirovanie_baz_dannyh ( Администрирование баз данных ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 02:44
Часовой пояс: UTC + 5