数据库设计用于非常大量的数据

时间:2010-04-09 23:35:47

标签: mysql database performance database-design

我正在开发一个涉及来自美味网站的大量数据的项目。可用数据是“Date,UserId,Url,Tags”(对于每个书签)。

我将我的数据库规范化为3NF,并且由于我们想要组合使用的查询的性质,我归结为6个表...设计看起来很好,但是,现在大量的数据在数据库中,大多数查询需要连接至少2个表以获得答案,有时是3或4.首先,我们没有任何性能问题,因为对于测试问题我们没有添加太多数据到数据库。既然我们拥有大量数据,只需加入极大的表就需要花费大量时间,对于我们的项目来说,这必须是实时的,这是一场灾难。

我想知道大公司如何解决这些问题。看起来规范化表只会增加复杂性,但是大公司如何处理数据库中的大量数据,他们不使用规范化吗?

感谢。

1 个答案:

答案 0 :(得分:13)

既然你问过大公司(一般)如何接近这个:

他们通常有一个dba(数据库管理员),他生活和呼吸公司使用的数据库。

这意味着他们的人员了解如何以最佳方式设计表,分析和调整查询/索引/ OS /服务器以及了解可能导致数据库出现问题的RAID控制器的固件版本。

你并没有太多谈论你做过什么样的调整,例如。

  • 您使用的是MyISAM还是InnoDB表?对于不同的工作负载,它们的性能(尤其是它们的功能)完全不同。
  • 是否根据您运行的查询正确编制了表格索引?
  • 对你的所有查询运行EXPLAIN - 这将帮助你识别可以添加/删除的键,选择正确的键,比较查询(SQL让你有很多方法来完成同样的事情)。
  • 您是否已调整查询缓存?对于某些工作负载,查询缓存(默认开启)会导致相当大的减速。
  • 你的盒子有多少内存,是否已经调整了mysql以利用它?
  • 您是否使用面向数据库的文件系统和raid设置?
  • 有时候需要稍微去标准化。
  • 不同的数据库产品会有不同的特征,对于某些工作来说,MySQL的速度可能非常快,而对其他产品来说则慢得多。