The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

eBay представил ql.io, SQL-подобный язык для взаимодействия с web-сервисами

04.12.2011 23:27

Компания eBay представила проект ql.io, в рамках которого подготовлена реализация декларативного предметно-ориентированного языка для формирования выборок, выступающая в роли надстройки над традиционным Web API существующих сервисов. Язык ql.io базируется на идеях SQL и использует при манипуляциях данными формат JSON. Целью проекта является сокращение времени разработки за счет упрощения процесса работы с данными через использование более привычных и наглядных механизмов формирования запросов. Исходные тексты ql.io написаны на языке JavaScript и распространяются под лицензией Apache.

Наиболее оправдан ql.io в мэшап-приложениях, манипулирующих данными из разрозненных web-сервисов, например, комбинирующих запросы к API Google Maps и API eBay. При помощи ql.io данные, полученные из разных Web API, обрабатываются в рамках единых операций объединения и агрегирования, примерно также как оператор SELECT обрабатывает данные из нескольких разных таблиц. Используя ql.io разработчику больше не нужно на каждом шагу оглядываться на особенности Web API разных сервисов, достаточно один раз определить их спецификацию и в дальнейшем обращаться к ним через унифицированный интерфейс.

В качестве демонстрации возможностей ql.io приводится пример выполнения действия по поиску продукта с выводом координат продавцов. Алгоритм выполнения данной операции сводится к выводу из базы eBay идентификаторов продуктов по ключевым словам, получение через отдельный API параметров заявок и определение для заявок координат через Google Geocoding API. При традиционном подходе для реализации указанного примера потребовалось бы написание довольно объемного кода, отправляющего запросы и разбирающего вывод от трёх разных Web API. При использовании ql.io все эти действия укладываются в один SELECT-запрос.

По аналогии с SQL вначале формируются виртуальные таблицы, отождествлённые с тем или иным существующим Web API. Затем для обработки данных и формирования запросов к Web API можно использовать синтаксис SQL-оператора SELECT. При этом поддерживается возможность совершения вложенных запросов, агрегации данных, сортировки и объединения результатов (JOIN) нескольких запросов к различным таблицам, за которыми могут стоять Web API совершенно разных сервисов. Результат возвращается в формате JSON. Для добавления данных предлагается использовать оператор INSERT.

Пример создания таблицы и простого SQL-запроса (в действии скрипт можно запустить на специальной демонстрационной web-консоли):


   create table google.geocode
     on select get from "http://maps.googleapis.com/maps/api/geocode/{format}?sensor=true&address={^address}"
       using defaults format = 'json'
       resultset 'results';


   select g.geometry.location from google.geocode as g where g.address = 'г. Москва, Красная площадь';

Кроме увеличения удобства обращения к Web API и сокращения числа строк кода с реализацией логики работы, новый язык также позволяет уменьшить задержки и увеличить скорость выполнения операций за счет сокращения числа запросов к серверу, выполнения операций по агрегации данных на сервере и передачи клиенту только необходимых для web-приложения данных. Для оптимизации выполнения сложных запросов, требующих работы с большими объемами данных, в рамках проекта подготовлен специальный серверный шлюз (по сути выполняет задачи СУБД), который может взять на себя первичную загрузку и обработку данных, возвращая клиенту уже готовый результат. Компоненты шлюза ql.io запускаются поверх серверной платформы node.js. На шлюз загружаются готовые скрипты в формате ql.io, которые затем вызываются из конечного web-приложения через определённый в скрипте интерфейс WebSocket или HTTP API (web-приложению достаточно отправить на шлюз обычный http-запрос с необходимыми параметрами).

  1. Главная ссылка к новости (http://www.ebaytechblog.com/20...)
  2. OpenNews: Релиз серверной JavaScript-платформы node.js 0.6
Лицензия: CC-BY
Тип: К сведению
Короткая ссылка: https://opennet.ru/32463-web
Ключевые слова: web, api, sql, ql.io
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (7) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.10, Аноним (-), 08:51, 05/12/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Currently, ql.io requires a Linux or Mac system.

    А вы APS ASP.
    Интересная вещь.

     
  • 1.13, Crazy Alex (ok), 12:03, 05/12/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересная идея, но:
    1) опять используется неудобный для генерации (и не особо удобный для писания руками) SQL-подобный формат
    2) шлюз на node.js зачем-то вместо сей, эрланга или джавы на худой конец... Впрочем, это тестировать надо - до тех пор пока в коде копаться не надо, и node.js пойдёт, ежели производительности хватит. Интреесно, у него механика кэширования есть?

    Вот что было бы интересно, раз уж SQL-образное - так это извратиться и сделать на этом принципе модуль к мускулу или mongo - с правилами кэширования для отдельных ресурсов и возможностью эффективного объединения запросов к веб-сервисам и своим данным в базе. А то мержить на клиенте не забавно совсем. Опять же, раз уж javascript - может для монги это будет даже не особенно геморройно.

     
     
  • 2.14, nameeman (?), 13:08, 05/12/2011 [^] [^^] [^^^] [ответить]  
  • +/
    а какой формат удобен для генерации, lisp предлагаете, как самый простой в этом случае?
     
     
  • 3.15, Crazy Alex (??), 13:34, 05/12/2011 [^] [^^] [^^^] [ответить]  
  • +1 +/
    да что угодно, чторазрешило бы задавать части выражения в любом порядке, включая комопоненты WHERE. Ну и возможность в конце списка ставить разделитель тоже очень удобна - как в перле можно сказать: $x = [1,2,3,4,]; - а еще лучше разделителем считать вайтспейс.

    В прицнипе S-expressions действительно подошли бы, но здесь лучше бы чуть упрощенный синтаксис, чтобы скобок было поменьше. Что-то вроде списка функций, наподобие этого примерчика:
    SELECT FIELD x AND (x=2) AND (y=3) SORT(a:DESC b:) JOIN (T2:T2.id=T1.id) FROM T1 AND cond=213 FIELD T2.xyz;

    В данном случае единственное услоие по порядку - что первым должен идти SELECT. Для чтения человеком такого супа, конечно, понадобится форматтер - как сейчас для XML и JSON. Зато собирается простейшей конкатенацией.

     
     
  • 4.17, Аноним (-), 16:11, 05/12/2011 [^] [^^] [^^^] [ответить]  
  • +/
    -- На углу двое юношей возились с каким-то механическим устройством. Один убежденно говорил: «Конструкторская мысль не может стоять на месте. Это закон развития общества. Мы изобретём его. Обязательно изобретём. Вопреки бюрократам вроде Чинушина и консерваторам вроде Твердолобова». Другой юноша нёс свое: «Я нашел, как применить здесь нестирающиеся шины из полиструктурного волокна с вырожденными аминными связями и неполными кислородными группами. Но я не знаю пока, как использовать регенерирующий реактор на субтепловых нейтронах. Миша, Мишок! Как быть с реактором?» Присмотревшись к устройству, я без труда узнал велосипед.

     
  • 4.18, Аноним (-), 16:15, 05/12/2011 [^] [^^] [^^^] [ответить]  
  • +/
    Это к тому что JSON уже есть.
    И кстати, про разделители, [1,2,3,] и {a:'1',b='b',} -- вполне законные конструкции Javascript.


     
  • 2.16, Аноним (-), 15:02, 05/12/2011 [^] [^^] [^^^] [ответить]  
  • +/
    1. Подмножество SQL выглядит не очень в тему, по мне так лучше бы над map/filter реализовали синтаксис. Но хозяин — барин, то что сделано тоже неплохо выглядит, хотя и будет отвлекать.

    2.1. Node.js просто распиарена, его и любят всякие хипстеры от кодинга, те же самые, которые год назад mongodb использовали для хранения данных because it's web scale.

    2.2. Кэширование в node.js, как правило, сводится к внешнему redis или memcached. Держать данные в памяти процесса я там очень не советую.

    3. А модуль есть у PostgreSQL, начиная с 9.1. Называется foreign data wrappers, хорошая надстройка над всем этим сделана на http://multicorn.org/ (умеет жрать данные с IMAP, RSS, CVS и еще кучки разного).

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру