5

Google App Engine は、名前空間を使用することにより、マルチテナント アプリケーションに関して問題なく動作します。ただし、Cloud SQL をデータ永続化メカニズムとして使用すると、問題が発生し始めます。具体的には、異なるデータベースを各名前空間に接続するにはどうすればよいでしょうか。現在、アプリケーション全体が使用しているデータベースはインスタンス構成に設定されているため、推測できることから、デプロイメントにかなりハードコーディングされています。

マルチテナント アプリケーションの背後にある正確なアーキテクチャは、ビジネス ニーズによって異なることは承知しています(または、少なくとも有効にスケーリングする場合は異なるはずです)が、Google Cloud を使用したマルチテナント アプリケーションの構築に具体的に対処する一般化されたソリューションがいくつかあることに満足しています。 SQL。

マルチテナンシーの列ベースを作成しないようにしています (クラウド SQL であるという性質上、すべてが 1 つのモノリシック データベースにあることを心配する必要がなくなる理由を誰かが説明できない限り)。理想的なシナリオは、名前空間 API を使用して異なるデータベース (すべてが同じスキーマを共有) にアタッチする 1 つのアプリケーションと、すべてのデータベース テナント間でリストデータを同期する何らかのメカニズムを持つことです。

私たちが持っていた他のアイデアは次のとおりです。

  1. 各テナントには独自のアプリケーションがあるため、ハードコードされたデータベースがあります.. リスト データの同期の問題があります (発行者/ブロードキャスト、プロキシ?)。
  2. 各テナントには独自のバージョンがあるため、データベースがハードコードされています。リスト データにはデータストアを使用します。
  3. 1 つのアプリケーション、1 つのデータベース、名前空間に基づくプレフィックス付きのテーブル名 (ただし、これを JPA で動的に動作させる方法がわかりません)

また、互換性のある別のクラウド SQL プロバイダーを使用することに完全に反対しているわけでもありません。

最後に、なぜ SQL を使用するのか、疑問に思うかもしれません。唯一の理由は、複数のアプリケーションが同時に読み書きできることです。これは、データストアでは許可されていません。

4

1 に答える 1

1

これは問題にはなりません。アプリケーションが使用するデータベースは JDBC 接続 URL で指定できるため、アプリケーションごとに実行時に定義できます。

c = DriverManager.getConnection("jdbc:google:rdbms://my_instance/my_database");

于 2012-08-01T16:02:40.943 に答える