SlideShare a Scribd company logo
Индексный поиск по
регулярным выражениям
    Александр Коротков
Введение
Регулярные выражения

• мощный инструмент обработки
  текстовой информации

• основаны на математической
  лингвистике
Автоматы… нет, не слышал
Итак… автоматы

• Регулярное выражение => автомат

• Все так и делают
Итак... автоматы

• Автомат – это граф

• Автомат «читает» строку
Пример
 /a(bc)*d/
становится
Пример
xyzabcbcdxyz
Пример
xyzabcbcdxyz
Пример
xyzabcbcdxyz
Пример
xyzabcbcdxyz
Пример
xyzabcbcdxyz
Пример
xyzabcbcdxyz
Пример
xyzabcbcdxyz
Пример
xyzabcbcdxyz
Пример
xyzabcbcdxyz
Пример
xyzabcbcdxyz
Пример
xyzabcbcdxyz
Пример
xyzabcbcdxyz
Пример
 xyzabcbcdxyz
Ура! Подходит!
Ну теперь все мы знаем…
Поиск по регекспам в PostgreSQL


• есть :)

• последовательный :(
Инвертированные индексы
       на n-грамах
N-грамы?
N-грамы

• N-грамы – это подстрока длины n

• Широко используются
Инвертированные индексы на n-грамах



• Соответствие n-грама <=> набор id

• Модуль pg_trgm содержит реализацию
  для n = 3
pg_trgm

                               ' e': {1,2}    'egu': {1,3}   'pre': {1,2}
                               ' r': {1,3}    'er ': {3}     'reg': {1,3}
                               ' s': {2,3}    'ess': {1,2}   'res': {1,2}
                               ' ex': {1,2}   'exp': {1,2}   'sio': {1}
1. "regular expressions",      ' re': {1,3}   'gul': {1,3}   'siv': {2}
2. "expressive speach",     => ' sp': {2,3}   'ion': {1}     'spe': {2,3}
3. "regular speaker"           'ach': {2}     'ive': {2}     'ssi': {1,2}
                               'ake': {3}     'ker': {3}     'ula': {1,3}
                               'ar ': {1,3}   'lar': {1,3}   've ': {2}
                               'ch ': {2}     'ns ': {1}     'xpr': {1,2}
                               'eac': {2}     'ons': {1}
                               'eak': {3}     'pea': {2,3}
Частоты N-грам
DBLP: 2.5M заголовков статей

• “the” - 360K
• “zzz” – 1
 глава "Zzzzzzzzzzzzzzzzzzzzzzzzzz" книги "Formal
 Specification and Development in Z and B" от David
 Everett
Не все N-грамы одинаково полезны
V-грамы и мультиграмы


• У n-грамы индивидуальное n

• Выше эффективность!
V-грамы или мультиграмы

Проблемы:
• Трудно поддерживать
  актуальность
•…
Патентный тролли!
Как использовать индекс
для поиска по регэкспам?
Общая идея
/[ab]cde/ => (acd OR bcd) AND cde
/[ab]cde/ => (acd OR bcd) AND cde


             Как?
Существующие подходы к
    извлечению n-грам
из регулярных выражений
Научная работа
Junghoo Ch and Sridhar Rajagopalan, A fast
regular expression indexing engine,
Proceedings 18th International Conference on
Data Engineering, 2002

Всё ещё широко цитируется, как актуальное
решение в данной области.
Метод FREE

• Извлечь дерево непрерывных участков
  строки из регэкспа.
• Преобразование этих непрервыных кусков
  в мультиграмы (n-грамы с изменяемым n)
• Использовать инвертированный индекс на
  мультиграмах для выполнения запроса
Метод FREE: пример
Дерево для /(abcd|efgh)(ijklm|x*)/
Метод FREE: пример
Заменить узлы “*” на NULL
Метод FREE: пример
NULL “съедает” родительский узел OR
Метод FREE: пример
Узел AND “съедает” дочерний NULL
Метод FREE: пример
 Теперь немного упростим
Метод FREE: пример
Разобьем непрерывные куски строк на n-грамы
Google code search
Google code search
• Запустился в 2006.

• Скорее всего что-то получше, чем
  предыдущий метод.

• Но мы не знаем что... :(
Мы не знали что, пока..
• Google code search закрылся в 2011
  :(
• http://swtch.com/~rsc/regexp/regex
  p4.html
• Более 5 лет интриги!
Метод google code search
• 5 характеристик:
  emptyable, exact, prefix, suffix, matc
  h.
• Характеристики рекурсивно
  объединяются
• Инвертированный индекс на
  триграммах
Метод google code search
Исходное выражение: /a(bc)+d/
a: {exact: a}
bc: {exact: bc}
d: {exact: d}
(bc)+: {prefix:bc, suffix: bc}
a(bc)+: {prefix:abc, suffix:bc}
a(bc)+d: {prefix:abc, suffix:bcd}
Метод google code search
        /a(bc)+d/



  {prefix:abc, suffix:bcd}



       abc AND bcd
Предлагаемый метод
Предлагаемый метод

• Автомат => граф на триграмах
• Упростить
• Использовать GIN индекс
  pg_trgm
Пример преобразования
      /a(b+|c+)d/
Пример преобразования
Пример преобразования
Пример преобразования
Пример преобразования
Пример преобразования
Пример преобразования
Пример преобразования
Пример преобразования
Пример преобразования
Пример преобразования
Пример преобразования
Пример преобразования
Пример преобразования
Пример преобразования
Пример преобразования
Пример преобразования
Пример преобразования
Пример преобразования
Результат можно упростить
Упрощение




            bbd
abd

      abb




                  acd




                              ccd
                        acc
1      0    0     0     0     0
0      1    1     0     0     0
0      0    0     1     0     0
0      0    0     0     1     1

      abd OR
      (abb AND bbd) OR
      acd OR
      (acc AND ccd)
Сравнение на примерах

Regex: /(abc|cba)def/
FREE: (abc OR cba) AND def
GSC:
def AND ((abc AND bcd AND cde) OR (ade
AND bad AND cba))
Предложенный метод:
(abc AND bcd AND cde AND def) OR (ade
AND bad AND cba AND def)
Сравнение на примерах

Regex: /abc+de/
FREE: nothing
GSC: abc AND cde
Предложенный метод :
(abc AND cde AND bcd) OR
(abc AND cde AND bcc AND ccd)
Сравнение на примерах

Regex: /(abc*)+de/
FREE: nothing
GSC: nothing
Предложенный метод :
(abd AND bde) OR
(abc AND bcd AND cde) OR
(abc AND bcc AND ccd AND cde)
Сравнение на примерах

Regex: /ab(cd)*ef/
FREE: nothing
GSC: nothing
Предложенный метод :
(abe AND bef) OR
(abc AND bde AND cde AND def)
Тесты производительности
2.5 M заголовков статей DBLP средней длины 47


         Regex            Index scan   Seq scan
/database.*(sql|query)/       773 ms   18653 ms
/postgres(ql)?/               268 ms   17574 ms
/plan+er/                     253 ms   12885 ms
/(nucl|anino).*acid/          200 ms   20085 ms
/[aei](bc)+a/                   2 ms   13195 ms
Патч к pg_trgm в разработке


Патч отправлен в mailing list:
http://archives.postgresql.org/pgsql-
hackers/2011-11/msg01297.php
Проблемы
• Может получиться большой граф
• Может получиться большое
  «упрощенное представление» или
  его долго считать
• Использование триграм вместо v-
  грам (мультиграм)
Было опущено

• Детерминированные vs
  недетерминированные автоматы
• Группировка символов в цвета
• Начало и конец строки
Спасибо за внимание!

More Related Content

What's hot

Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++
Alexander Granin
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Unigine Corp.
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
Ontico
 
Property-based testing
Property-based testingProperty-based testing
Property-based testing
Peter Gromov
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Ontico
 
Haskell
HaskellHaskell
Haskell
DevDay
 
Pony ORM - маппер нового поколения (Алексей Малашкевич и Александр Козловский)
Pony ORM - маппер нового поколения (Алексей Малашкевич и Александр Козловский)Pony ORM - маппер нового поколения (Алексей Малашкевич и Александр Козловский)
Pony ORM - маппер нового поколения (Алексей Малашкевич и Александр Козловский)
IT-Доминанта
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Ontico
 
С одним плюсом (Андрей Аксёнов)
С одним плюсом (Андрей Аксёнов)С одним плюсом (Андрей Аксёнов)
С одним плюсом (Андрей Аксёнов)
Unigine Corp.
 
Вадим Макеев
Вадим МакеевВадим Макеев
Вадим Макеев
CodeFest
 
Базы данных. Lucene
Базы данных. LuceneБазы данных. Lucene
Базы данных. LuceneVadim Tsesko
 
Highload: специализированные высокопроизводительные индексы
Highload: специализированные высокопроизводительные индексыHighload: специализированные высокопроизводительные индексы
Highload: специализированные высокопроизводительные индексы
Pavel Egorov
 
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Badoo Development
 
Serialization approach at Encased
Serialization approach at EncasedSerialization approach at Encased
Serialization approach at Encased
DevGAMM Conference
 
Groovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conferenceGroovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conference
voituk
 
CSSO — сжимаем CSS Роман Дворнов, Avito
 CSSO — сжимаем CSS Роман Дворнов, Avito CSSO — сжимаем CSS Роман Дворнов, Avito
CSSO — сжимаем CSS Роман Дворнов, Avito
it-people
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Yandex
 
Дмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в BadooДмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в Badoo
Mail.ru Group
 
Почему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияПочему Rust стоит вашего внимания
Почему Rust стоит вашего внимания
Michael Pankov
 

What's hot (19)

Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++Функционально декларативный дизайн на C++
Функционально декларативный дизайн на C++
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
 
Property-based testing
Property-based testingProperty-based testing
Property-based testing
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
 
Haskell
HaskellHaskell
Haskell
 
Pony ORM - маппер нового поколения (Алексей Малашкевич и Александр Козловский)
Pony ORM - маппер нового поколения (Алексей Малашкевич и Александр Козловский)Pony ORM - маппер нового поколения (Алексей Малашкевич и Александр Козловский)
Pony ORM - маппер нового поколения (Алексей Малашкевич и Александр Козловский)
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
 
С одним плюсом (Андрей Аксёнов)
С одним плюсом (Андрей Аксёнов)С одним плюсом (Андрей Аксёнов)
С одним плюсом (Андрей Аксёнов)
 
Вадим Макеев
Вадим МакеевВадим Макеев
Вадим Макеев
 
Базы данных. Lucene
Базы данных. LuceneБазы данных. Lucene
Базы данных. Lucene
 
Highload: специализированные высокопроизводительные индексы
Highload: специализированные высокопроизводительные индексыHighload: специализированные высокопроизводительные индексы
Highload: специализированные высокопроизводительные индексы
 
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
 
Serialization approach at Encased
Serialization approach at EncasedSerialization approach at Encased
Serialization approach at Encased
 
Groovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conferenceGroovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conference
 
CSSO — сжимаем CSS Роман Дворнов, Avito
 CSSO — сжимаем CSS Роман Дворнов, Avito CSSO — сжимаем CSS Роман Дворнов, Avito
CSSO — сжимаем CSS Роман Дворнов, Avito
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 
Дмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в BadooДмитрий Новиков - Tarantool в Badoo
Дмитрий Новиков - Tarantool в Badoo
 
Почему Rust стоит вашего внимания
Почему Rust стоит вашего вниманияПочему Rust стоит вашего внимания
Почему Rust стоит вашего внимания
 

Viewers also liked

sphinx Hlpp2008
sphinx Hlpp2008sphinx Hlpp2008
sphinx Hlpp2008Ontico
 
ZIP, GZIP Streams in java
ZIP, GZIP Streams in javaZIP, GZIP Streams in java
ZIP, GZIP Streams in java
Alexey Bovanenko
 
Regular Expressions
Regular ExpressionsRegular Expressions
Regular Expressions
Alexey Bovanenko
 
Regex Presentation
Regex PresentationRegex Presentation
Regex Presentationarnolambert
 
Python. re
Python. rePython. re
Python. re
Alexey Bovanenko
 
Python sqlite3
Python sqlite3Python sqlite3
Python sqlite3
Alexey Bovanenko
 
Practical Example of grep command in unix
Practical Example of grep command in unixPractical Example of grep command in unix
Practical Example of grep command in unix
Javin Paul
 

Viewers also liked (7)

sphinx Hlpp2008
sphinx Hlpp2008sphinx Hlpp2008
sphinx Hlpp2008
 
ZIP, GZIP Streams in java
ZIP, GZIP Streams in javaZIP, GZIP Streams in java
ZIP, GZIP Streams in java
 
Regular Expressions
Regular ExpressionsRegular Expressions
Regular Expressions
 
Regex Presentation
Regex PresentationRegex Presentation
Regex Presentation
 
Python. re
Python. rePython. re
Python. re
 
Python sqlite3
Python sqlite3Python sqlite3
Python sqlite3
 
Practical Example of grep command in unix
Practical Example of grep command in unixPractical Example of grep command in unix
Practical Example of grep command in unix
 

Similar to Индексный поиск по регулярным выражениям (Александр Коротков)

PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков
PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр КоротковPG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков
PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков
pgdayrussia
 
Present saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPresent saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasov
Pavel Vlasov
 
Внешние языки DSL на funcparserlib
Внешние языки DSL на funcparserlibВнешние языки DSL на funcparserlib
Внешние языки DSL на funcparserlib
Andrey Vlasovskikh
 
CSSO — минимизируем CSS
 CSSO — минимизируем CSS CSSO — минимизируем CSS
CSSO — минимизируем CSS
Roman Dvornov
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
Яковенко Кирилл
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012Alex Tutubalin
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
Roman Dvornov
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.sharikdp
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Ontico
 
2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search
Nikolay Samokhvalov
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
Andrey Karpov
 
Макс Ширшин — Регулярные выражения
Макс Ширшин — Регулярные выраженияМакс Ширшин — Регулярные выражения
Макс Ширшин — Регулярные выражения
Yandex
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
Roman Dvornov
 
введение
введениевведение
введение
AndEdr
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
Vasil Remeniuk
 
Динамика и статика — метрики графов социальных сетей - Cергей Зефиров
Динамика и статика — метрики графов социальных сетей - Cергей ЗефировДинамика и статика — метрики графов социальных сетей - Cергей Зефиров
Динамика и статика — метрики графов социальных сетей - Cергей Зефиров
Yandex
 
C:\fakepath\кмсзи экз
C:\fakepath\кмсзи   экзC:\fakepath\кмсзи   экз
C:\fakepath\кмсзи экз
darina andr
 
Haskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell languageHaskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell language
Alexander Granin
 

Similar to Индексный поиск по регулярным выражениям (Александр Коротков) (20)

PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков
PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр КоротковPG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков
PG Day'14 Russia, Индексный поиск по регулярным выражениям, Александр Коротков
 
Present saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasovPresent saint-per3-by-pavel-vlasov
Present saint-per3-by-pavel-vlasov
 
Внешние языки DSL на funcparserlib
Внешние языки DSL на funcparserlibВнешние языки DSL на funcparserlib
Внешние языки DSL на funcparserlib
 
CSSO — минимизируем CSS
 CSSO — минимизируем CSS CSSO — минимизируем CSS
CSSO — минимизируем CSS
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
Доклад на Highload-2012
Доклад на Highload-2012Доклад на Highload-2012
Доклад на Highload-2012
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
 
чернякова г.в.
чернякова г.в.чернякова г.в.
чернякова г.в.
 
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
Эффективное использование x86-совместимых CPU (Алексей Тутубалин)
 
2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search2014.10.15 блиц-доклад PostgreSQL kNN search
2014.10.15 блиц-доклад PostgreSQL kNN search
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
Макс Ширшин — Регулярные выражения
Макс Ширшин — Регулярные выраженияМакс Ширшин — Регулярные выражения
Макс Ширшин — Регулярные выражения
 
Парсим CSS
Парсим CSSПарсим CSS
Парсим CSS
 
введение
введениевведение
введение
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Rgsu04
Rgsu04Rgsu04
Rgsu04
 
Зачем нужна Scala?
Зачем нужна Scala?Зачем нужна Scala?
Зачем нужна Scala?
 
Динамика и статика — метрики графов социальных сетей - Cергей Зефиров
Динамика и статика — метрики графов социальных сетей - Cергей ЗефировДинамика и статика — метрики графов социальных сетей - Cергей Зефиров
Динамика и статика — метрики графов социальных сетей - Cергей Зефиров
 
C:\fakepath\кмсзи экз
C:\fakepath\кмсзи   экзC:\fakepath\кмсзи   экз
C:\fakepath\кмсзи экз
 
Haskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell languageHaskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell language
 

More from Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Индексный поиск по регулярным выражениям (Александр Коротков)