Содержание
- 2. Распределенный API: по 22 сервера в 2-х датацентрах (Америка, Европа). Разнообразные клиентские приложения: 40 desktop и
- 3. Возникла необходимость добавить новый источник данных HBase. С чего все началось?
- 4. NoSql – ; написана на Java; аналог Google Big table; не является заменой SQL; интерфейсы взаимодействия:
- 5. Apache Avro — система сериализации данных. Система использует JSON для определения структуры данных (схемы), которые сериализуются
- 6. AVRO – схема
- 7. HBase + Thrift-AVRO + .NET = ? AVRO AVRO TCP Socket TCP Socket
- 8. Workflow
- 9. META-DRIVEN; результат – простая таблица; возможность выполнять Map/Reduce; сохранить отношения данных; Требования
- 10. Проблемы большие вложенные AVRO схемы до 1 000 000 строк; AVRO не дружит с .NET; после
- 11. Что делать? А давайте напишем свой DSL!
- 12. Разработка синтаксиса
- 13. А давай еще Join’s
- 14. А как быстро написать парсер?
- 15. Парсинг(синтаксический анализ текста) ОБЩИЙ ПОДХОД
- 16. Парсер генератор на основе формальных языков (ANTLR). Подключаемая библиотека комбинаторных парсеров (Sprache, SuperPower). ... Выбор
- 17. Написать руками
- 18. ANTLR (Another Tool for Language Recognition) Расширенная форма Бэкуса — Наура Генератор на основе формальных языков
- 19. декларативный синтаксис; строгое соблюдение грамматики; не нужно думать о performance; не нужно писать документацию. Генератор на
- 20. реализован как библиотека языка; модульный и поддерживаемый; полуавтоматическая генерация сообщений об ошибках; backtracking и look ahead;
- 21. никакого внешнего кода; поддается к индивидуальным требованиям; потенциально быстр, как только это возможно. Рукописные парсеры все
- 22. Причем тут функциональное прог-ие? Основные концепции: неизменяемые структуры данных; чистые функции; функции высших порядков; рекурсия.
- 23. Императивное vs Функциональное
- 24. Написать примитивные парсеры(функции). Написать функции для комбинирования. Скомбинировать простые парсеры в более сложные. PROFIT! Don’t panic
- 25. type Parser = String -> Tree type Parser = String -> (String, Tree) type Parser =
- 26. Пишем простой комбинаторный парсер Выражение : “42 + 5” 42 + 5 expression + 42 5
- 27. Парсим простое выражение : “42 + 5” Railroad - диаграмма Грамматика в БНФ
- 28. Библиотеки с готовым набором комбинаторных парсеров для С# небольшая библиотека, совместима .NET Core; простой, но богатый
- 29. Готовый код парсера для “42 + 5”
- 30. Ну, а как же без TDD?
- 31. Давайте усложним : “42 + 5 - 7” Railroad - диаграмма Грамматика в БНФ
- 32. Парсер на Sprache “42 + 5 - 7”
- 33. DSL (Domain-specific language) Пример: XPath, SQL; использование NoSQL; не хватает всей “Мощи” XML; разработка IDE или
- 34. Что внутри?
- 35. Тип Result
- 36. Тип Input (обертка над string)
- 37. Начнем с простых парсеров
- 38. Пишем первый комбинирующий парсер Parser Parser Then
- 39. Строим путь к LINQ’s query синтаксису
- 40. Комбинируем
- 41. Полный код на GitHub
- 42. Фрагмент из клипа Thrift shop ☺ HASL – HBase Avro Snapshot Language
- 43. прототип был написан за 1 вечер на Sprache; был переписан на Superpower; в дальнейшем все изменения
- 44. Что получилось достичь за 1 день?
- 45. Транформирует объекты в таблицу. Ориентирован на AVRO-схему. Селекторы для всех типов: object, type[], примитивы. Фильтры для
- 46. Перформанс HASL - Основа Core-I7 6700 3.40 GHz. Windows server 2010. x64.
- 47. 3 424 знаков. 120 строк. 3 Join’а. 102 селектора. 25 с фильтрами. Полностью отформатирован. Перформанс HASL
- 48. Перформанс HASL - Результаты
- 49. Схема
- 50. Пример запроса
- 51. Результат
- 52. Спасибо за внимание!
- 54. Скачать презентацию