如何在数据库中存储诸如数据之类的大货币

时间:2019-04-11 20:56:48

标签: sql postgresql database-design

我的数据在很多方面都与货币类似,因此我将使用它进行演示。

我有10-15个不同的数据组,我们可以说美元或欧元之类的不同货币。

他们需要具有以下列:

timestamp INT PRIMARY KEY
value INT

其中每个行将超过10亿行,随着时间的流逝,我将追加新行。

我将仅按一定间隔选择它们并创建图形。同一张图中可能有多种货币。

问题是我应该添加一个组列并将所有列存储在一个表中还是将其单独保留。如果它们在同一列中,时间戳将不再是唯一的,可能我应该使用高级SQL技术来使其高效。

1 个答案:

答案 0 :(得分:0)

10-15种“货币”?每行10亿行 ?考虑在Postgres 11或更高版本中使用list partitioning。这样,时间戳列在每个分区中保持唯一。 (尽管我不确定为什么这是必要的。)

或者仅具有10-15个单独的表,而不必每行多余地存储“货币”。这么多行的大小很重要。

或者,如果通常同一时间戳记有多个值(每个“货币”一个),则可以使用具有10-15个专用“货币”列的单个表。总体上要小得多,因为它可以节省每个“货币”的元组开销(每行28个字节或更多)。参见:

针对多个“货币”的单行实用性取决于详细规格。例如:对于单个值的许多更新可能效果不佳。

您添加了:

  

我阅读了聚集索引,这些索引按磁盘中的物理顺序对数据进行排序。我不会在表格中间插入新行

对于BRIN indexes来说,这似乎是一个完美的用例,它比B树的亲戚小得多。通常会慢一些,但设置可能更快。相关: