The OpenNET Project / Index page

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

Google представил Lovefield, SQL-подобную БД для JavaScript

18.11.2014 08:10

Компания Google открыла под лицензией Apache код проекта Lovefield, в рамках которого подготовлен движок для работы с традиционными реляционными базами данных в web-приложениях. Lovefield использует для постоянного хранения данных API IndexedDB и позволяет манипулировать данными с использованием SQL-подобных запросов. Движок оформлен в виде JavaScript-библиотеки, которую можно использовать в различных браузерах, в том числе в Chrome 37+, Firefox 31+ и IE 10+.

Запросы оформляются с использованием похожего на SQL декларативного синтаксиса, который позволяет обойтись без стадии парсинга и обеспечить защиту от атак по подстановке SQL-запросов. Например, "var query = db.select().from(card).where(card.id.eq('12345'));". Разработчик вначале составляет схему, определяющую структуру БД. Затем данная схема компилируется в JavaScript-файл с обработчиком, который подключается к web-проекту и позволяет отправлять запросы только в рамках определённой схемы.

Для достижения высокой производительности в Lovefield используется оптимизатор запросов, который рассматривает оптимальность различных планов выполнения запроса и выбирает наиболее эффективный. Lovefield обеспечивает приемлемую производительность для БД размером до 50 тысяч строк. В дальнейшем планируется внести оптимизации, которые позволят использовать Lovefield и для более крупных наборов данных.

Основные особенности Lovefield:

  • Поддержка запросов select, insert, update и delete;
  • Простая семантика транзакций для обеспечения атомарности операций;
  • Возможность задания ограничений для проверки сохранения целостности (primary key, unique, nullable/not-nullable).
  • Поддержка агрегатных функций (count, min, max, sum, avg, stddev, distinct);
  • Поддержка группировки в SELECT-запросах через выражение "group by";
  • Возможность формирования запросов, охватывающих несколько таблиц (INNER JOIN, OUTER JOIN);
  • Более простой, чем в IndexedDB, механизм изменения схемы данных.


  1. Главная ссылка к новости (http://google-opensource.blogs...)
Лицензия: CC-BY
Тип: Программы
Короткая ссылка: https://opennet.ru/41078-websql
Ключевые слова: websql, lovefield, database, sql
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (24) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 09:23, 18/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Чем больше ресурсов, тем больше они распыляются :(

    p.s. Говорят что уровень парниковых газов в атмосфере продолжает активно расти, не смотря на все применяемые меры, думаю использование интерпретаторов интерпретаторов в программных контейнерах уже вносит значительную лепту в этот рост

     
     
  • 2.4, Константавр (ok), 09:46, 18/11/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Да, мощности компьютеров растут не для больших вычислений, а для абстракций абстракций. В конце концов, интерпретаторы интерпретаторов дорастут до одной команды - "Сделать звиздато" или "Принеси мне целое состояние"
     
     
  • 3.7, Отражение луны (ok), 10:11, 18/11/2014 [^] [^^] [^^^] [ответить]  
  • +5 +/
    У абстракций абстракций зато отличная стабильность стабильности и высокая переиспользуемость переиспользуемости.
     
     
  • 4.8, Константавр (ok), 10:25, 18/11/2014 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Не, против абстракций, как таковых, я ничего не имею. В конце концов, даже писать на асме - это уже абстракция :) Но когда всё переносится в веб технологии, это уже перебор.  Должна быть та грань, за которую нельзя переходить.
     
     
  • 5.38, жжж (?), 09:54, 20/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Это вам следовало сказать когда выпустили первую Джаву.
     

  • 1.5, мшефд (?), 09:50, 18/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Для работы с сабжем требуется: Java, Python, node.js, closure !
     
  • 1.11, Аноним (-), 10:45, 18/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >Запросы оформляются в виде похожем на SQL, но имеют декларативный синтаксис

    А у SQL синтаксис недекларативный, да?

     
     
  • 2.16, Аноним (1), 12:19, 18/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >>Запросы оформляются в виде похожем на SQL, но имеют декларативный синтаксис
    > А у SQL синтаксис недекларативный, да?

    они решили решить неразрешимую для многих решателей пишущих решения  на js|php и т.п. проблему query("select name from "+valTable+" where "+valField+"=" + valID ";") нетрадиционным способом, но забыли о том что теперь можно написать:
    eval("db.select.from("+valTable+").where("+valField+".eq("+valID+"))")...

    в принципе похвально конечно, теперь можно будет знатокам js и sql писать код а потом компилировать его в c++ :)

     
     
  • 3.24, Ordu (ok), 13:53, 18/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > забыли о том что теперь можно написать:
    > eval("db.select.from("+valTable+").where("+valField+".eq("+valID+"))")...

    Это вы к:

    >обойтись без стадии парсинга и обеспечить защиту от атак по подстановке SQL-запросов.

    ?

    Ну дык чтобы eval сработал надо внедрить код, а там уже всё бесполезно. Речь идёт про другие атаки, про т.н. SQL-inj, когда в valTable оказывается совершенно иной sql запрос. Когда составление sql-запроса -- это не тупо конкатенация строк, а так как в этом фреймворке сделано, фреймворк может экранировать всё, причём прозрачно. Правда тут есть другой косяк: он экранировать будет всё, даже то что передано в виде literal'ов, потому что в рантайме не сможет отследить, что литерально, а что из переменной берётся. Но жабаскрипту на это пенальти к производительности я полагаю насрать: одним пенальти больше, одним меньше -- всё равно тормоз.

     
     
  • 4.27, Аноним (1), 14:54, 18/11/2014 [^] [^^] [^^^] [ответить]  
  • +/

    Никто не мешает составлять запросы через параметры, как это делается в нормальных системах, но увы и в нормальных системах у многих выходит через контактацию строк :)


     

  • 1.13, Аноним (-), 11:40, 18/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Поясните для тупых: БД прямо в браузер передаётся?
     
     
  • 2.17, Аноним (1), 12:20, 18/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Поясните для тупых: БД прямо в браузер передаётся?

    БД прямо в нём живёт на 10-м уровне изоляции в виде куков ;)

     
     
  • 3.25, Cotan (ok), 14:21, 18/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Не только куков. История, закладки, пароли, - всё лежит в БД. Даже копирасты вроде Apple используют SQLite для своих браузеров.
     
     
  • 4.28, Аноним (1), 14:55, 18/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Не только куков. История, закладки, пароли, - всё лежит в БД. Даже
    > копирасты вроде Apple используют SQLite для своих браузеров.

    и у вас есть доступ со старницы в SQLit-овскую БД?

     
     
  • 5.30, Cotan (ok), 17:23, 18/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, этого я не говорил. Было бы глупо давать доступ сайтам к этой информации. Бездонное поле для уязвимостей.
     
  • 5.33, Нимо Ан (?), 18:46, 18/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Кстати вот очень жаль, что нет. При том, что она присутствует и в Firefox и в Chrome и в других браузерах на их основе (т.е. совокупно - на большинстве клиентов) давно пора дать к web-приложениям к ней доступ через нормальный SQL и перестать морочить людям голову. Хотя нет, они сами себе её заморочат - тут же нагородят кучу всяких ORM...
     

  • 1.23, Аноним (-), 13:45, 18/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Это хорошая и давно ожидаемая новость.

    В конечном итоге можно будет писать single-page application с нормальной MVC и постоянным хранением данных на стороне клиента.

    Представьте RoR-подобный framework на стороне пользователя.

     
     
  • 2.29, Crazy Alex (ok), 16:59, 18/11/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    С нормальной - очень вряд ли. Я пока в веб-приложениях ничего нормального не видел. Ни модульности, ни описания GUI, ни работы с данными. Вот костылей - да, много.
     
     
  • 3.34, Okarin (ok), 18:48, 18/11/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А их и не будет. До тех пор, пока из сверхпримитивных элементов будем пытаться построить GUI. Пора бы нам признать, что из "языка разметки гипертекста" не выйдет нормального фреймворка для гуевых сетевых приложений.
     
  • 2.35, waf (ok), 23:08, 18/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >В конечном итоге можно будет писать single-page application

    Нинада! Вот только что: http://mobile.dzone.com/articles/single-page-web-apps-worst .

     

  • 1.26, Аноним (-), 14:53, 18/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > в Chrome 37+, Firefox 31+ и IE 10+

    Opera 12 нет, значит не нужно.

     
     
  • 2.31, Anonim (??), 17:26, 18/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Толсто или тонко? А браузер (O12) до сих пор рабочий.
     

  • 1.32, Okarin (ok), 18:42, 18/11/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Так есть уже куки, Local Storage, IndexedDb и Web SQL Database. Но нужно больше хранилищ!

    Кстати, "db.select().from(card).where(card.id.eq('12345'));" - не SQL ни разу, это как раз пародия на без того убогий API MongoDB. Зачем он на клиенте - я правда не знаю.

     
     
  • 2.37, Анонисимус (?), 06:44, 20/11/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Вот как раз на замену Web SQL Database, его же выпилить собираются, а первые два ключ-значение.
     

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



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

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