对于使用大型数据库,我需要了解什么?
-
02-10-2019 - |
题
我想知道哪些特定问题/解决方案/建议/最佳实践[不要惩罚我这个词]在使用庞大的数据库时会出现。
在巨大的I中暗示了数据库,这些数据库具有数百万行和/或数据库的表格,并带有数据库。
面向平台的答案也将很棒。
解决方案
一些想法
了解特定数据库引擎的详细信息,如何工作
如何优化查询(提示,执行计划)
如何调整数据库(不仅索引,而且是物理存储和表示形式,OS集成)。
查询“技巧”,例如临时表,以存储可以重复使用的临时结果,
如何评估对绩效改进的译本的必要性
如何为数据库使用分析工具来识别瓶颈。
其他提示
生产DBA的一些建议(我的经验是MS SQL,但这些建议应适用于其他平台):
维护变为一个 重要的 问题(夜间备份,DBCC,每周的Reindex/优化工作等)。非常容易开始超越合理的每晚或周末维护窗口。这不仅仅是一个 技术 问题,它也是一个 商业 问题(“您是什么意思,从最后一个好备份中恢复数据库需要4个小时?”)
开发人员需要了解他们可能需要以不同的方式工作。 “你的意思是我不能只是
DELETE (500m rows) FROM MassiveTable
并期望它可以工作吗?
我确定我会想到更多...
我的第一个建议是雇用一个知道自己在做什么而不依赖的人,否则您可能会遇到一些非常昂贵的错误。我的第二个是选择正确的平台硬件和软件。细节将在很大程度上取决于要求。
强烈建议您阅读有关SQL Antipatters的演讲http://www.slideshare.net/billkarwin/sql-antipatterns-strike-back
演讲将有所帮助(是的,这对我有很大帮助)找到了看似死锁的情况的解决方案。
如果RDBM的性能很大,尤其是在使用复杂的联接条件时,任何RDBM都会遭受差的性能。数据库模式也需要设计以扩展大量流量。大多数系统都非常擅长处理负载,但是当您拥有一个需要在多台机器上分发的数据库时,您也可以遇到问题。
许多新工具正在弹出以处理数据库可伸缩性。最有前途的之一是Memcached,它将大量数据存储在内存中,这允许多个数据库服务器之间的同步速度更快,并有助于同步。一些NOSQL解决方案,这些解决方案可以增强传统的SQL系统,这些系统具有不强制模式的架构。
NOSQL技术的一些示例是Cassandra,Couchdb,Google Bigtable,MongoDB。有些人发誓这些系统对于管理“即将到来的数据爆炸”将变得至关重要。
就设计和管理而言,数据库的两个方面比大小更重要。
首先是复杂性。有多少个用户表?这些表中有多少列?该表格中有数百个用户表的数据库和这些表中的一千多列非常复杂。一个具有六个表格的数据库也不是很复杂,即使它包含了数据库。
第二个是数据共享的范围。如果构建数据库是为了在单独的编程团队开发的六个或更多应用程序之间共享数据,则应与嵌入在单个应用程序中的数据库进行设计和管理。
大多数数据库问题与单个应用程序数据库有关。
除了已经提到的内容外,还有一些要学习的东西。
了解表分区和表分解之间的区别。有些人将桌子分解成多个桌子,所有列的列都可以更好地为它们提供更好的服务。
了解数据的图形模型与数据的关系模型之间的真正差异。有些人设计数据库,好像外国钥匙与指针基本相同。他们最终的系统是一个系统,该系统捕获了关系系统的所有缓慢以及图形系统的所有无法操纵性。
(注意:图模型通常称为Hierachical或网络模型)。
设计一个真实的关系数据库要比设计一个假装建模的数据库更为微妙,更有价值,但确实是图形的。