Поддержка PostgreSQL в Meteor

Автор: admin от 24-08-2015, 10:00, посмотрело: 451

Поддержка PostgreSQL в Meteor
Поддержка PostgreSQL в Meteor

В популярной платформе для быстрого создания веб-приложений скоро появится официальная поддержка SQL. Ранее разработчики неоднократно отказывались это делать, мотивируя тем, что SQL не вписывается в философию проекта. Однако, настойчивость сообщества сделала своё дело и уже сейчас вы можете попробовать предварительную реализацию поддержки SQL в Meteor. Все подробности — под катом!

Meteor является мощнейшим инструментом для быстрого создания веб приложений, однако отсутствие поддержки SQL резко ограничивает его область применения. Изначально Meteor основан на NoSQL базе MongoDB, которая идеально подходит для реализации таких «фишек» метеора, как компенсация задержки и реактивность. И изначальное отсутствие поддержки SQL в этой идеалогии можно понять, т.к. для её реализации требуется реализовать следующее:

  • Реализовать SQL базу данных на клиентской стороне и имитировать выполнение всех запросов на клиенте для исключения задержки в работе приложения

  • Реализовать подписку на запросы, которая осуществляет рассылку изменений клиентам при обновлении в базе данных любых таблиц, указанных в запросе

  • Синхронизировать клиентскую копию базы с сервером на основании подписок



  • Эти задачи уже пыталась решить команда Space Elephant www.meteorpostgres.com. На основе их опыта сейчас и реализуется официальная поддержка. Код доступен в репозиториии на GitHub github.com/meteor/postgres-packages. Посмотрев на реализацию, мы имеем следующее:

  • Для исполнения SQL на клиенте используется Knex knexjs.org, который строит структуру SQL запроса и на основании которого выполняется соотвествующее изменения в клиентской Minimongo

  • Реализация подписок сделана на основе триггеров github.com/meteor/postgres-packages/tree/master/packages/pg/observe-driver. Т.е. в запросе на основании SQL запроса создаются необходимые триггеры в базе данных, которые с помощью pg_notify отправляют сообщения об изменениях в базе



  • Вот как будет выглядеть публикация подписки с объединением нескольких таблиц:

    Meteor.publish("user-posts-and-their-comments", function(userId) {
        const postsQuery = Posts.knex()
            .select("posts.*")
            .innerJoin("users", "posts.user_id", userId);
        const commentsQuery = Comments.knex()
            .select("comments.*")
            .innerJoin("posts", "comments.post_id", "posts.id")
            .innerJoin("users", "posts.user_id", userId)
        
        return [
            postsQuery,
            commentsQuery
        ]
    })
    

    Все примеры разработчики выложили здесь: github.com/meteor/postgres-packages/tree/master/examples

    Сейчас разработчики активно совершенствуют поддержку PostgreSQL и добавят поддержку других SQL баз данных в будущем.

    Источник: Хабрахабр

    Категория: Программирование » Веб-разработка

    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

    Добавление комментария

    Имя:*
    E-Mail:
    Комментарий:
    Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
    Введите два слова, показанных на изображении: *