在运行时按需创建模式和表
Posted
技术标签:
【中文标题】在运行时按需创建模式和表【英文标题】:Create schema and tables on demand at the runtime 【发布时间】:2019-10-31 16:04:54 【问题描述】:所以正如标题所示——我需要创建一个应用程序(最好是 Spring Boot),它将根据用户输入创建模式和表。基本上,将向客户端提供一个休息端点,他们将以 json 格式上传他们的数据模型。我将在运行时解析 json 并构建数据库工件(模式和表)。创建完所有表后,向客户端提供一个休息端点(具有唯一标识符),以对其架构执行 CRUD 操作。
我目前正在考虑的方法是-
在 db 中创建一个超级用户,然后再部署具有创建新模式和 db 权限的应用程序
创建准备好的语句以按需调用架构/表创建。准备好的语句将有占位符来获取模式名称和表定义。
经过适当的身份验证后,允许用户以 json 格式上传他们的数据模型定义。
清理 json 并调用架构/表创建准备好的语句。
我想到的几个问题 -
由于所有这些数据库操作都将从单个超级用户的帐户调用,是否安全?
模式和表将使用本机 SQL 查询而不是 Hibernate 的 ORM 功能来实现。它安全/高效吗?
对于 CRUD 操作,是否可以将 db 连接从超级用户切换到前面步骤中创建的客户端特定模式?还是应该继续使用相同的超级用户进行 CRUD 操作? 如果可以在运行时使用 Hibernate/Spring-Boot 切换模式,那就太好了。
我想要的是解决这个问题的一般方法。我不需要任何代码。
【问题讨论】:
【参考方案1】:-
典型的 Web 应用程序已经有权删除所有用户的所有数据。
JPA 使您的查询变慢,而不是更快。 JPA 可以帮助缓存,但您似乎不需要这个。
是的,Spring Boot 中可以有多个数据源。看看这个例子:https://www.baeldung.com/spring-abstract-routing-data-source
请注意,您的数据库可能不喜欢拥有数百万个表。查询计划、维护作业、备份等都会受到性能损失。基本上,数据库不是为您的用例而设计的。
【讨论】:
1.对于权限,我指的是绑定在 application.properties 中的 Admin 用户,是否可以使用单个用户或为请求服务的相应客户端创建 DB 用户? 2. 如果不是 JPA,是否建议使用 JDBC 并从中触发 CREATE/SELECT 查询?以上是关于在运行时按需创建模式和表的主要内容,如果未能解决你的问题,请参考以下文章