使用两个数据库有什么理由吗?

3

是否是因为大小的原因?顺便问一下,尺寸限制是多少?


9
需要使用两根绳子有什么原因吗?顺便问一下,一条绳子有多长? - Greg Hewgill
10个回答

9

使用两个数据库有很多原因,一些常见的原因如下:

  1. 大小受操作系统、文件系统和数据库服务器的控制。

  2. 区分数据类型。把数据库想象成一本书——你不会写一本跨越多个主题的书,也不应该(必须)拥有一个包含多个主题的数据库。只要所有数据以某种方式相关联,你就可以将它们放在一起(例如,所有表都与一个网站或应用程序有关)。

  3. 导入/导出——如果您可以丢弃并还原整个数据库而不是导入数据库表中的单个行,则将数据导入应用程序可能更容易。


  1. 如果你已经达到了限制,你应该购买更大的硬件(更多空间),并/或者开始分片。分片不是另一个数据库。
  2. 我不太喜欢你的解释,特别是因为有很多跨越多个主题的书籍(例如百科全书、词典等),所有这些都是数据库的完美例子。多个站点可能会强制你使用不同的数据库。多个应用程序肯定会更容易... 是的。但是如果你这样做,那么你的数据库可能不是关系型的(可能)。
  3. 我认为这个答案严重偏离了目标。
- xenoterracide
@xeno,大小限制可能是由于软件,例如SQL Express,它将限制您的数据库大小为4 GB。分离是为了表明两个数据库中包含的数据彼此不耦合。就像使用不同数据后端的两个插件一样,任何一个插件都可以单独工作。百科全书包含无关数据。还有几个可用的维基百科,所有这些维基百科都具有不同的目标内容。在开发过程中删除并重新创建数据库比开始到处删除所有内容要容易得多,特别是当您拥有[而不是]触发器、外键等时。 - sisve
我认为如果你已经达到了尺寸限制,那么你需要考虑购买一个新产品。事实上,你应该已经迁移了。这属于使用正确的工具来完成工作。为什么你要在一个组织中运行几个维基而不是运行一个带有分类和可能不同的URL以及一些Web服务器魔法的维基?这是糟糕的设计吗?当然,不同的组织将拥有单独的数据库。在开发过程中,我有重新加载数据库的脚本。当更新生产数据库时,你知道我会备份。 - xenoterracide
  1. 更大的硬件并不总是一个选项,如果将数据分成两个数据库可以解决这个问题,那么这是一个好的解决方案。现实世界并不总是理想的。
  2. 这只是一个比喻,也许并不完美,但基本前提仍然成立。在关系型数据库中,数据以多种方式进行分离。按行和列、按表、按数据库和按服务器。开发人员需要确定最佳分离方法。
- pixel
作为一个例子,我所工作的项目有两个数据库——一个管理用户数据,另一个管理其他对象数据。这第二个数据库由外部公司定期提供。我们为这个对象数据有两个独立的数据库,一个是实时的,一个是暂存的。当我们收到新数据时,当前的暂存数据库被清空,然后加载新的数据。我们测试这些数据,然后将应用程序指向暂存数据(因此暂存变成了实时,实时变成了暂存)。这使得整个过程更快、更干净,也更少出错。 - pixel

5

将单个应用程序或服务分开。我看不出使用单个应用程序/服务的分开数据库的任何理由。

(注意:复制,即使是多主复制,也不是单独的数据库。Sharding 也不是。)

我认为这里有些人混淆了数据库和数据库实例

例如: 电话簿是数据库的一个典型例子。

复制: 拥有相同电话簿的两份副本并不意味着您拥有两个数据库。这意味着您拥有1个数据库的2个副本,并且您可以将其中一个交给其他人,以便您可以同时查找不同的内容,从而一次完成更多的工作。

Sharding: 您可以在白页末尾和黄页开始处将这些电话簿分开,并将它们交给另外两个人。您还可以在每个字母处进一步撕开它们,当您需要Susan Summers时,请让那个拥有该部分电话簿的人查找她。


或者在一个应用程序中有两个不同的部分,其中一个部分可以独立于另一个部分工作(并且只有一个部分被重用在其他项目中)。 - sisve
我能想到的唯一可能是您所指的是像身份验证这样的东西。在这种情况下,我会考虑将其作为另一个服务/应用程序。实际上,我所想到的所有情况都是已经集成的另一个服务/应用程序。 - xenoterracide

2

假设您想要发布或重用某个外部数据库,并将其与您的主数据库分开。这是使用两个数据库的好理由...您可以随时删除和重新导入外部数据库,而不会影响您的数据库,反之亦然...


2

为保证数据的可靠性,你可以使用两个数据库,就像大多数银行有两个ATM一样。如果一个数据库出现问题,你可以切换到另一个,但是为了快速进行切换,需要进行设置,比如CNAME和控制自己的DNS服务器。

如果写入操作带有复杂触发器,则可以在一个数据库上执行写入操作,并使用一些同步方式将更新同步到第二个数据库,第二个数据库则用于查询。

你还可以使用两个数据库进行负载均衡,例如使用轮询算法分配负载,以便不会有一个数据库负载过重。


2

有时我会使用单独的数据库,因为它们处理不同的问题。例如,报告数据库或身份验证数据库。



1
  • 通过将数据库系统分割到不同的物理位置来使您的系统可扩展
  • 提供冗余/复制作为备份,实现无缝的运行时间。

1

正如Ben所提到的,复制是原因之一。另一个原因是负载均衡。

例如,Hotmail使用许多数据库服务器,并且客户数据分散在这些数据库中。

如果将所有客户的数据放在一个服务器上,不仅需要大量的存储空间,而且响应时间也会非常慢。

在其他情况下,数据可能会按功能分开。你可能会有两组数据,它们没有联系,或者至少联系非常松散,在这种情况下,将该数据与其他数据分开可能是有意义的。


0
还要考虑IO需求。一个需要立即事务处理,另一个可以排队处理“事务”,一个实例具有高优先级,另一个实例处于“空闲”优先级等等。然而,通过正确的硬件和表空间/文件系统布局,大多数这些情况都可以在单个数据库中实现。

0

我认为iPhone上的SQLite数据库大小限制为50兆字节,但您可以打开多个数据库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接