我正在尝试使用谷歌云数据存储来存储METAR观测(机场天气观测),但我正在经历我认为指数爆炸的情况。我的索引
station_id
(4个字符的字符串)比实际数据本身大20倍。数据库每天将增加大约25万个实体,因此索引大小将成为一个问题。
- observation_time (Date / Time) - indexed
- raw_text (String) (which is ~200 characters) - unindexed
- station_id (String) (which is always 4 characters) - indexed
综合指数:
- station_id (ASC), observation_time (ASC)
查询
我唯一会问的问题
曾经
运行是:
query.add_filter('station_id', '=', station_icao)
query.add_filter('observation_time', '>=', before)
query.add_filter('observation_time', '<=', after)
哪里
before
和
after
是datetime值
索引大小
name type count size index size
observation_time Date/Time 1,096,184 26.14MB 313.62MB
station_id String 1,096,184 16.73MB 294.8MB
数据存储报告:
Resource Count Size
Entities 1,096,184 244.62MB
Built-in-indexes 5,488,986 740.63MB
Composite indexes 1,096,184 137.99MB
帮助
我想我的第一个问题是:我错过了什么?我想我正在做一些未优化的事情,但我不知道是什么。只要查找时间保持在~2s以下,查询时间就不是一个直接的问题。
我可以简单地删除内置索引吗?组合会继续工作吗?
我读过谷歌和StackOverflow的文章,但似乎无法理解这一点。我之所以不尝试删除所有内置索引,是因为在下载/取消索引/放置所有数据之后,我需要花费相当长的时间来更新仪表板摘要,也就是说,我需要几天时间才能得到结果。