gpt4 book ai didi

sql - 在 SQL 中存储直方图的最有效(存储空间)方式

转载 作者:行者123 更新时间:2023-12-04 22:12:05 26 4
gpt4 key购买 nike

我需要在 SQL 中存储十亿个直方图。这些直方图具有相同的桶,但它们的计数可能有很大的差异,但是,大多数桶在很多时候都是 0。

我最初的尝试是让每个直方图有一行,其中每一列代表一个桶。

我对我的数据类型非常小心,但该表看起来仍然超出了为其分配的存储空间。

我想知道在我不得不请求更多硬件之前,是否有人找到了在 MS SQL 中存储值范围(其中 0 是最常见的情况)的有效解决方案。

提前致谢。

总计。

最佳答案

CREATE TABLE Histogram (
HistogramID BIGINT /* INT only goes to 2bn */ IDENTITY NOT NULL CONSTRAINT PK_Histogram PRIMARY KEY
-- Other metadata like the date and time or whatever
)

CREATE TABLE Bucket (
BucketID INT /* or smaller */ IDENTITY NOT NULL CONSTRAINT PK_Bucket PRIMARY KEY
-- Other metadata like the range it applies to
)

CREATE TABLE HistogramValue (
HistogramID BIGINT NOT NULL
,BucketID INT NOT NULL
,Counter BIGINT /* or smaller datatype */ NOT NULL
,CONSTRAINT PK_HistogramValue PRIMARY KEY (HistogramID, BucketID)
,CONSTRAINT FK_Histogram FOREIGN KEY REFERENCES Histogram(HistogramID)
,CONSTRAINT FK_Bucket FOREIGN KEY REFERENCES Bucket(BucketID)
)

HistogramValue 表将是稀疏的。您可以从 Bucket 表左联接到特定直方图的 HistogramValue 表以获得“整个”直方图:

SELECT b.Range
,COALESCE(hv.Counter, 0) AS Counter
FROM Bucket b
LEFT JOIN HistogramValue hv
ON hv.HistogramID = @HistogramID
AND hv.BucketID = b.BucketID

这是一个典型的归一化模型,相对容易维护、加载和导出。

关于sql - 在 SQL 中存储直方图的最有效(存储空间)方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15344680/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com