【问题标题】:Create schema and tables on demand at the runtime在运行时按需创建模式和表
【发布时间】:2019-10-31 16:04:54
【问题描述】:

所以正如标题所示——我需要创建一个应用程序(最好是 Spring Boot),它将根据用户输入创建模式和表。基本上,将向客户端提供一个休息端点,他们将以 json 格式上传他们的数据模型。我将在运行时解析 json 并构建数据库工件(模式和表)。创建完所有表后,向客户端提供一个休息端点(具有唯一标识符),以对其架构执行 CRUD 操作。

我目前正在考虑的方法是-

  1. 在 db 中创建一个超级用户,然后再部署具有创建新模式和 db 权限的应用程序

  2. 创建准备好的语句以按需调用架构/表创建。准备好的语句将有占位符来获取模式名称和表定义。

  3. 经过适当的身份验证后,允许用户以 json 格式上传他们的数据模型定义。

  4. 清理 json 并调用架构/表创建准备好的语句。

我想到的几个问题 -

  1. 由于所有这些数据库操作都将从单个超级用户的帐户调用,是否安全?

  2. 模式和表将使用本机 SQL 查询而不是 Hibernate 的 ORM 功能来实现。它安全/高效吗?

  3. 对于 CRUD 操作,是否可以将 db 连接从超级用户切换到前面步骤中创建的客户端特定模式?还是应该继续使用相同的超级用户进行 CRUD 操作? 如果可以在运行时使用 Hibernate/Spring-Boot 切换模式,那就太好了。

我想要的是解决这个问题的一般方法。我不需要任何代码

【问题讨论】:

    标签: java database spring hibernate spring-boot


    【解决方案1】:
    1. 典型的 Web 应用程序已经有权删除所有用户的所有数据。
    2. JPA 使您的查询变慢,而不是更快。 JPA 可以帮助缓存,但您似乎不需要这个。
    3. 是的,Spring Boot 中可以有多个数据源。看看这个例子:https://www.baeldung.com/spring-abstract-routing-data-source

    请注意,您的数据库可能不喜欢拥有数百万个表。查询计划、维护作业、备份等都会受到性能损失。基本上,数据库不是为您的用例而设计的。

    【讨论】:

    • 1.对于权限,我指的是绑定在 application.properties 中的 Admin 用户,是否可以使用单个用户或为请求服务的相应客户端创建 DB 用户? 2. 如果不是 JPA,是否建议使用 JDBC 并从中触发 CREATE/SELECT 查询?
    猜你喜欢
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 2014-03-19
    • 2015-04-22
    • 1970-01-01
    • 2020-11-16
    • 2022-01-25
    相关资源
    最近更新 更多