我们将数据导入到Redshift的节点上时,最好选择S3做为源。因为AWS在它上面做了很多工作,特别是并行加载,导入数据速度非常快。
但如果我们在S3的数据量非常大,比如上百个TB,则需要启动很多Compute Node
,带来巨大的花费。Redshift还有Spectrum层,它其实是一个自动伸缩的EC2集群,帮助把数据从S3加载并做中间查询计算:
不像Athena是schema on read
模式,Redshift是schema on write
模式
作用于数据源到数据汇聚存储之间,典型使用就是传统数据库。数据不管是在入库还是采用装载外部数据或者将一个查询的输出结果写入数据库或者是使用UPDATE语句,数据库存储对于在数据写入数据库时都需要对schema进行检查控制,对照模式进行检查,如果在加载时发现数据不符合模式,则被拒绝加载数据。
作用于数据汇聚存储到数据查询分析之间,数据先存储,然后在需要查询分析的时候再为数据设置schema,底层存储不会在数据加载时进行验证,而是在查询数据时进行。
schema on read
强调灵活自由,schema on write
注重稳定和效率;schema on read
与schema on write
不是二者取一,而是相辅相成,互相协助;从查询时间及扩展性上来看,NoSQL似乎是最佳选择,它既可以用partition来无限扩展容量,又能以近乎实时的查询时间来响应。但在大数据领域没有银弹,NoSQL牺牲的是查询语句的灵活性,以及业务一开始就要想好怎样查询NoSQL
相比之下,数仓虽然查询速度没有那么实时,但它在数据容量可扩展性及查询的灵活性上都不错