代码之家  ›  专栏  ›  技术社区  ›  nilamo

单独数据库中的用户表

  •  3
  • nilamo  · 技术社区  · 15 年前

    注意:我无意实现这个,它更多的是一个思想实验。

    假设我通过一个web界面提供了多个服务。其中至少有两个需要用户注册和数据库中的一些数据。一次注册就可以访问所有服务。比如谷歌(GMail、谷歌文档等)。

    所有这些与注册用户相关的服务是否都位于一个数据库中,可能带有表前缀以表示它们所用于的服务?

    或者每个服务都有自己的数据库?我能看到的唯一好处是这样做会使表名更干净。任何时候需要任何用户交互,都需要与至少两个不同的数据库交互,这将不必要地使sql查询复杂化。

    这是否意味着“大男孩”只使用一个数据库,并用大量不同(可能完全不相关)的表加载它?

    6 回复  |  直到 15 年前
        1
  •  3
  •   EFraim    15 年前

    我认为让多个服务依赖于一个数据库不是一个好主意。如果需要从备份中恢复某些服务,则必须恢复所有服务。 您可能也在重载数据库服务器。 只有在他们将来可能会共享很多数据的情况下,我才会这么做。

    此外,您可以考虑只使用共享用户数据的较小数据库。

        2
  •  3
  •   Cody C    15 年前

        3
  •  3
  •   Dana the Sane    15 年前

    如果使用正确的DBMS,则可以同时使用这两种策略中的最佳一种。在PostgreSQL中,在“数据库”中可以有单独的模式。身份验证服务将访问单个模式,并向其他服务提供一个密钥,该密钥用作其他模式中数据的引用。您仍然可以将整个数据库作为单个实体处理,即:

    • 不使用dblink跨架构查询
    • 一致(重新存储数据)备份和恢复

    您获得这些优势的代价是更复杂的DAL(您最喜欢的DAL框架可能不支持)和DBMS之间的可移植性较差。

        4
  •  2
  •   Chris Simmons    15 年前

    我从来没有这样做过,但我认为这取决于性能。如果独立数据库几乎没有开销,那么这可能就是答案。使用单独的DBs还可以方便地在多台机器上拆分DBs。

    复杂性也是一个问题。希望您的模式能够以这样一种方式定义,即您不需要为不同的查询深入到多个不同的数据库中。

        5
  •  1
  •   Paul Sonier    15 年前

    数据库及其访问总是有可能过载的问题;复制是一个潜在的好解决方案。

        6
  •  1
  •   Cade Roux    15 年前

    有几种策略。

    我建议从一个数据库开始。如果您的RDBMS支持它,我将根据模式来组织组件,这将允许您至少通过设计保持逻辑上的分离。以后可以更容易地重构。

    许多数据库都有可以认为不相关的表。有时在一个系统中,您有多个几乎无法连接的实体网络(有时根本没有)。在这些情况下,您也可以使用模式。