我每天有大约10亿次事件。我需要将这些事件存储在过去30天的数据库中,因此大约有300亿行。存储时间序列数据的简单方法
假设它是运动员数据库,每排只有4列(运动员名字,运动员纪律,运动员等级,日期)。我只需要通过运动员姓名和日期来检索数据。例如,为特定运动员制作过去30天的图形。
起初我用谷歌大查询,这是伟大的工具,非常便宜,每天分片开箱和线性可扩展性,但具有一些缺点。查询30亿张桌子大概需要5秒,对我来说太多了。当插入数据时,它会出现在“数据流缓冲区”中,并且无法查询一段时间(大约5-10分钟)
另一种方法使用Postgres并将所有数据存储在具有适当索引的一个表中。此外,我可以使用每日分片(在一天开始时自动创建新表)但我担心Postgres是否可以处理数十亿行。另外,如果我想获取最近30天的历史数据,那么在以这种方式对数据进行分片时,必须进行30次SELECT查询。
我不想打扰像Cassandra这样的过于复杂的解决方案(尽管从来没有尝试过)。另外我不认为我会从使用面向列的数据库中获得任何好处,因为我只有4列。
寻找类似于Big Query的东西,但没有提到缺点。我认为数据可以存储在一个节点中。
您不需要30次选择查询最近30天。如果查询总是30天,那么无论如何您都不需要进行分区。在这种情况下唯一的优点是可以用一个简单的“drop table”丢弃前一天。我不确定你了解Postgresql的分区。 –
最好的解决方案取决于完整的情况和确切的要求。每日分区*可能会有用。 –
@ClodoaldoNeto我的意思是30个选择查询,当我没有分区手动创建表。我需要查询1到30天的范围。 – user12384512