MeteorでのPostgreSQLサポート







Webアプリケーションを迅速に作成するための一般的なプラットフォームは、まもなく公式のSQLサポートを受けます。 以前は、開発者はこれを行うことを繰り返し拒否しており、SQLはプロジェクトの哲学に適合しないと主張していました。 ただし、コミュニティの永続性はその役割を果たしており、MeteorでSQLサポートの予備的な実装を試すことができます。 すべての詳細は未定です!



Meteorは、Webアプリケーションを迅速に作成するための強力なツールですが、SQLサポートがないため、その範囲が大幅に制限されます。 当初、MeteorはMongoDBのNoSQLベースに基づいており、遅延補正や反応性などの流星チップの実装に最適です。 そして、このイデオロギーにおけるSQLサポートの最初の欠如は理解できます。 それを実装するには、以下を実装する必要があります。

  1. クライアント側にSQLデータベースを実装し、クライアント上のすべてのクエリの実行をシミュレートして、アプリケーションの遅延を回避します
  2. リクエストで指定されたテーブルをデータベースで更新するときに、顧客への変更の配布を実行するリクエストへのサブスクリプションを実装するため
  3. サブスクリプションに基づいて、データベースのクライアントコピーをサーバーと同期します




Space Elephantチームwww.meteorpostgres.comは、すでにこれらの問題を解決しようとしています。 彼らの経験に基づいて、公式サポートが現在実装されています。 コードはGitHubリポジトリgithub.com/meteor/postgres-packagesで入手できます。 実装を見ると、次のものがあります。

  1. クライアントでSQLを実行するには、 Knex knexjs.orgを使用します 。これは、SQLクエリの構造を構築し、それに基づいてクライアントMinimongoで対応する変更が実行されます
  2. サブスクリプションの実装は、 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データベースのサポートを追加する予定です。



All Articles