我正在从事一个涉及美味网站大量数据的项目。可用数据是“Date, UserId, Url, Tags”(对于每个书签)。
我将我的数据库规范化为 3NF,并且由于我们想要组合使用的查询的性质,我减少到 6 个表......设计看起来不错,但是,现在有大量数据在数据库中,大多数查询需要至少将 2 个表连接在一起才能得到答案,有时是 3 个或 4 个。起初,我们没有任何性能问题,因为对于测试事项我们没有添加太多数据到数据库。现在我们有很多数据,简单地连接非常大的表会花费很多时间,对于我们必须是实时的项目来说,这是一场灾难。
我想知道大公司是如何解决这些问题的。看起来规范化表只会增加复杂性,但是大公司如何处理数据库中的大量数据,他们不使用规范化吗?
谢谢。
最佳答案
由于您问及大公司(通常)如何处理此问题:
他们通常有一个 dba(数据库管理员),他与公司使用的数据库息息相关。
这意味着他们拥有无所不知的人员,从如何优化表设计、分析和调整查询/索引/操作系统/服务器,到知道 RAID Controller 的哪个固件版本可能导致数据库出现问题。
你不多说你做了什么样的调优,e.g.
- 您使用的是 MyISAM 还是 InnoDB 表?对于不同的工作负载,它们的性能(尤其是它们的功能)截然不同。
- 是否根据您运行的查询正确地为表编制了索引?
- 对所有查询运行 EXPLAIN - 这将帮助您识别可以添加/删除的键,是否选择了正确的键,比较查询(SQL 为您提供了很多方法来完成相同的事情)
- 你调整过查询缓存了吗?对于某些工作负载,查询缓存(默认开启)可能会导致相当大的速度下降。
- 你的盒子有多少内存,mysql 是否调整为利用它?
- 您是否使用面向数据库的文件系统和 raid 设置?
- 有时需要一些反规范化。
- 不同的数据库产品会有不同的特点,MySQL 可能对一些世界来说快得惊人,而对另一些则慢一些。
关于mysql - 大数据量数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2611617/