关于使用大型数据库,我需要了解什么?

时间:2010-09-14 18:06:08

标签: sql database database-design bigdata

我想知道在使用大型数据库时会出现哪些具体问题/解决方案/建议/最佳实践[不要惩罚我]。

在巨大的I暗示数据库中,数据库具有包含数百万行和/或数据库且具有数PB数据的表。

面向平台的答案也很棒。

6 个答案:

答案 0 :(得分:10)

一些想法

  • 了解特定数据库引擎的详细信息及其工作原理

  • 如何优化查询(提示,执行计划)

  • 如何调整数据库(不仅是索引,还有物理存储和表示,操作系统集成)。

  • 查询“技巧”,如临时表,以存储可重复使用的临时结果,

  • 如何评估非规范化对提高绩效的必要性

  • 如何使用数据库的分析工具来识别瓶颈。

答案 1 :(得分:8)

来自生产DBA的一些建议(我的经验是MS SQL,但这些应该适用于其他平台):

  • 维护成为重大问题(每晚备份,DBCC,每周重新索引/优化作业等)。很容易开始超过合理的夜间或周末维护窗口。这不仅仅是一个技术问题,它也是一个业务问题(“你的意思是,从最后一次良好的备份恢复数据库需要4个小时?“)

  • 开发人员需要了解他们可能需要以不同的方式工作。 “你的意思是我不能只DELETE (500m rows) FROM MassiveTable并期望它能够发挥作用?

我相信我会想到更多......

答案 2 :(得分:4)

我的第一个建议是雇用一个知道自己在做什么而不依赖于SO的人,否则你可能会遇到一些极其昂贵的错误。我的第二个选择是选择合适的平台硬件和软件。细节将在很大程度上取决于要求。

答案 3 :(得分:2)

强烈建议您阅读有关SQL Antipatterns的演示文稿 http://www.slideshare.net/billkarwin/sql-antipatterns-strike-back

该演示文稿将有助于(是的,它帮助了我很多)找到解决看似陷入僵局的情况。

答案 4 :(得分:0)

任何RDBMS如果变得非常大,都会遇到性能不佳的问题,尤其是在使用复杂的连接条件时。数据库模式也需要设计为可以扩展大量流量。大多数系统都非常擅长处理负载,但是当你有一个数据库需要分布在多台机器上时,你也会遇到问题。

许多新工具正在涌现以处理数据库可伸缩性。其中最有前途的是Memcached,它将大量数据存储在内存中,这样可以更快地访问并有助于多个数据库服务器之间的同步。一些NoSQL解决方案,它使用不强制执行架构的架构来增强传统SQL系统。

NoSQL技术的一些例子是Cassandra,CouchDB,Google BigTable,MongoDB。有些人发誓,这些系统将成为管理“即将到来的数据爆炸”的关键。

答案 5 :(得分:0)

就设计和管理而言,数据库有两个方面比大小更重要。

首先是复杂性。有多少个用户表?这些表中有多少列?模式中包含数百个用户表的数据库以及这些表中的一千多列非常复杂。具有六个表的数据库不是很复杂,即使它包含数PB的数据。

第二个是数据共享范围。如果构建数据库是为了在由不同的编程团队开发的六个或更多应用程序之间共享数据,那么您应该设计和管理它与嵌入单个应用程序中的数据库完全不同。

SO中提出的大多数数据库问题都与单个应用程序数据库有关。

除了已经提到的内容之外,还有以下几点需要学习。

了解表分区和表分解之间的区别。有些人将表分解为多个具有相同列的表,而分区可以更好地为它们服务。

了解数据图模型与数据关系模型之间的真正差异。有些人设计数据库就好像外键与指针基本相同。他们最终得到的是一个系统,可以捕捉关系系统的所有缓慢以及图形系统的所有无法管理。

(注意:图模型通常称为hiearachical或网络模型)。

设计一个真正的关系数据库比设计一个假装被建模关系但实际上是图形建模的数据库更加微妙,而且更有价值。