我们需要将天气预报数据存储在数据库中,这样就可以从API中按经纬度查询天气预报数据。
预测数据本身就是一个GRIB2文件,它是一种具有多个波段的地理参考栅格格式。GRIB2文件可以转换为csv,这会导致文件大小增加20-40倍。如果将csv存储在数据库中,则数据大约为35 If,并包含以下列:
0,rt,timestamp
1,vt,timestamp
2,param,string
3,level,string
4,lon,float
5,lat,float
6,value,float这些数据每小时都会发生变化,需要重新输入数据库。这意味着,在任何情况下,摄入食物的时间都不能超过一个小时(最好是短得多)。
除此之外,30天前的预测数据必须存储在另一个数据库表(或多个表)中,并且还可以通过API进行查询。30天-价值720小时的预测数据,摄入量为720 *35 TB = 25.2 TB。每小时都必须删除721小时,并将数据从最新的预测表传输到归档表。
我研究过多种管理的谷歌数据库解决方案(BigQuery、Cloud、Datastore、BigTable)。到目前为止,BigTable定价结构似乎最适合这个API的目的。
但是,我似乎不能按列值查询数据,更不用说用两个列值(纬度和经度)查询数据了。是这种情况吗?是否有任何方法来构造数据以克服这一限制?如果是这样,我将如何查询?
如果BigTable是该工作的错误工具,我希望能推荐一种更合适的服务。
发布于 2020-01-06 09:31:28
您想要做的事情是可能的,但是,您必须记住两个主要的BigTable密钥行设计的限制
根据您的查询,您将有一个DB设计或另一个,您将不得不在设计和查询之间找到一个折衷方案。
在这种情况下,您必须将(纬度、经度)映射到单个键,主要可以这样做:
一个包含30天数据的表示例,其中包含一个惟一的列stats (来自Cloud ):
cbt createinstance my-instance "My instance" my-instance-c1 europe-west1-b 3 SSD
cbt createtable weather-ts "families=stats:maxage=30d||maxversions=31"将值设置为CSV(所有字符串)到键123123:
cbt set weather-ts 123123 stats:value='FIRST_CSV'
cbt set weather-ts 123123 stats:value='SECOND_CSV'请参阅所存储的值:
cbt read weather-ts我的产出:
2020/01/06 10:29:37 -creds flag unset, will use gcloud credential
----------------------------------------
123123
stats:value @ 2020/01/06-10:29:35.093000
"SECOND_CSV"
stats:value @ 2020/01/06-10:29:33.224000
"FIRST_CSV"
----------------------------------------Bigtable 自动压缩文本因此总的存储使用量可能比您预期的要少。
https://stackoverflow.com/questions/59585902
复制相似问题