2009-12-30 45 views
6

我已经继承了一个公司应用程序,每个“对象”使用58个表,并且应用程序可以有N个对象。我们正在为应用程序安装75-100个对象,即4300-5000个表。1000个表或mysql的多个实例?

我们正在试图找出是做的,我们要使用一个数据库和每个对象前缀的表名,或每个对象使用一个数据库(应用程序支持)。唯一的区别是每次安装应用程序时,如果我们要为每个数据库执行操作,则需要在不同端口上添加更多的mysql实例。

有没有人做过类似的事情?在数据库中是否有任何问题(管理层以外)有4000多个表?

编辑

感谢您的更新。至于一堆评论

1)公司付出的很好......我不会愚蠢的不要这份工作。我只希望写出优秀的代码将我的银行账户中的$ $$

2)我们的客户对产品感到满意。我们考虑过重新编写它,但除了成本之外,我们会错过市场。虽然结构糟糕,但该应用程序的效果比大多数客户都要好。

3)对象不是最好的术语......它不像对象/类,而是应用程序内部的对象。我想我可以只说斗。

+0

一篇不错的文章,讨论您所问的同一问题: http://bit.ly/5Zs9aC – 2009-12-30 15:30:11

+0

您可以在数据库中拥有大量表格,但特定产品具有特定的限制。给mysql看到这篇优秀的文章: http://www.askbjoernhansen.com/2008/02/14/10000_tables_in_one_mysql_database.html 是否有可能您的precdessor创建如此多的表作为一种分区形式?它是一个对象,像一个分散在多个表(垂直,分布的列)的单个客户,还是更多地是整个客户集合被划分为多个表(水平的,分布的行)? – 2009-12-30 15:30:50

+3

虽然我无法提供答案,但我可以提供我的同情! – 2009-12-30 15:39:26

回答

0

很难说没有看到实际的模式(以及为什么地球上的某个对象可能需要58表),但是如果您需要连接这些表,您需要将它们保存在一个数据库中。

在一个数据库中有很多MyISAM表意味着一次使用它们意味着需要有大的table_cache

2

如果你重复58次表格100次,我建议规范化规则已被践踏。您的公司不太可能会重新审视此产品的架构设计,但我会根据您提供的信息推荐它。

不要让它分布数据库更糟。延迟如何提供帮助?

2

MySql将每个表格存储为一个文件,除了操作系统和硬盘驱动器之外,没有任何限制。但是,有一个原因并没有经过讨论 - 拥有数千个表几乎肯定是错误的事情,您的数据库模式可能非常需要重新设计。

+0

将每个tabke作为一个文件:不是,InnoDB例如将所有数据存储在单个文件中,除非设置了特定的选项。 – shylent 2009-12-30 16:03:59

2

奇怪的是,我已经看到了这个类型的应用程序,我可以告诉你这样做是最好的东西重新编写应用程序。停止销售应用程序,直到可以重新考虑设计不包含每个对象58个表。

1

我曾为一家实施类似于您所谈论的事情的公司工作。我们使用的是一种名为RAMCO的产品,并且以任何方式实施,我们选择将所有表保存在单个数据库中。我们选择这种方法有多种原因(包括更简单的管理,备份,复制和集群)。有趣的是,当你有这样一个不连贯的数据模型时,你放入它的实际数据量并不比你放入不同的模型更多。出于这个原因,我们的备份大约是12GB未压缩的。就引擎而言,它可以处理很多表格。

这就是说,我同意迄今为止的所有其他答案,您的公司应该肯定会重新考虑他们的数据架构(或者如果我是你,我会重新思考我是否真的想为一家可以实施类似的东西)。就我而言,该合作者拒绝放弃该产品,所以我找到了其他工作。

0

如果您可以保证表的数量不会无限制地增加,那么拥有相当大数量的表是没有问题的。

真的是主要的问题是表缓存(它应该真的比表总数大,除非你想要性能吸)和引擎和操作系统的限制。

我们经常使用MyISAM,每台服务器有2000多个表,如果您已经调整并测试了它与该卷一起工作,则没有特定的问题。

确保您使用预定数量的表进行性能测试。开桌子可能很昂贵,所以请确保你不要做太多的事情。

当你关闭一个表时,一些引擎(MyISAM)会抛出一些缓存的数据(只有关键块),如果你定期关闭它们,这是非常糟糕的。

根据选项,您的引擎可能需要一个或多个文件描述符,每个打开的表。通常(在Linux上)mysql应该使用ulimit正确调整最大数量,但在某些情况下可能不会。

在某些时候,您可能会遇到os范围的限制(默认情况下,我认为在某些Linux版本中为32k),并且必须通过sysctl或其他调整来增加它。