云存储
云上的数据存储
数据库
随着nosql和newsql的发展,近十来年涌现了适配各个场景的数据库。
1.功能针对性高
2.可扩展性强
3.成本和性能平衡
4.新硬件的发展
长期来看,会存在多款产品。
云上数据的黏性
1.数据存储就会收费,公有云黏性强
2.各家都限制公网带宽,进行客户锁定
3.但是对于内网,且多个节点并发访问不同文件,速度无上限
数据计算,移动数据
1.优先select object
2.在云服务商的内网计算
3.分发到离客户近的点(CDN等)
无轮如何,都应在近的节点先进行数据的计算。
数据缓存
同上面的正好相反。 但是这里需要拿到有需要缓存,一级级向上移动。 再加上本机的硬盘,内存,等
分析型的数据
1.便宜,如果打算数据不删除,对象存储已经提供了近乎于成本的价格,还有冷存等
2.可靠谱性
3.对象存储已经事实成为标准
如果没有在线服务的需求,基本上对象存储已经成为正确且唯一的选择。
基于对象存储的数据分析
1.Iceberg, Delta Lake, Hudi 等新的支持upsert/delete操作
2.spark,hadoop等基于文件的数据分析已经验证了
3.新式的存储结构或者基于文件的存储,并没有完全基于对象存储的,只是把对象存储当面冷备份
这里是不是有可能性,完全基于对象存储的数据分析应该是一个有趣的选择。
对象存储性能
1.对于64M的数据,可以99分位,做到30ms返回。
2.对于对象存储,支持select,可以进一步做数据筛选
数据的一致性
1.基于log is database的,搞一个单独的消息队列存
2.本地先同步准备wal,再整理数据上传对象存储,写成功 (这里还是依赖于单机的节点)
无轮如何,如果不额外依赖于消息队列,如果对象存储写入的性能不够,都是要在本地缓存积累一定的量,才能写入成功。
如何让对象存储支持一致性
1.如果不是AP,且对象存储在磁盘上,支持一致性操作,就一定要引入一个额外的存储
2.如果是AP系统,可以探索写入时,数据直接放对象存储中
让一致性维护在meta和对象存储中
1.Meta存储保存着所有的数据对象列表
2.对象存储保存着所有数据
3.本地写入的数据直接上传对象存储来达到成功
4.多个节点写入,都以meta为准
事务
1.通过meta的事务可以保证多表的数据一致
2.单表通过文件的meta就可以保证数据一致
3.整个系统是以meta为中心设计
4.基于meta可以实现乐观锁和悲观锁
读取一个10G对象,并在1秒,计算完后返回
并发读取,每个计算节点恰好用满时间的带宽,来保证副本大小
通过多个节点并发的算力,来保证每个节点的计算时间严格控制
留足汇总计算的时间
新式的OLAP架构
duckdb,dafuison,palar等,基于arrow可以做到olap操作足够快
抛弃hadoop,spark的百台机器的软件栈
用户的数据也不要求一次计算在几百台机器上,可以时间区间切分,分批次计算
导致架构变简单,单机加载内存计算
faas 上分块计算
两种查询
海量的数据就只查一次 用select object ,无缓存设计
反复的数据查询 先筛选出只够小的数据集,且有多级分别缓存数据
反复的数据查询才是重点 如果只查一次,在对对象存储的优化变得无意义 随着查询次数,数据离用户越来越近
最终结论
Interactivity: 查询1~2秒返回,且无慢查询 Multiple Functions:同时支持很多个F来进行数据的读取和计算 Cloud: 云端数据计算尽量下推 Basic Partitions: 要支持数据分区 Advanced Partitions: 根据查询和业务推断出分区 Container: 需要有状态的计算节点,可能本地或者协调节点,需要一个中心结点做shuffle,和调度,要不然sql 就是支持不全的 meta: 就是集群
最后更新于