-1

我已经回答了5,但正确的答案实际上是20。我只是不知道它是如何计算到20的!

怎么能准确计算呢?

在此处输入图像描述

这是“Hasso Plattner Institut”的一个例子

在此处输入图像描述

如果这个问题不适合 SO,请引导我到正确的 SE 站点。

4

1 回答 1

1

简化(HPI 在他们的示例中使用):

1KB = 1000B
1MB = 1000KB

要计算未压缩字典的大小,请使用每个字段大小的总和并乘以行数:

(49+49+1+1)*50 000 000 = ~5000 MB

现在计算每列的唯一值的数量可以表示为的最小位数并将其四舍五入:

Name:    CEILING(Log2(2000))   = 15
Surname: CEILING(Log2(100000)) = 17
Age:     CEILING(Log2(128))    = 7
Gender:  CEILING(Log2(2))      = 1

总属性向量的大小是个数,如下:

(15+17+7+1)*50 000 000/8 = ~250MB  "divide by 8 to convert from bit to byte

现在我们必须通过将唯一值的数量乘以字段的大小来计算数据存储中每一列的大小。

Name:    49 *  20 000 =   980 000
Surname: 49 * 100 000 = 4 900 000
Age:      1 *     128 =       128
Gender:   1 *       2 =         2
---------------------------------
Total:                  5 880 130  "~5MB

现在我们知道列存储的总大小约为 255MB,未压缩数据的大小约为 5000MB;剩下的只是一个简单的划分:

5000 / 255 = 19.6  "~20
于 2013-06-04T23:59:47.527 回答