【问题标题】:Multiple SQL Databases with EF - Good or Bad design?使用 EF 的多个 SQL 数据库 - 设计好还是坏?
【发布时间】:2014-04-07 16:37:22
【问题描述】:

目前,我们有一个大型内部平台,该平台使用许多不同的 SQL 数据库(都在同一台服务器上)。我们总是创建新的数据库,我们觉得这些数据与我们存储在其他数据库中的数据完全不同/独立。通过这种方法,我们最终拥有了许多不同的数据库(大多数有 30-50 多个表),但它们之间不可避免地总是需要一些连接。

当我们使用实体框架时,任何跨数据库查询都被证明是一个真正的痛苦,我们尝试了许多不同的方法,我个人认为主要问题是 EF 并不能真正跨多个数据库工作。

虽然我知道答案通常是“视情况而定”,但我对人们对此的想法或观点很感兴趣,所以问题是

  1. 我们是否应该将所有独立的数据库合并到一个大型数据库中?

  2. 将我们的数据拆分到不同的数据库是否正确(即使 EF 不能很好地使用它)?

【问题讨论】:

  • 对不起,但是...这取决于。 ;) 有多大?您在每个数据库中处理多少个表?一共有多少个?您始终可以在每个数据库中定义调用其他数据库并构建使用它们的实体的视图。
  • 我通常建议不要分离数据,除非这很少或没有交叉通信。通常模式足以分割数据。
  • 您可以尝试在“MainDatabase”上使用可更新视图,该视图将视图写入其他数据库。我不知道 EF 是否能很好地处理可更新的视图。如果使用可更新视图,我认为大多数人编写存储过程以使用 EF。但它是您可能想要研究的一个想法。

标签: sql-server database entity-framework


【解决方案1】:

你说

我们认为数据与我们存储在其他数据库中的数据完全不同/独立的地方

然后

跨数据库查询被证明是一个真正的痛苦

如果您必须执行许多跨数据库查询,那么数据可能不像您想象的那么独立,在这种情况下合并数据库可能更有意义。

另一方面,如果您的跨数据库查询很少见,那么它可能没问题。如果不知道您的域模型的详细信息以及您在每个数据库中拥有的内容,就很难说。检查您进行这些跨数据库查询的情况,并查看为什么您要进行这些查询,以及发生的频率。如果它很重要或频繁,那么考虑合并。如果它很少见,或者不是性能关键,或者合并数据库的麻烦远远超过编写这几个跨数据库查询的麻烦,那么它可能没问题。不过要小心最后一点 - 现在 将数据库分开可能会更容易,但您将来可能会遇到一些在合并数据库上会更容易的东西。再看看您在这些数据库中存储了哪些类型的数据,并列出您可能需要跨数据库查询的所有场景。然后查看这些场景中的每一个,并确定它发生的可能性有多大,以及如果不合并数据库会导致多大的问题。这应该可以帮助您决定是否合并。

如果您决定合并,请尽快执行。没有合并的每一天都是人们编写代码的一天,当你开始合并时,这些代码必须重构。越早做,就越容易。

【讨论】:

    【解决方案2】:

    你说的数据库有多大?多少张表/多少 GB?输入的数据类型是什么?

    您猜到的答案很可能是“视情况而定”。但在这里我要说不,拆分可能不是一个正确的选择。 如果您必须进行跨数据库查询,则很可能数据拆分不正确。在某些数据独立的情况下(例如事务和报告),跨数据库拆分可能会更好(但当然这需要从一个数据同步到另一个数据)。

    您是否考虑过将同一数据库中的数据分开,但驻留在不同的架构上?这就是通常的做法。

    【讨论】:

    • 对于数据量大的数据库,数据库不是那么大 5-10GB,而对于其他数据库则不到 1GB。数据量大的倾向于存储市场数据系列,例如日期时间和值
    • 虽然每个 db 有很多表在使用 (30-50)
    • 我肯定会使用模式 - 更易于管理,跨环境保持同步。除非您的数据库大小达到 100 GB(即使这样也可以),否则您应该尝试迁移到单个数据库以使您的生活更轻松。
    猜你喜欢
    • 2011-05-17
    • 2015-10-29
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多