nosql database На коленке

Post on 05-Dec-2014

469 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Как скомбинировать Lucene.NET, LevelDB и Expression Tree Visitor в подобие базы данных.

TRANSCRIPT

NoSQL P2P DB на коленке

Часть 1: База данныхГлеб Лебедев, Netvox Lab 2013

для MongoDB UG

Строим базу данных

Из чего состоит База Данных?

Строим базу данных

Хранилище данных

Строим базу данных

Хранилище данныхИндексы для

быстрого поиска

Строим базу данных

Хранилище данныхИндексы для

быстрого поиска

Подсистема выполнения запросов и индексации

Строим базу данных

Хранилище данныхИндексы для

быстрого поиска

Подсистема выполнения запросов и индексации

Подсистема синхронизации

Строим базу данных

Хранилище данныхИндексы для

быстрого поиска

Подсистема выполнения запросов и индексации

Подсистема синхронизации

При

лож

ение

Хранение данных

Минимально хранение данных реализуют базы типа “ключ→значения”

Key → Value

Хранение данных

Специализированные хранилища

Например LevelDB

● New BSD License● Пакетная запись● Сжатие данных● Ключ и значение - массивы байт

Key → Value

Хранение данных

Специализированные хранилища

Например LevelDB

● Нет запросов ● Нет индексов

Идеальный строительный блок для полноценной БД

Key → Value

Хранение данных

Специализированные хранилища

Например LevelDB

● Нет запросов● Нет индексов

Идеальный строительный блок для полноценной БД

Key → Value

Хранение данных

Не специализированные, например поверх реляционной БД

● Можно индексировать служебную информацию

● Транзакции SQL

ⱠKey Value Version LastModified ETag

Индексация и Поиск

● Lucene / Lucene.NET○ Apache License 2.0○ Можно встраивать○ Быстро работает, требует мало памяти

● Sphinx○ GPLv2○ Отдельный сервер

Индексация и Поиск

Lucene индексирует документы

{“Field1” -> [“Value1”]“Field2” -> [“Value2.1”,“Value2.2”]

}

Индексация и Поиск

Lucene поддерживает запросы вида:

*:* MatchAllDocsQueryField:Value TermQueryField:[A to B] TermRangeQueryField:[1 to 10] NumericRangeQueryField:Val* PrefixQueryField1:A -Field2:B BooleanQuery

и другие ...

Совмещаем индекс и хранилище

1. Серилизатор превращает объекты в коде в бинарный вид

Serializer

Key → Value

Совмещаем индекс и хранилище

2. Конвертер делает из объектов в коде документы Lucene

Serializer

Key → Value

Document Converter

Lucene

Совмещаем индекс и хранилище

3. Общая прослойка синхронизирует операции индексации и сохранения

Serializer

Key → Value

Document Converter

Lucene

Repository

Совмещаем индекс и хранилище

Это становится похоже на БД. Только не хватает яызка запросов :)

Serializer

Key → Value

Document Converter

Lucene

Repository

Формирование запросов

C# позволяет писать в коде выражениякоторые можно обрабатывать как деревья

λ

Формирование запросов

C# позволяет писать в коде выражениякоторые можно обрабатывать как деревья

Expression<Func<Args, Doc, bool>> q =((a, d) => !string.IsNullOrEmpty(d.Value));

Формирование запросов

Добавляем преобразователь деревьев выражений в код формирования запроса

QueryExpressionVisitorλ λ

Формирование запросов

Пример запроса, который всегда возвращает true

QueryExpressionVisitor

(Document d, Arguments a)=>

true

(Document d, Arguments a)=>

new MatchAllDocsQuery()

Формирование запросов

Пример запроса, который всегда возвращает true

QueryExpressionVisitor

Формирование запросов

(Doc d, Args a)=>d.Value == a.MatchingValue

Que

ryE

xpre

ssio

nVis

itor

Формирование запросов

(a,d) => a.MatchingValue == ”a” ? d.Value==”const1” : d.Value==”const2”

Формирование запросов

(a,d) => a.MatchingValue == ”a” ? d.Value==”const1” : d.Value==”const2”

Формирование запросов

(a,d) => d.Value==”const1” && d.Field1==”const2”

Формирование запросов

(a,d) => d.Value==”const1” && d.Field1==”const2”

Формирование запросов

(a,d) => d.Value==”const1” && d.Field1==”const2” && d.Field2 == “const2”

Формирование запросов

(a,d) => d.Value==”const1” && d.Field1==”const2” && d.Field2 == “const2”

Формирование запросов

Пример реального запроса из приложения

Формирование запросов

Пример реального запроса из приложения

Формирование запросов

Пример реального запроса из приложения

Индекс, хранилище и поиск

Serializer

Key → Value

Document Converter

Lucene

Repository

Поисковые запросы

λ

Вопросы?(c)

2013

top related