nodejsとpostgresを使用してマルチテナント(/ソフトウェア)を構築しようとしていますが、ORMとして続行しています。私はセキュリティの理由から、余分な列を持つすべてのテーブルを持つ単一のDBを持つのではなく、クライアントごとに個別のDBを使用することに決めました。私は結果を達成しましたが、パフォーマンスは良くありませんでした。なぜなら、各DBのモデルを後継に応じて(各要求ごとに)初期化する必要があったからです。これを行うための良い方法はありますか?私は後遺症で何かを見逃していますか?nodejsを使用するマルチテナント(SAAS)
1
A
答えて
1
私は、Postgresのマルチテナントに対するスキーマアプローチを好んでいます。私はセキュリティに関する権限はありませんが、テーブルベースのマルチテナントよりも優れているはずです。ディザスタリカバリは、テーブルベースのMTよりもわずかに簡単ですが、別のDBよりもさらに悪いです。
私はES6プロキシを使用してこれをSequilizeで実装することができました。これはあなたのノードのバージョンにハードのrequirmentを置きますが、あなたは、少なくともv6.9.2を使用するために喜んでいる場合は、私のlibを試してみることができます:
https://www.npmjs.com/package/sequelize-multi-tenant-enhancer
あなたが持っているでしょう単一のデータベース(Postgresの)と
1
上記の私のコメントの迅速な実装。
app.js:
const Sequelize = require('sequelize');
const connections = {
client1: new Sequelize('postgres://user:[email protected]:5432/client1'),
client2: new Sequelize('postgres://user:[email protected]:5432/client2'),
client3: new Sequelize('postgres://user:[email protected]:5432/client3'),
};
const User = require('./models/user');
const Post = require('./models/post');
const Comment = require('./models/comment');
Object.keys(connections).forEach(connection => {
connection.define('User', userColumns);
connection.define('Post', postColumns);
connection.define('Comment', commentColumns);
});
モデル/ user.jsの:
明らかmodule.exports = {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
username: Sequelize.STRING,
email: Sequelize.STRING
// etc, etc
};
どんなサーバーフレームワークあなたは(私が想像したURLから)を検出する必要があります使用するクライアント接続特定のリクエストに使用する
また、単一接続のアプリケーションを作成し、複数のインスタンスを展開することを検討してください(現在はこれをやっています)。個別のDBに設定すると、より簡単な選択肢になるかもしれません。
関連する問題
- 1. マルチテナントSaaSリファレンスアプリケーション
- 2. マルチテナントSaaSの開発
- 3. SAAS REST APIのマルチテナント認証
- 4. アプリケーションの役割マルチテナントAzureのSaasアプリケーション
- 5. yii2で構築されたマルチテナントSaas
- 6. マルチテナントSaaSアプリケーションのための最善のアプローチ
- 7. Azureマルチテナントsaasアプリ、登録方法環境ごとのアプリケーションは?
- 8. SaaS、マルチテナント(共有スキーマ) - 1つまたは2つのテーブル?
- 9. Spring3を使用したマルチテナント
- 10. 開発用にOracleマルチテナント・データベースを使用
- 11. マルチテナントWebアプリケーションAADを使用してマルチテナントWeb APIを呼び出す
- 12. ダイナミックデータソースを使用したSpringブートjpaマルチテナント
- 13. RavenDbバックアップHTTP APIを使用し、マルチテナント
- 14. KeycloakとSpringBootを使用したマルチテナント
- 15. OWINパイプラインを使用したマルチテナント認証
- 16. Azure関数で新しいSaaSテーブルアダプタを使用する
- 17. SQLAlchemyを使ったマルチテナント
- 18. フィルタリングされたdbContextを使用するマルチテナントWebアプリケーション
- 19. Azure Active Directory - 非AAD IdPを使用するマルチテナントのSSO
- 20. マルチテナント環境でJPA @Column(unique = true)を使用するには?
- 21. SaaSアプリケーションに使用するBIダッシュボードが必要
- 22. SaaS用MVC APIの作成
- 23. RavenDB - マルチテナントとシャーディングの併用
- 24. Auth0私はAzureのADにマルチテナント型のSaaSの接続についてこのチュートリアルを以下のよ、auth0を使用して
- 25. NodejsパスポートNodejsパスポートを使用して
- 26. Nodejsのpushを使用したNodejs http2
- 27. 公開されたSQLを使用したSaaS
- 28. SAASアプリケーションの帯域幅使用量を測定
- 29. RESTを使用したSAASおよびアプリケーション開発
- 30. Microsoft Graph Apiを使用したAzure Active DirectoryユーザーとSaaSアプリケーション
使用プールはるかに良いスケーラビリティと頭痛の少ない – Sushant
多分いくつかのコードを投稿しますか? FWIWでは、モデルを一度しか初期化する必要はありません(要求ごとに再定義する必要はありません)。必要に応じて別のDBを保持することができます。関連する接続の詳細を使用して各データベースの後継インスタンスを作成し、アプリケーションの起動時にモデル定義を渡すだけです。 –