NoSQL DataBase На коленке

Gleb Lebedev
Gleb LebedevSoftware Architect / Division Head at NetVox Lab
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 поддерживает запросы вида:
*:* MatchAllDocsQuery
Field:Value TermQuery
Field:[A to B] TermRangeQuery
Field:[1 to 10] NumericRangeQuery
Field:Val* PrefixQuery
Field1: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
QueryExpressionVisitor
Формирование запросов
(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
1 of 36

Recommended

Кратко о MongoDB by
Кратко о MongoDBКратко о MongoDB
Кратко о MongoDBGleb Lebedev
1.5K views13 slides
яндекс сервисы by
яндекс сервисыяндекс сервисы
яндекс сервисыЕлена Хилинская
3.8K views23 slides
облачное хранилище данных яндекс.диск by
облачное хранилище данных яндекс.дискоблачное хранилище данных яндекс.диск
облачное хранилище данных яндекс.дискТатьяна Дрыжинская
62 views18 slides
Dropbox by
DropboxDropbox
DropboxAna Lavrinchuk
127 views31 slides
Nosql and Mongodb by
Nosql and MongodbNosql and Mongodb
Nosql and MongodbEduard Antsupov
1.2K views42 slides
Поиск текста в MongoDB 2.4 by
Поиск текста в MongoDB 2.4Поиск текста в MongoDB 2.4
Поиск текста в MongoDB 2.4Gleb Lebedev
821 views14 slides

More Related Content

What's hot

MongoDB в продакшен - миф или реальность? by
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?Alexey Tokar
3.4K views51 slides
Внедрение DIRECTUM в НАО "Национальная спутниковая компания" ("Триколор ТВ").... by
Внедрение DIRECTUM в НАО "Национальная спутниковая компания" ("Триколор ТВ")....Внедрение DIRECTUM в НАО "Национальная спутниковая компания" ("Триколор ТВ")....
Внедрение DIRECTUM в НАО "Национальная спутниковая компания" ("Триколор ТВ")....DIRECTUM
452 views35 slides
Облако@mail.ru by
Облако@mail.ruОблако@mail.ru
Облако@mail.ruviktorivel
248 views25 slides
Active Record for CoreData by
Active Record for CoreDataActive Record for CoreData
Active Record for CoreDataDmitriy Kuragin
762 views13 slides
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс by
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндексit-people
398 views22 slides
CodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDB by
CodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDBCodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDB
CodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDBCodeFest
2.3K views28 slides

What's hot(19)

MongoDB в продакшен - миф или реальность? by Alexey Tokar
MongoDB в продакшен - миф или реальность?MongoDB в продакшен - миф или реальность?
MongoDB в продакшен - миф или реальность?
Alexey Tokar3.4K views
Внедрение DIRECTUM в НАО "Национальная спутниковая компания" ("Триколор ТВ").... by DIRECTUM
Внедрение DIRECTUM в НАО "Национальная спутниковая компания" ("Триколор ТВ")....Внедрение DIRECTUM в НАО "Национальная спутниковая компания" ("Триколор ТВ")....
Внедрение DIRECTUM в НАО "Национальная спутниковая компания" ("Триколор ТВ")....
DIRECTUM452 views
Облако@mail.ru by viktorivel
Облако@mail.ruОблако@mail.ru
Облако@mail.ru
viktorivel248 views
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс by it-people
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
it-people398 views
CodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDB by CodeFest
CodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDBCodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDB
CodeFest 2014. Хамидуллин В. — Яндекс.Диск: Миллионы пользователей и MongoDB
CodeFest2.3K views
MongoDB basics in Russian by Oleg Kachan
MongoDB basics in RussianMongoDB basics in Russian
MongoDB basics in Russian
Oleg Kachan6.1K views
MongoDB первые впечатления by fudz1k
MongoDB первые впечатленияMongoDB первые впечатления
MongoDB первые впечатления
fudz1k1.2K views
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков... by Ontico
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Простая и дешёвая бизнес-аналитика на базе Google BigQuery / Алексей Паршуков...
Ontico1.6K views
масштабируемый Sphinx кластер. вячеслав крюков. зал 1 by rit2011
масштабируемый Sphinx кластер. вячеслав крюков. зал 1масштабируемый Sphinx кластер. вячеслав крюков. зал 1
масштабируемый Sphinx кластер. вячеслав крюков. зал 1
rit20111.9K views
Константин Осипов by CodeFest
Константин ОсиповКонстантин Осипов
Константин Осипов
CodeFest624 views
Миграция данных при помощи Feeds by zabej
Миграция данных при помощи FeedsМиграция данных при помощи Feeds
Миграция данных при помощи Feeds
zabej544 views
Apache Lucene + Hibernate = Hibernate Search by Vitebsk Miniq
Apache Lucene + Hibernate = Hibernate SearchApache Lucene + Hibernate = Hibernate Search
Apache Lucene + Hibernate = Hibernate Search
Vitebsk Miniq844 views
Централизованное хранилище электронных документов by Moscow IT Department
Централизованное хранилище электронных документовЦентрализованное хранилище электронных документов
Централизованное хранилище электронных документов
Сравнение стоимости владения ЛАЙВ и лицензий в собственность by Nikita Abramenko
Сравнение стоимости владения ЛАЙВ и лицензий в собственностьСравнение стоимости владения ЛАЙВ и лицензий в собственность
Сравнение стоимости владения ЛАЙВ и лицензий в собственность
Nikita Abramenko300 views

Similar to NoSQL DataBase На коленке

IOP202 DevCon 2012 Apache Lucene in Windows Azure by
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows AzureVadim Novitskiy
271 views36 slides
ITmozg, Даниил Павлючков by
ITmozg, Даниил ПавлючковITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковEYevseyeva
733 views46 slides
Android - 13 - Database by
Android - 13 - DatabaseAndroid - 13 - Database
Android - 13 - DatabaseNoveo
787 views18 slides
базы данных в Delphi by
базы данных в Delphiбазы данных в Delphi
базы данных в DelphiAeka227
2.4K views47 slides
владивосток форум новости технологий 2015 by
владивосток форум новости технологий 2015владивосток форум новости технологий 2015
владивосток форум новости технологий 2015Elena Ometova
257 views34 slides
Обзор технологии iCloud для iOs by
Обзор технологии iCloud для iOsОбзор технологии iCloud для iOs
Обзор технологии iCloud для iOsk_be
751 views13 slides

Similar to NoSQL DataBase На коленке(20)

IOP202 DevCon 2012 Apache Lucene in Windows Azure by Vadim Novitskiy
IOP202 DevCon 2012 Apache Lucene in Windows AzureIOP202 DevCon 2012 Apache Lucene in Windows Azure
IOP202 DevCon 2012 Apache Lucene in Windows Azure
Vadim Novitskiy271 views
ITmozg, Даниил Павлючков by EYevseyeva
ITmozg, Даниил ПавлючковITmozg, Даниил Павлючков
ITmozg, Даниил Павлючков
EYevseyeva733 views
Android - 13 - Database by Noveo
Android - 13 - DatabaseAndroid - 13 - Database
Android - 13 - Database
Noveo787 views
базы данных в Delphi by Aeka227
базы данных в Delphiбазы данных в Delphi
базы данных в Delphi
Aeka2272.4K views
владивосток форум новости технологий 2015 by Elena Ometova
владивосток форум новости технологий 2015владивосток форум новости технологий 2015
владивосток форум новости технологий 2015
Elena Ometova257 views
Обзор технологии iCloud для iOs by k_be
Обзор технологии iCloud для iOsОбзор технологии iCloud для iOs
Обзор технологии iCloud для iOs
k_be751 views
Управление гибридным ландшафтом с помощью Cisco CloudCenter by Cisco Russia
Управление гибридным ландшафтом с помощью Cisco CloudCenterУправление гибридным ландшафтом с помощью Cisco CloudCenter
Управление гибридным ландшафтом с помощью Cisco CloudCenter
Cisco Russia 174 views
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework) by Pavel Tsukanov
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
Pavel Tsukanov13.1K views
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK by Cisco Russia
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDKПрограммируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Программируемость фабрики ACI. Объектная модель, REST API, ACI Python SDK
Cisco Russia 374 views
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET by GoSharp
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
GoSharp1.1K views
Evgeny Rybak Presentation by sef2009
Evgeny Rybak PresentationEvgeny Rybak Presentation
Evgeny Rybak Presentation
sef2009219 views
Dynamic Language Runtime by SQALab
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
SQALab296 views
PowerBI — новые возможности анализа данных в облаке by Stas Vyschepan
PowerBI — новые возможности анализа данных в облакеPowerBI — новые возможности анализа данных в облаке
PowerBI — новые возможности анализа данных в облаке
Stas Vyschepan790 views
Lan-Crawler Bachlor RU by cDima
Lan-Crawler Bachlor RULan-Crawler Bachlor RU
Lan-Crawler Bachlor RU
cDima672 views
eDocLib. Удобный архив. Быстрый поиск. Надежное хранение. by kondratievaeb
eDocLib. Удобный архив. Быстрый поиск. Надежное хранение.eDocLib. Удобный архив. Быстрый поиск. Надежное хранение.
eDocLib. Удобный архив. Быстрый поиск. Надежное хранение.
kondratievaeb456 views
Использование сторонних библиотек в веб-приложении by Denis Latushkin
Использование сторонних библиотек в веб-приложенииИспользование сторонних библиотек в веб-приложении
Использование сторонних библиотек в веб-приложении
Denis Latushkin58 views
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий by JSC “Arcadia Inc”
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
2015-12-12 | AzovDevMeetup 2015 | Enterprise приложения на PHP | Павел Крынецкий
Отказоустойчивые решения SQL by Andrey Korshikov
Отказоустойчивые решения SQLОтказоустойчивые решения SQL
Отказоустойчивые решения SQL
Andrey Korshikov496 views

NoSQL DataBase На коленке