所以我有这个应用程序,它有多个模块,从项目管理到会计模块。 问题是我应该为每个客户(公司)建立一个数据库还是一个包含所有内容的数据库?
1)哪一个会更好的表现?
2)管理多个数据库要困难得多,或者这些数据库是否易于管理
3)我们将为所有用户提供相同的应用程序,这意味着无论数据库的数量如何,都将使用相同的模式。
4)一些客户会有很多这样的事情(例如,会计师每年可能在一张表中增加200万行),而其他客户将使用更少的数据。
你认为我应该怎么用?
答案 0 :(得分:6)
1)拥有单独的数据库可以更容易地在多个主机上分配负载,它以多种方式提升了屋顶;磁盘,内存,锁定,cpu,备份时间等。如果你真的想在mysql中放入数百万行,那么使用单独的数据库(不仅是模式)甚至是单独的实例肯定是一个好主意,这样资源消耗的客户就不会在资源消耗较少的客户身上施加停机时间。
2)管理N的次数将是N次:N是数据库的数量:o)这个额外的成本必须与仅使用一个db / schema的成本进行比较,而是在代码中管理客户的分离。如果您必须在托管公司,甚至是本地脾气暴躁的dba上调用客户支持,而不是每次需要更新架构或创建新数据库时都从控制台运行一个简洁的脚本,那么它本身就更难管理。 / p>
一些数据库和持久性框架支持多租户,Oracle已经开始在Hibernate 4中出现支持。
即使许多参数指向单独数据库的方向,但 通常也可以只使用一个数据库。
答案 1 :(得分:3)
理论上,多个数据库的性能会更好。也就是说,如果你可以把它们放在不同的磁盘控制器上。但实际上它们很可能都在同一个磁盘上,所以可能没有性能提升。此外,作为RAID阵列的其他成员,可以更好地利用其他磁盘,而不是将数据卸载到其他单独的逻辑磁盘。
从维护的角度来看,多个数据库将成为一场噩梦。每次对数据库的更改都需要进行N次,其中N是客户端的数量。当然你永远不会手工完成,所以你总是必须以编程方式完成它,很快你就会开始意识到如果你只需要在管理控制台上点击几下就可以做同样的事情,那将是多么容易。每次都必须编写代码来为你完成。
答案 2 :(得分:0)