【问题标题】:dynamic database in grailsgrails中的动态数据库
【发布时间】:2016-12-11 10:23:42
【问题描述】:

我正在尝试使用 grails 3.1.1 创建一个项目。我希望每个用户都拥有自己的数据库。是否可以在 grails 中创建这样的项目?例如我有一个域

class User {
  String name
  String username
  String password
  String databaseName

  static constraints = {
      name(blank: false)
  }
}

因此,每个用户都可以使用字段databaseName 访问他们的数据库。谁能告诉我该怎么办?

【问题讨论】:

  • 这很奇怪。如果您坚持每个用户 1 db,为什么不在不同端口上运行同一应用程序的实例,每个端口都有自己的数据源配置和单独的登录模块,将用户重定向到相应的实例?不知道在运行时动态配置数据源,但是如果添加新用户,无论如何都需要创建一个新数据库。

标签: spring grails


【解决方案1】:

这听起来不对。您可能有一个用户包含一个实体而不是一个数据库。

【讨论】:

  • 不是用户数据库,我是指项目中的用户,例如用户名“abc”使用数据库“abc”,用户名“xyz”使用数据库名称“xyz”
【解决方案2】:

这在 Grails 的约定优于配置范式中是不可能的,因为它非常适合将实体映射到数据源(不一定是数据库)。

我真的很想知道一个用例,您希望每个用户有一个数据库模式。要实现这个用例,你需要 100% 的自定义代码(我什至会避免使用 ORM,因为在这种情况下配置 EntityManager 似乎几乎是不可能的,所以最好使用 vanilla JDBC)。

【讨论】:

  • 就我而言,每个用户都会有一个很大的数据库大小,例如,如果我有 10 个用户并且我使用的是单个数据库,我认为 mysql 不适合这个大小,例如每个用户都需要minimun 数据库直到 1GB,那么 10 个用户必须是 10GB,
  • 一个数据库 10GB 对于 MySQL 数据库来说并不是很大。您可以轻松地扩展到 Terrabyte 维度,而不会出现任何性能问题(当然很大程度上取决于您的架构)。但是@injecteer 是对的,Multi-Tenant Plugin 似乎适合您的用例。
  • 真的吗? 10GB不是一个很大的数据,那么你能告诉我最大大小吗?因为现在我在选择数据库时感到困惑,每个用户需要的数据库最小大小为 3GB,最小用户可能直到 100 个用户
  • 答案是“它依赖”。如果不了解应用程序的上下文和用例,就很难为您提供更详细的建议。我真的不明白哪种 Grails 应用程序(针对非常传统的 Web 应用程序架构量身定制)确实需要您建议的设计,但这完全取决于您和您的上下文。您可以将关系数据库扩展到许多 TB 的数据,但可能还有其他更适合此任务的持久性。
  • @akiong 查看http://dev.mysql.com/doc/refman/5.6/en/table-size-limit.html 上的表大小限制 1 个表的限制(至少 2gb,具体取决于操作系统)已经超过了整个的 1 个用户的预期大小> 1 个用户的数据库。
【解决方案3】:

Grails Multi-Tenant Plugin 是你所需要的

【讨论】:

  • 除了不能与 Grails 2 或 Grails 3 一起使用的小问题
  • @BurtBeckwith 从未亲自使用过那个
  • @BurtBeckwith 你能解释一下stackoverflow.com/questions/38175154/… 吗?
  • 您没有使用过该插件,但您推荐其他人使用它?这与 SO 的工作方式几乎完全相反 :)
  • @BurtBeckwith 好吧,我可以用我的插件意识帮助其他人:) 许多人甚至从未听说过多租户。现在说真的,我实际上在几年前评估了该插件以将其包含到我的一个项目中。另一方面,您认为其他“答案”不会提供有关该主题的任何相关信息,是吗?
猜你喜欢
  • 2010-12-25
  • 2015-02-26
  • 2018-08-14
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-03
  • 1970-01-01
相关资源
最近更新 更多