NoSQL P2P DB на коленке
Часть 1: База данных
Глеб Лебедев, Netvox Lab 2013
для MongoDB UG
Строим базу данных
Из чего состоит База Данных?
Строим базу данных
Хранилище данных
Строим базу данных
Хранилище данных
Индексы для
быстрого поиска
Строим базу данных
Хранилище данных
Индексы для
быстрого поиска
Подсистема выполнения
запросов и индексации
Строим базу данных
Хранилище данных
Индексы для
быстрого поиска
Подсистема выполнения
запросов и индексации
Подсистема син...
Строим базу данных
Хранилище данных
Индексы для
быстрого поиска
Подсистема выполнения
запросов и индексации
Подсистема син...
Хранение данных
Минимально хранение данных
реализуют базы типа
“ключ→значения”
Key → Value
Хранение данных
Специализированные хранилища
Например LevelDB
● New BSD License
● Пакетная запись
● Сжатие данных
● Ключ и...
Хранение данных
Специализированные хранилища
Например LevelDB
● Нет запросов
● Нет индексов
Идеальный строительный блок дл...
Хранение данных
Специализированные хранилища
Например LevelDB
● Нет запросов
● Нет индексов
Идеальный строительный блок дл...
Хранение данных
Не специализированные, например поверх
реляционной БД
● Можно индексировать служебную
информацию
● Транзак...
Индексация и Поиск
● Lucene / Lucene.NET
○ Apache License 2.0
○ Можно встраивать
○ Быстро работает, требует мало памяти
● ...
Индексация и Поиск
Lucene индексирует документы
{
“Field1” -> [“Value1”]
“Field2” -> [“Value2.1”,“Value2.2”]
}
Индексация и Поиск
Lucene поддерживает запросы вида:
*:* MatchAllDocsQuery
Field:Value TermQuery
Field:[A to B] TermRangeQ...
Совмещаем индекс и хранилище
1. Серилизатор превращает объекты в коде
в бинарный вид
Serializer
Key → Value
Совмещаем индекс и хранилище
2. Конвертер делает из объектов в коде
документы Lucene
Serializer
Key → Value
Document
Conve...
Совмещаем индекс и хранилище
3. Общая прослойка синхронизирует
операции индексации и сохранения
Serializer
Key → Value
Doc...
Совмещаем индекс и хранилище
Это становится похоже на БД.
Только не хватает яызка запросов :)
Serializer
Key → Value
Docum...
Формирование запросов
C# позволяет писать в коде выражения
которые можно обрабатывать как деревья
λ
Формирование запросов
C# позволяет писать в коде выражения
которые можно обрабатывать как деревья
Expression<Func<Args, Do...
Формирование запросов
Добавляем преобразователь деревьев
выражений в код формирования запроса
QueryExpressionVisitor
λ λ
Формирование запросов
Пример запроса, который всегда возвращает
true
QueryExpressionVisitor
(Document d, Arguments a)
=>
t...
Формирование запросов
Пример запроса, который всегда возвращает
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
Upcoming SlideShare
Loading in …5
×

NoSQL DataBase На коленке

490 views

Published on

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

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
490
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
8
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

NoSQL DataBase На коленке

  1. 1. NoSQL P2P DB на коленке Часть 1: База данных Глеб Лебедев, Netvox Lab 2013 для MongoDB UG
  2. 2. Строим базу данных Из чего состоит База Данных?
  3. 3. Строим базу данных Хранилище данных
  4. 4. Строим базу данных Хранилище данных Индексы для быстрого поиска
  5. 5. Строим базу данных Хранилище данных Индексы для быстрого поиска Подсистема выполнения запросов и индексации
  6. 6. Строим базу данных Хранилище данных Индексы для быстрого поиска Подсистема выполнения запросов и индексации Подсистема синхронизации
  7. 7. Строим базу данных Хранилище данных Индексы для быстрого поиска Подсистема выполнения запросов и индексации Подсистема синхронизации Приложение
  8. 8. Хранение данных Минимально хранение данных реализуют базы типа “ключ→значения” Key → Value
  9. 9. Хранение данных Специализированные хранилища Например LevelDB ● New BSD License ● Пакетная запись ● Сжатие данных ● Ключ и значение - массивы байт Key → Value
  10. 10. Хранение данных Специализированные хранилища Например LevelDB ● Нет запросов ● Нет индексов Идеальный строительный блок для полноценной БД Key → Value
  11. 11. Хранение данных Специализированные хранилища Например LevelDB ● Нет запросов ● Нет индексов Идеальный строительный блок для полноценной БД Key → Value
  12. 12. Хранение данных Не специализированные, например поверх реляционной БД ● Можно индексировать служебную информацию ● Транзакции SQL ⱠKey Value Version LastModified ETag
  13. 13. Индексация и Поиск ● Lucene / Lucene.NET ○ Apache License 2.0 ○ Можно встраивать ○ Быстро работает, требует мало памяти ● Sphinx ○ GPLv2 ○ Отдельный сервер
  14. 14. Индексация и Поиск Lucene индексирует документы { “Field1” -> [“Value1”] “Field2” -> [“Value2.1”,“Value2.2”] }
  15. 15. Индексация и Поиск Lucene поддерживает запросы вида: *:* MatchAllDocsQuery Field:Value TermQuery Field:[A to B] TermRangeQuery Field:[1 to 10] NumericRangeQuery Field:Val* PrefixQuery Field1:A -Field2:B BooleanQuery и другие ...
  16. 16. Совмещаем индекс и хранилище 1. Серилизатор превращает объекты в коде в бинарный вид Serializer Key → Value
  17. 17. Совмещаем индекс и хранилище 2. Конвертер делает из объектов в коде документы Lucene Serializer Key → Value Document Converter Lucene
  18. 18. Совмещаем индекс и хранилище 3. Общая прослойка синхронизирует операции индексации и сохранения Serializer Key → Value Document Converter Lucene Repository
  19. 19. Совмещаем индекс и хранилище Это становится похоже на БД. Только не хватает яызка запросов :) Serializer Key → Value Document Converter Lucene Repository
  20. 20. Формирование запросов C# позволяет писать в коде выражения которые можно обрабатывать как деревья λ
  21. 21. Формирование запросов C# позволяет писать в коде выражения которые можно обрабатывать как деревья Expression<Func<Args, Doc, bool>> q = ((a, d) => !string.IsNullOrEmpty(d. Value));
  22. 22. Формирование запросов Добавляем преобразователь деревьев выражений в код формирования запроса QueryExpressionVisitor λ λ
  23. 23. Формирование запросов Пример запроса, который всегда возвращает true QueryExpressionVisitor (Document d, Arguments a) => true (Document d, Arguments a) => new MatchAllDocsQuery()
  24. 24. Формирование запросов Пример запроса, который всегда возвращает true QueryExpressionVisitor
  25. 25. Формирование запросов (Doc d, Args a)=>d.Value == a.MatchingValue QueryExpressionVisitor
  26. 26. Формирование запросов (a,d) => a.MatchingValue == ”a” ? d.Value==”const1” : d.Value==”const2”
  27. 27. Формирование запросов (a,d) => a.MatchingValue == ”a” ? d.Value==”const1” : d.Value==”const2”
  28. 28. Формирование запросов (a,d) => d.Value==”const1” && d.Field1==”const2”
  29. 29. Формирование запросов (a,d) => d.Value==”const1” && d.Field1==”const2”
  30. 30. Формирование запросов (a,d) => d.Value==”const1” && d.Field1==”const2” && d.Field2 == “const2”
  31. 31. Формирование запросов (a,d) => d.Value==”const1” && d.Field1==”const2” && d.Field2 == “const2”
  32. 32. Формирование запросов Пример реального запроса из приложения
  33. 33. Формирование запросов Пример реального запроса из приложения
  34. 34. Формирование запросов Пример реального запроса из приложения
  35. 35. Индекс, хранилище и поиск Serializer Key → Value Document Converter Lucene Repository Поисковые запросы λ
  36. 36. Вопросы? (c) 2013

×