我的数据结构如下:
date: <timestamp>
filter_a: <integer> -> range [0, 1000]
filter_b: <integer> -> range [0, 1000]
filter_c: <integer> -> range [0, 86400]
filter_d: <integer> -> range [0, 6]
group: <string>
second_group: <integer>
variable_a: <float>
variable_b: <float>
variable_c: <float>
a couple more no very important
我需要执行以下查询:
第一:
- 通过筛选数据
date,filter_a,filter_b,filter_c和其他人
其次,用过滤后的数据:
- 计算所有记录
- 得到平均的
variable_a,variable_b并variable_c - 得到标准差的
variable_a,variable_b并variable_c - 拿到四分位数 的
variable_a,variable_b而variable_c - 按
group或second_group汇总数据(计数,平均,标准,..)
该系统的用户数量约为10或15,但是项目数量非常庞大,目前为70M,但在几周内将达到500M,大约一年后将达到1000M。
查询的数量很小,并发用户不超过10个,我的问题是如何使用大量数据处理这些查询。
到目前为止,我尝试了什么?
我从开始就开始
mongodb,开始时很快,但是在计算10M +的四分位数时却变慢了。当我添加索引时,它有所改善,但是当我不得不查询所有数据时,它并没有太大帮助。我开始使用mongodb是因为数据非常动态,但是幸运的是数据格式“不会再改变了”。正如
filter_a并且filter_b可以像节点一样,我尝试过neo4j。我非常喜欢neo4j,但是我的图形有很多边,因此查询不是很快。最后,由于数据格式不会改变,并且它只是一个集合/表,因此不需要在SQL中联接,因此我检查了postgresql。使用postgresql进行测试的速度更快,但我担心将来无法正确扩展。
我需要什么?
- 在这种情况下,PostgreSQL是一个不错的选择吗?
- 我可以使用另一种数据库吗?哪种情况最适合这种情况?
- 我还能做些什么来改善它?
编辑
- 每天大约插入1M个元素,并且此后“不应更改”。
- 写入速度并不重要
- 硬性要求是快速读取/汇总
谢谢!