我最近在OEIS(Integer序列的在线百科全书)最近,试图查找我所拥有的特定序列。

现在,这个数据库相当大。该网站表示,如果2006年(!5岁)版本被打印,它将占据750卷文本。

我确定这是同样的问题,谷歌也必须处理。但是,它们还有一个分布式系统,它们利用负载平衡。

忽略负载平衡但是与数据库大小相比,对查询进行多少时间?

或换句话说,关于DB大小的查询的时间复杂程度是多少?

编辑:要使事物更具体,假设输入查询只需查找一串数字,例如:

1, 4, 9, 16, 25, 36, 49
.

有帮助吗?

解决方案

强烈取决于查询,数据库的结构,争用等。但是,大多数大多数数据库都会找到一种方法来使用索引,并且该索引将是某种树结构(请参阅 http://en.wikipedia.org/wiki/b-tree 一个选项)在这种情况下,访问时间与日志(n)成比例,或者哈希在哪个案例访问时间与O(1)平均成比例(参见 http://en.wikipedia.org/wiki/hash_function #hash_tables 用于解释它们如何工作)。 因此,答案通常是O(1)或O(log(n)),具体取决于使用哪种类型的数据结构。

这可能会导致您想知道为什么我们并不总是使用哈希函数。有多种原因。哈希函数使其难以检索值范围。如果哈希函数未能分发数据,则可以访问时间成为O(n)。哈希需要偶尔调整大小,这可能非常昂贵。并且日志(n)缓慢地增长,足以使您可以在所有实际数据集中合理地接近恒定。 (从1000到1个Petabyte,它变化为5倍。)经常主动请求的数据显示某种局部性,树木做得更好地保持RAM。因此,树木在实践中有些常见。 (尽管哈希绝不是罕见的。)

其他提示

取决于许多因素,包括数据库引擎实现,索引策略,查询的细节,可用硬件,数据库配置等

没有办法回答这样的一般问题。

具有Tberabytes的正确设计和实现的数据库可能实际上可以胜过一个非常设计的少数数据库(无索引的术语,并且使用诸如相关的非SARGABLE查询和相关的子查询的诸如相关的子查询之类的少数数据库。这就是为什么有人希望拥有大量数据需要雇用DataBe设计专家的大型数据库,以便在数据库大时不稍后完成intial设计。您还可能需要投资您需要处理大小的设备类型。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top