我的数据结构如下:
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个元素,并且此后“不应更改”。
- 写入速度并不重要
- 硬性要求是快速读取/汇总
谢谢!