【问题标题】:Should I use a single database or a database per user in this scenario?在这种情况下,我应该使用单个数据库还是每个用户使用一个数据库?
【发布时间】:2020-09-05 04:55:56
【问题描述】:

我正在设计一个库存控制网络应用程序,最初我打算为每个客户/客户使用一个数据库。我现在有一些客户需要一些定制的信息,所以他们可能需要一些我的基本应用程序可能没有的特定信息。最重要的是,一些客户将来可能希望将此应用程序本地存储在他们的商店/商务服务器中,因此他们可能需要他们的所有信息。 如果我使用单个数据库,我认为性能不会成为问题,至少在少数客户的情况下不会。但是,在考虑连接池时,为每个用户使用一个数据库可能会使性能变得复杂。

那么这里最好的方法是什么?如果需要,我会提供更多信息。

另外,如果我为每个用户使用一个数据库,我将如何管理连接字符串?如果用户登录,我的后端如何知道该用户必须访问特定数据库?我会将连接字符串存储在数据库中吗?如果是这样,这会不会是一个安全问题?

我打算在我的后端使用 postgresql 和 node.js..

谢谢你们!

【问题讨论】:

    标签: database postgresql security multi-tenant


    【解决方案1】:

    我看到您正在尝试解决两个问题

    1. 如何以任何用户都可以在自己的环境中托管的方式开发我的应用程序

      您应该在这种情况下使用一个数据库,以确保它易于移植

    2. 我的应用如何在一个集中式主机上支持多个用户

      您仍然应该使用一个数据库,但要弄清楚如何创建不同的方法来存储要在每个客户唯一 ID 基础上加入的数据。这将变得庞大而复杂,但这取决于每个客户的数据有多么不同。此外,您的应用需要处理这种动态状态,因此问题不仅在于选择 db,还在于如何编排动态数据。

    总的来说,我不会在每个用户的基础上处理连接字符串,而是将一组客户保留在基本设置中(静态预定模型),并弄清楚如何处理复杂的客户(动态模型) 当你得到它们时。最终,一旦你有大量的示例案例,你就可以慢慢地开发一个更大的应用程序来处理所有不同的案例。尝试设计一个应用程序来处理您还没有的动态数据并非易事。

    【讨论】:

    • 感谢您的回复! 1 - 所以我最初的想法是,由于我将为该用户拥有一个完整的数据库,因此导出他们的数据会容易得多。该过程将是手动的,用户将无法简单地将应用程序和数据存储在他们的本地计算机中,我们的本地支持团队会这样做。
    • 是的,这是正确的。我也会将应用程序设计为可移植的。这意味着我会为每个客户创建部署来解决问题,而不是稍后尝试在应用程序中解决它。因此,根据用户,您可以将他们路由到他们的部署。
    • 2 - 我曾想过根据用户的需要创建不同的表来存储不同的数据,但正如你所指出的,考虑到数据库和应用程序设计,这可能会变得非常混乱(我必须处理动态)。
    • 据我了解,您建议为每个用户创建应用实例,对吗?
    • 是的,差不多。如果他们不希望您再托管应用程序和数据,这将使部署迁移到客户想要的任何服务器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    相关资源
    最近更新 更多