什么是“一个大数据库”?

好吧,我知道的愚蠢的问题,但我看到模糊的评论“一个大型的数据库”以及中小型,我不知道这是什么意思。 有人可以定义一个小型,中型和大型数据库是为我们的SQL新手?

小型数据库变成中型或中型数据库变大的时候没有门槛。 一般来说,当我听到这些条款时,我想就存储的全部logging而言,会有特定的数量级。

  • 小:10 或更less的logging。
  • 中:10 5至10 7logging。
  • 大:10 7到10 9个logging。
  • 非常大:10 9个或更多的logging。

正如dorfierbuild议的那样,你也可以根据每种数据库的属性来考虑它。 这样分类,我会说:

  • 小:性能不是问题。 您的查询运行良好,没有任何特别的优化。 使用前端增强function(如索引)时,您只会看到性能差异。

  • 中:您的数据库可能有一名或多名分配给其维护和保养的人员。 这些人关注数据库的健康; 他们主要的行政责任是防止不可接受的性能问题,并最大限度地减less停机时间。

  • Large(大):可能有专门的工作人员,他们的工作是处理数据库并提高性能,并确保应用程序更改不会导致数据库生命周期中的架构中断。 有关数据库的健康和状态的度量标准是密切关注的。 需要重要的专业知识来理解和执行优化。

  • 非常大:数据库存储大量必须容易访问的信息。 性能优化是绝对需要的每一个查询扭动每一个最后盎司的速度,没有它,数据库将不太可用,甚至不可能使用。 数据库可能使用复杂或创新的复制或集群技术,推动当前技术的界限。

请注意,这些都是完全主观的,有人可能会有一个完全合法的“大”的替代定义。

一个方法来确定是通过观察你的testing查询。

小型数据库就是索引无关紧要的数据库。

如果没有合适的索引,中等数据库就是查询时间超过一秒的数据库。

一个大型数据库就是查询通常需要花费数小时才能优化的数据库,使用查询devise,索引修改和许多testing周期的组合。

最好的答案,传言:大型数据库是迫使你不得不停止使用关系数据库的。

换句话说,一个规范化的关系数据库,由于大量的JOIN,世界上所有的索引都无法帮助你满足你的响应时间要求。

如果你不得不放弃关系数据库来寻找别的东西,那么你可能是一个糟糕的数据库开发者,没有专业的DBA,或者拥有一个非常大的数据库。

“大型数据库”确实是一个模糊的概念。 在这个问题的答案中已经有了非常不同的答案和意见。 一些定义“小”,“中”和“大”数据库的方法可能比其他方法更有意义,但是在某些时候,我认为每个定义都是正确的,真实的和有效的。

一些定义比其他定义更有意义,因为它们专注于数据库的devise,编程,使用,维护和pipe理的重要性的不同方面,而这些不同的方面对于可用的数据库来说真正重要。 恰恰是所有这些方面都受到“数据库规模”的模糊概念的影响。

那么,这是否意味着如果你能够定义一个特定的数据库是否大,这并不重要?

当然不是。 这意味着您将在评估数据库的不同devise/操作/pipe理方面时应用不同的概念。 这也意味着每一次这个概念都是模糊的。

例如:数据库索引策略(数据库devise的一个方面)受到每个表(“大小”度量)的logging计数,logging大小乘以logging计数(另一个度量“大小”)以及Query Vs 。 创build/更新/删除操作比率(数据库使用的一个方面)。

如果索引用于具有大量logging的表,则查询响应时间会更好。 根据你的WHERE,ORDER BY和record-aggregation子句的性质,你可能需要一些表的索引。

创build,更新和删除操作受影响表中的索引数量增加的负面影响。 受影响的表的更多索引意味着RDBMS必须执行更多的更改,花费更多的时间和更多的资源来应用这些更改。

另外,如果您的RDBMS花费更多的时间来应用这些更改,那么锁的维护时间也会更长,同时影响其他查询发送到系统的响应时间。

那么,你如何平衡你的指标的数量和devise? 你怎么知道你是否需要一个额外的索引,如果通过添加索引,你将不会对查询响应时间造成很大的负面影响? 答:根据您的负载/性能要求,针对目标负载testing和分析数据库,并分析性能分析数据以发现是否需要进一步优化/重新devise/索引。

不同的查询对比需要不同的索引策略。 创build/更新/删除操作比率。 如果您的数据库处于大量查询的情况下,但很less进行更新,那么如果添加可改进查询响应时间的每个索引,则整个应用程序的性能将会更好。 另一方面,如果您的数据库不断更新,但没有大的查询操作,那么如果使用较less的索引,则性能会更好。

当然还有其他方面:数据库模式devise,存储策略,networkingdevise,备份策略,存储过程/触发器等等。 编程,应用程序编程(针对数据库)等等。所有这些方面受“大小”(logging大小,logging数量,索引大小,索引数量,模式devise,存储大小等)的不同概念的影响是不同的。

我希望有更多的时间,因为这个话题是迷人的。 我希望这个小小的贡献成为你在这个迷人的SQL世界中的起点。

您必须考虑这个定义的硬件升级:

  1. 小型数据库:工作集适合单个商品服务器的物理内存(现在大约16GB)

  2. 中型数据库:适用于单台机器上的单个或多个(通过RAID)商品硬盘驱动器(最多可达几TB)

  3. 大型数据库:数据需要分布在多个商品服务器上,以适应(现在多达几个PB)。

根据维基百科关于超大型数据库的文章

一个非常大的数据库(VLDB)是一个数据库,其中包含极多数量的元组(数据库行),或占用非常大的物理文件系统存储空间。 VLDB最常见的定义是数据库占用超过1TB或者包含几十亿行,但是这个定义自然会随着时间而改变。

我认为像维基百科,或美国人口普查数据是一个“大”的数据库。 我的个人地址列表或待办事项是一个小型数据库。 中等大小的数据库介于两者之间。

您可以尝试根据您需要的服务器数量来定义大小。 一个小型的数据库是你在桌面上运行的一个应用程序的一个组件,一个中等大小的数据库将是一个单独的mysql服务器,而一个大型的数据库将需要多个服务器来支持某种复制/故障转移。

如果你有一个足够大的数据库,你不能“备份”到一个开发或testing框,你可能有一个“大型数据库”。