5

Google App Engine 通过使用命名空间在多租户应用程序方面工作良好。但是,当您使用 Cloud SQL 作为数据持久性机制时,您开始遇到问题。具体来说,如何将不同的数据库连接到每个命名空间。目前,整个应用程序使用的数据库是在实例配置中设置的,因此据我推测,它几乎是硬编码到部署中的。

我确实意识到多租户应用程序背后的确切架构因业务需求而异(或者至少应该是如果要有效扩展),但是我会对一些专门解决使用 Google Cloud 构建多租户应用程序的通用解决方案感到满意SQL。

我试图避免基于多租户列(除非有人可以解释为什么它是云 sql 的本质使我不必担心一切都在一个单一的数据库中)。理想情况下,恕我直言,让一个应用程序使用命名空间 api 附加到不同的数据库(都共享相同的模式)和某种机制来同步所有数据库租户之间的列表数据。

我们的其他想法是:

  1. 每个租户都有自己的应用程序,因此硬编码数据库.. 同步列表数据(发布者/广播,代理?)的问题。
  2. 每个租户都有自己的版本,因此是硬编码的数据库。使用数据存储来存储列表数据。
  3. 一个应用程序,一个数据库,基于命名空间的前缀表名(但我们无法弄清楚如何让它动态地与 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 回答