我从 stackoverflow 播客中记得Fog Creek为Fogbugz为每个客户使用一个数据库。我认为这意味着 Fogbugz On Demand 服务器拥有数以千计的数据库。
我们刚刚开始开发一个网络应用程序,并有一个类似的问题需要解决(许多客户拥有自己的独立数据)。
使用每个客户的数据库会出现什么问题?我该如何解决它们?
每个客户数据库的优势
缺点
我们正在构建一个包含多种服务的网络平台,每个服务都有自己的底层数据。这些服务是按照面向服务的架构原则独立构建的,但它们针对潜在的相关数据进行交易。我们正在考虑这些服务是否应该共享一个大数据库或每个都有自己的数据库。(我们计划在 Windows 2008 群集上使用 SQL Server 2008 Enterprise。)
我们已经考虑过的每种方法的一些优点包括:
从操作的角度来看,这个平台中的每个服务都有自己的数据库,还是都放在同一个数据库中更有利?哪些关键因素决定了这个问题的答案?
有很多文章夸大了(当然恕我直言)对innodb_file_per_table. 我知道使用innodb_file_per_table,应该可以更好地控制各个表;比如分别备份每张表。然而,对更好性能的要求是有问题的。
在我的测试中,在性能没有差异innodb_file_per_table,并ibdata1为60GB的数据库。当然,这是一个普通查询的简单测试,现实生活中复杂查询的情况可能会有所不同(这就是我问这个问题的原因)。64 位 linux 搭配ext4可以有效处理大文件。
使用innodb_file_per_table,需要更多的磁盘 I/O 操作;这在复杂的JOINs 和FOREIGN KEY约束中很重要。
表空间在 single 上共享ibdata;单独表的专用表空间如何节省磁盘空间?当然,使用 为每个表释放表空间更容易ALTER,但它仍然是一个昂贵的过程(带有表锁)。
问:是否innodb_file_per_table有关于MySQL的性能更好的效果呢?如果是,为什么?
这是一个数据库,用户可以在其中创建“项目”并对其进行处理。我们有一个表格project和各种其他表格,其中包含项目的不同属性(每个项目的多行,从 2-30K 行)。所有这些都包含projectID链接到project. 目前数据库是400GB。
我们正在尝试为每个项目创建一个架构,其中每个架构都将包含所有属性表。每当创建一个项目时,它都会获得一个新的模式。这意味着每个表最多包含 30K 行,这将提高select性能。我们将在查询中使用动态 SQL 来读取/插入。
我觉得这不是数据库的正确应用,但我如何向我的团队证明这是一种糟糕的方法?