背景
本地数据库包含近13亿个唯一行。每行都与特定的纬度和经度(位置)间接相关。每行都有一个日期戳。
用例
问题如下:
- 用户设置开始/结束日期以及值的范围(例如100到105)。
- 系统将按位置分组与给定日期匹配的所有行。
- 系统执行确定在那些日期期间具有落入给定值范围的统计可能性的位置。
- 系统向用户显示所有匹配的位置。
这是速度和规模的问题。
题
您能想到哪一种最便宜的解决方案体系结构可使这种系统在五秒钟内为用户检索结果?
当前系统
当前环境是:
- PostgreSQL 8.4(可以升级;不能选择切换数据库)
- R和PL / R
- XFS文件
- WD VelociRaptor
- 8 GB RAM(Corsair G.Skill; 1.3 GHz)
- 四核原装Intel 7(2.8 GHz)
- Ubuntu 10.10
可以接受硬件升级。
更新-数据库结构
表中的数十亿行类似于:
id | taken | location_id | category | value1 | value2 | value3
- id-主键
- 采取-分配给行的日期
- location_id-参考纬度/经度
- 类别-数据描述
- value1 .. 3-用户可以查询的其他值
该taken
列通常location_id
是每个日期的连续日期,有时每个位置都有1800至2010年的数据(大约77,000个日期,许多重复,因为每个位置都具有相同的日期范围内的数据)。
有七个类别,并且这些表已经按类别划分(使用子表)。每个类别包含约1.9亿行。在不久的将来,每个类别的行数将超过10亿。
大约有20,000个地点和70,000个城市。这些位置通过纬度和经度与城市相关联。将每个位置分配给特定城市意味着找到城市的边界,这不是一件容易的事。
主意
我的一些想法包括:
- 查找托管数据库的云服务。
- 创建一个SSD RAID条带(出色的视频)。
- 创建一个表,按城市合并所有位置(预先计算)。
谢谢!