AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)Andrey Gershun
AlaSQL - это библиотека для обработки данных с помощью языка SQL, которая написана на JavaScript и может работать в браузере (в том числе, и в режиме WebWorker) или Node.js. Библиотека может быть использована в приложениях для обработки данных, а также для решения задач ETL (extract-transform-loading), таких как приложения бизнес-аналитики.
AlaSQL позволяет проводить сложные манипуляции с массивами данных (такие как группировки, сортировки, выборки, слияния) с помощью привычных выражений языка SQL. Встроенные процедуры импорта и экспорта данных в различных форматах (включая TXT, JSON, CSV, TSV, Microsoft Excel и Google Spreadsheets) предоставляют удобный интерфейс для импорта и экспорта прямо из SQL-выражений. Библиотека хорошо сочетается с такими современными фреймворками, как Angular.js, d3.js и Google Chars.
AlaSQL поддерживает совместимость по многим операторам со стандартным SQL и различными его диалектами, что позволяет переносить ранее разработанные процедуры для других баз данных. Специальные расширения синтаксиса SQL позволяют простым и удобным способом использовать все возможности, предоставляемые JavaScript, например, обработка JSON объектов из SQL выражений.
Для достижения высокого быстродействия AlaSQL написана с использованием сильно оптимизированного JavaScript и содержит несколько эвристик для сокращения времени обработки SQL выражений.
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)Ontico
AlaSQL - это библиотека для обработки данных с помощью языка SQL, которая написана на JavaScript и может работать в браузере (в том числе, и в режиме WebWorker) или Node.js. Библиотека может быть использована в приложениях для обработки данных, а также для решения задач ETL (extract-transform-loading), таких как приложения бизнес-аналитики.
Тезисы - http://frontendconf.ru/2015/abstracts/1713
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)Andrey Gershun
AlaSQL - это библиотека для обработки данных с помощью языка SQL, которая написана на JavaScript и может работать в браузере (в том числе, и в режиме WebWorker) или Node.js. Библиотека может быть использована в приложениях для обработки данных, а также для решения задач ETL (extract-transform-loading), таких как приложения бизнес-аналитики.
AlaSQL позволяет проводить сложные манипуляции с массивами данных (такие как группировки, сортировки, выборки, слияния) с помощью привычных выражений языка SQL. Встроенные процедуры импорта и экспорта данных в различных форматах (включая TXT, JSON, CSV, TSV, Microsoft Excel и Google Spreadsheets) предоставляют удобный интерфейс для импорта и экспорта прямо из SQL-выражений. Библиотека хорошо сочетается с такими современными фреймворками, как Angular.js, d3.js и Google Chars.
AlaSQL поддерживает совместимость по многим операторам со стандартным SQL и различными его диалектами, что позволяет переносить ранее разработанные процедуры для других баз данных. Специальные расширения синтаксиса SQL позволяют простым и удобным способом использовать все возможности, предоставляемые JavaScript, например, обработка JSON объектов из SQL выражений.
Для достижения высокого быстродействия AlaSQL написана с использованием сильно оптимизированного JavaScript и содержит несколько эвристик для сокращения времени обработки SQL выражений.
Alasql.js - SQL база данных на JavaScript / Андрей Гершун (МАГ КОНСАЛТИНГ)Ontico
AlaSQL - это библиотека для обработки данных с помощью языка SQL, которая написана на JavaScript и может работать в браузере (в том числе, и в режиме WebWorker) или Node.js. Библиотека может быть использована в приложениях для обработки данных, а также для решения задач ETL (extract-transform-loading), таких как приложения бизнес-аналитики.
Тезисы - http://frontendconf.ru/2015/abstracts/1713
Курс "Промышленное программирование на Java". Набор лекций 3. "Реляционные базы данных".
Модель предметной области. Подключение к РСУБД из Java.
Spring JDBC.
МФТИ, 2014 год. Лектор - Лаврентьев Федор Сергеевич
Scala-библиотека Slick прекрасно зарекомендовала себя как развитый и удобный инструмент работы с базами данных. Поддерживаются и простейшие текстовые SQL-запросы, и строго типизированные join’ы нескольких таблиц. Для построения запросов Slick предоставляет DSL, код на котором выглядит как обработка коллекций. Причем простые подзапросы могут использоваться для конструирования более сложных.
Slick имеет весьма любопытную внутреннюю архитектуру, которая делает возможным не только продвинутое использование, но и расширение библиотеки несколькими способами, о которых и пойдет речь в докладе.
(see also video: https://youtu.be/9n1zzwOGado)
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Magneta AI
Антон Кириллов, Zeptolab (Москва)
Доклад посвящен обзору ключевых технологий стека Typesafe и анализу ключевых преимуществ и недостатков на примере реального проекта:
* Действительно ли Scala - “более лучшая” Java? Что следует знать, начиная внедрять Scala.
* Play Framework: больше чем просто контейнер. Архитектура и возможности.
* Доступ к базам данных: библиотеки и подходы, эволюция схемы БД во времени
* Actors: безболезненная многопоточность!
* Simple Build Tool: не совсем simple, но крайне функциональный инструмент автоматической сборки.
Рассматриваемые технологии позволяют “из коробки” начать создавать прототипы веб-приложений за очень короткое время и в дальнейшем наращивать их функционал. Тем не менее, из-за молодости стека существует большое количество “граблей”, о которых следует знать, принимая решение об использовании данного набора технологий.
Курс "Промышленное программирование на Java". Набор лекций 3. "Реляционные базы данных".
Модель предметной области. Подключение к РСУБД из Java.
Spring JDBC.
МФТИ, 2014 год. Лектор - Лаврентьев Федор Сергеевич
Scala-библиотека Slick прекрасно зарекомендовала себя как развитый и удобный инструмент работы с базами данных. Поддерживаются и простейшие текстовые SQL-запросы, и строго типизированные join’ы нескольких таблиц. Для построения запросов Slick предоставляет DSL, код на котором выглядит как обработка коллекций. Причем простые подзапросы могут использоваться для конструирования более сложных.
Slick имеет весьма любопытную внутреннюю архитектуру, которая делает возможным не только продвинутое использование, но и расширение библиотеки несколькими способами, о которых и пойдет речь в докладе.
(see also video: https://youtu.be/9n1zzwOGado)
Scala, Play Framework и SBT для быстрого прототипирования и разработки веб-пр...Magneta AI
Антон Кириллов, Zeptolab (Москва)
Доклад посвящен обзору ключевых технологий стека Typesafe и анализу ключевых преимуществ и недостатков на примере реального проекта:
* Действительно ли Scala - “более лучшая” Java? Что следует знать, начиная внедрять Scala.
* Play Framework: больше чем просто контейнер. Архитектура и возможности.
* Доступ к базам данных: библиотеки и подходы, эволюция схемы БД во времени
* Actors: безболезненная многопоточность!
* Simple Build Tool: не совсем simple, но крайне функциональный инструмент автоматической сборки.
Рассматриваемые технологии позволяют “из коробки” начать создавать прототипы веб-приложений за очень короткое время и в дальнейшем наращивать их функционал. Тем не менее, из-за молодости стека существует большое количество “граблей”, о которых следует знать, принимая решение об использовании данного набора технологий.
2. +
SQL на JavaScript… Хм.
Применение
Быстрая обработка данных (сортировка, группировка, фильтрация,
слияния) на клиенте
Фронт-энд для Business Intelligence ( OLAP, таблицы)
Мобильные приложения с нерегулярной связью с сервером
Тренды
JavaScript – везде
JavaScript – оптимизирован
JavaScript – гибкий, комфортный, большое количество библиотек
3. +
Сложные запросы к данным
SELECT COUNT(*) FROM students
LEFT JOIN courses USING courseid
LEFT JOIN schools ON students.schoolid = schools.schoolid
WHERE courseid > 3
GROUP BY schools, courseid
ORDER BY courseid DESC, schoolid
filter(), sort(), map(), reduce()… - не просто…
4. +
Какие решения SQL существуют
для браузера?
Полноценные SQL (на базе SQLite)
WebSQL – “вне стандарта» с 2011 года (SQLite)
SQL.js – 1 Мб, компиляция с помощью Emscripten, небыстрый
SequelSphere – коммерческое решение (сайт не работает)
«Неполноценные SQL» (Аналоги LINQ)
SQLike
SQL…
NoSQL (Запросы через JSON)
IndexedDB
Key-value хранилища
5. +
Alasql.js – как использовать?
Подключение
Браузер
<script src=“alasql.js></script>
<script>alasql(‘CREATE DATABASE test01’) </script>
require([‘alasql’], function(alasql) {
alasql(‘SELECT * FROM courses’);
})
Node.js
npm install alasql
require(‘alasql.js’)
Использование: «классический SQL»
alasql(‘CREATE DATABASE TEST01; USE TEST01;);
alasql(‘CREATE TABLE students (studentid INT, name STRING)’);
alasql(‘INSERT INTO students VALUES (100, “Иванов И.И.”)’);
var numStudents = alasql.value(‘SELECT COUNT(*) FROM students’);
6. +
SQL и JavaScript – лучше вместе
JS интерфейс
var db = new alasql.Database();
var res = db.exec(‘SELECT * FROM one’);
Alasql как «супер-фильтр»
var data = [[1,2,3], [2,3,4], [5,6,7]];
var res = alasql.value(‘SELECT * FROM ? WHERE [0] < ?’,[data, 2]);
Пользовательские функции
alasql.fn.myfn = function(a,b) {return a*10+b};
Компиляция операторов и функций
var myInsert = alasql.compile(‘INSERT INTO one VALUES (?,?)’);
myInsert([5,6]);
7. +
SQL и JavaScript не всегда вместе
Схемы ускоряют исполнение
SELECT *
Схемы замедляют исполнение
PRIMARY KEY / FOREIGN KEY / UNIQUE INDEX
Без схемы никуда
Сравнение дат и других
8. +
Alasql изнутри
Лексер и парсер
Jison
Компилятор
Компиляция «критичных по скорости» операторов
SELECT/INSERT/UPDATE/DELETE
Проверка перед исполнением актульности версии схемы базы данных
Интерпретатор
Интепретация «больших» операторов (CREATE DATABASE, CREATE
TABLE и др.)
9. +
Разработка и тестирование
Gulp, Concat, Uglify – сборка библиотеки
Jison – лексер и парсер SQL
Mocha -тестирование
Более 200 тестов (и этого мало!) для Node.js и браузера
«Родные» тесты SQLite
Переход на «серьезные» тесты (NIST SQL)
zt
Тесты для сравнения скорости
10. +
Оптимизация SQL
Нужны ли вообще индексы...?
Да – замедление INSERT при наличии CONSTRAINTS
Нет – замедление при выполнении первый раз SELECT
Предварительная индексация SELECT
JOIN USING
one JOIN two ON one.a = two.a+1 AND one.b = two.c+two.d
Префильтрация WHERE в JOINs
Оптимизированный проход по SELECT
(1 раз для LEFT JOIN + 1 раз для RIGHT JOIN + 1 раз для GROUP +
sort)
11. +
Оптимизация JavaScript
Компиляция критических операций (SELECT, WHERE, ORDER BY,
GROUP BY, HAVING, INSERT, DELETE, UPDATE):
SELECT * FROM data ORDER BY alpha, beta
data.sort(function(a,b){
if(a.alpha>b.alpha) {return 1; else if(a.alpha==b.alpha) return 0;
if(a.beta>b.beta) {return 1; else if(a.beta==b.beta) return 0;
}}
return -1;
})
orderfn = new Function(‘scope’, ‘return ’+orderfns);
Существенно быстрее, чем интерпретация
Сложности с объектами (в частности датами) при отсутствии схемы
«Классическая» оптимизация JavaScript
for быстрее, чем forEach и т.д.
jsPerf - лучший советчик…