基于不同的属性,例如速度,成本和易用性(作为开发人员)等,以下信息表示将内容存储在计算机中的不同方式。
Tape------->HDD------->SSD------->Memory
这意味着内存比SSD快于SSD,比HDD快于Tape,并且在成本和开发人员易用性方面也是如此。
存储及其局限性
现在,让我们在开发人员的上下文中讨论该方案。如果我们想在内存中存储一些东西,那么我们可以使用Set(当然可以使用其他内存数据结构,例如Arrays,List,Map等),如果我们想在SSD上存储一些数据,我们可以使用诸如关系数据库或弹性搜索之类的工具。同样,对于硬盘驱动器(HDD),我们可以使用Hadoop(HDFS)。
现在假设我们要使用确定性的内存中数据结构将数据存储在内存中,但是问题在于,服务器上的内存量以GB或TB表示小于SSD,并且SSD的内存可能小于硬盘(HDD),并且还应该记住,确定性数据结构是好的并且易于使用,但是就消耗内存而言,这些数据结构效率不高。
HDD<-------SSD<-------Memory //Storage per node
现在的问题是,我们如何在内存端做更多的事情,而消耗更少的内存呢?
HDD-------SSD-------Memory
^
|
How can we do more stuff here?
因此,这里是概率数据结构出现的地方,它可以完成与确定性数据结构几乎相同的工作,但所需的内存却少得多。
确定性与概率数据结构
作为一名IT专业人员,我们可能遇到过许多确定性数据结构,例如Array,List,Set,HashTable,HashSet等。这些内存数据结构是最典型的数据结构,在该数据结构上进行各种操作(如插入,查找和查找)。删除可以使用特定的键值执行。作为运算的结果,我们得到的是确定性(准确)的结果。但这不是概率数据结构的情况,此处的运算结果可能是概率的(可能无法给出确定的答案,总会带来近似结果),因此被称为概率数据结构。我们将在接下来的部分中看到并证明这一点。但是现在,让我们深入了解其定义,类型和用途。
它是如何工作的?
概率数据结构适用于大型数据集,我们要执行一些操作,例如在给定的数据集中查找某些唯一项,或者可能正在查找最频繁的项,或者是否存在某些项。为了进行这样的操作,概率数据结构使用越来越多的哈希函数来随机化并表示一组数据。
The more number of hash function the more accurate result.
要记住的事情
确定性数据结构还可以执行概率性数据结构执行的所有操作,但仅对低数据集有效。如前所述,如果数据集太大而无法容纳到内存中,那么确定性数据结构将失败并且根本不可行。同样在流传输应用程序中,需要一次性处理数据并执行增量更新的情况下,使用确定性数据结构进行管理非常困难。
用例
- 分析大数据集
- 统计分析
- 挖掘兆兆字节的数据集等
流行的概率数据结构
- 布隆过滤器
- 最小计数
- 超级日志