【问题标题】:MySQL Database for each client [closed]每个客户端的MySQL数据库[关闭]
【发布时间】:2012-10-23 03:23:21
【问题描述】:

我需要一些关于这个主题的信息。我搜索了一下,但似乎这真的取决于你的情况。我的情况解释如下:

我们开发了一个系统,让公司可以跟踪他们的项目和财务状况。他们可以创建订单、在员工之间分配任务、发送发票、检查是否已付款等。

目前我们有 1 个域和 1 个数据库,其中包含该公司的所有数据。我们也想将此系统用于其他公司,但在 1 个域上,每个公司都有相同的文件。所以我们可以将文件保存在一个地方,并将所有内容保存在我们自己的服务器上。

我们想要使用多个数据库的原因如下:

  • 我们希望文件在一个地方,更易于维护和更新
  • 一个客户不能偶然访问另一个客户的财务数据
  • 我们可以对客户数据进行单独备份

我认为缺点是:

  • 如果表中的某些内容需要更新,您必须在每个数据库中手动更新
  • MySQL 在 100 多个数据库之后真的会变慢吗?

我是否正确,我们是否通过为每家公司提供个人数据库来做正确的事情?

提前致谢!

【问题讨论】:

  • 简而言之,不,1:1的数据库是错误的公司关系。我认为,即使给每家公司一张单独的桌子也太过分了。为什么不直接使用虚拟表来限制访问?
  • 如果您的数据库服务器在添加n 数据库后变得“慢”,那就是您添加另一台服务器的部分。
  • @raina77ow 我不同意,我们按公司划分表。对于我们的情况,每家公司都有 10m+ 行,因此我们必须将它们拆分。这完全取决于您的具体情况。
  • 你的程序逻辑应该负责不允许 A 公司看到 B 公司的数据。
  • 您确定要添加多个数据库吗?为什么不为新公司添加一个额外的table?我确定您编写应用程序逻辑是为了隐藏安全信息。

标签: php mysql sql database


【解决方案1】:

从技术上讲,您可以拥有的数据库数量没有限制。简单搜索shows几个人进入了1000+个数据库,我没看到100+个数据库有问题

【讨论】:

    【解决方案2】:

    我们希望文件在一个地方,更易于维护和更新

    正如您已经提到的缺点,如果更新需要修改数据库的架构怎么办?与单个数据库(相关表中有client 指示符列)相比,拥有数百个数据库同样难以维护。

    一个客户不能偶然访问另一个客户的财务数据

    但客户端只能通过您的 webapp 访问数据。如果它因意外或其他原因而受到损害,除了同一数据库中的意外记录之外,还有什么方法可以阻止它访问其他数据库?

    Views 可以提供类似的安全优势(尽管目前有一些性能成本)。但是,我倾向于创建存储过程并强制我的应用程序通过它们执行所有数据库操作,其中我可以执行我自己的安全检查,同时将所有数据库访问限制为仅预定义的操作。

    我们可以对客户数据进行单独备份

    仍然可以进行选择性备份,例如SELECT ... INTO OUTFILE

    【讨论】:

    • 我同意!好点,但不会添加来自 100 多个客户端的数据会使整个数据库变得混乱。我想像这样在几周内获得一个庞大的数据库。
    • @StefanWeck:没有理由认为单个数据库会出现问题。 RDBMS 可以非常有效地整理您的数据(前提是您明智地设计它们,例如使用适当的索引)。如果表开始变得非常大,请考虑partitioning 它们。如果它们甚至为此变得太大,请考虑升级硬件。如果您的硬件无法满足您的需求,请考虑 clustering
    • 你已经解决了我的问题,我想我会坚持使用 1 个数据库。但我还有一个问题,如何使用其他公司的数据搜索数千行以获取 1 家公司的数据。我们还跟踪公司的工作,我们已经在数据库中拥有来自 1 家公司的 28.000 条日志。想象一下,如果有 20 家公司这样做。
    • @StefanWeck:使用复合索引:首先使用您的client 列(如果适用),然后使用您需要的任何其他内容。 28k * 20 = 560k,对于大型 MySQL 表来说,这根本不是很多记录。
    【解决方案3】:

    有时最好为每家公司使用自己的数据库。理论上从来没有,但经常在实践中。

    1. Sql 命令更简洁,更易于编写。
    2. 它更安全。如果 sql 查询或脚本出错,公司不会意外访问对方的数据库。您只需要仔细选择数据库。
    3. 以后如果数据库变得太忙,将数据库分离到多个服务器是非常好的。大型数据库或表可能难以拆分。
    4. 表更小,因此查询也更快。

    【讨论】:

      猜你喜欢
      • 2017-05-03
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-09
      • 2014-01-17
      相关资源
      最近更新 更多