cloudnativecube / octopus

14 stars 2 forks source link

Rockset产品相关调研 #95

Closed godliness closed 3 years ago

godliness commented 3 years ago

https://rockset.com/

https://github.com/rockset

godliness commented 3 years ago

阅读文档 https://rockset.com/whitepapers/rockset-concepts-designs-and-architecture/ 后总结如下:

Data Model

  1. rockset可以作为二级索引依托在mongodb kafka等上
  2. 支持文档数据格式,但不同于传统文档,它可以对文档进行索引并且也可以通过sql进行查询该索引后的文档,文档格式也无需过多考虑schma的建设,同字段不同类型的文档也可以进行导入,而且支持各种形式的文档, 结构化的,半结构化的,嵌套的,对象的,总之rockset对数据导入的支持并不受schma过多的限制,很好的支持各种文档数据源
  3. 一个document中包含多个fields, 一个表中包含多个documents, 每个document都有自己的id, 而且这也都是可变的, 修改单个document的原子的,但是多个documents则不是,数据写入是异步的,1-5秒后会查询到写入的数据
  4. rockset是动态强类型的,在运行时阶段来确定数据的类型,数据的类型是作用在单个field的value上的,而不是整个columns,这样的好处是适合处理流动的数据集。

Cloud-Native Architecture

  1. 真正的计算存储分离,存储引擎采用内嵌RocksDB-cloud的方式实现,数据存储在s3,按查询请求的需要进行资源的扩缩容。
  2. RocksDB-Cloud是RocksDB的扩展,它支持水平扩容,新的EC2实例启动后会用zero-copy的方式仅加载索引,我理解每个RocksDB-Cloud实例加载的索引应该都是整个数据的索引,不然无法实现水平扩缩容。
  3. rockset采用ALT架构,主要分成三层,T 负责数据的接收与导入 L 负责对T接收的数据进行索引,写本地盘,完后存入S3 A 负责对索引后的数据进行查询, 这三层均可以根据load进行按需水平扩缩容
  4. rockset也会将data分成多个shard,提高并行度,每个shard包含多个replica提高数据高可用
  5. 更新无需copy on write,也无需进行merge就能实时更新,本身存储引擎基于RocksDB-Cloud默认就能支持该能力,基于key-value锁定有个field

Schemaless Ingestion

  1. rockset架构中会有apiserver的概念,主要负责就收注入请求,查询请求,而且可以用来进行统一鉴权,数据写入首先会写入 distributed log store 顺序写 作为中间数据,而后由leaf取走进行索引,这样写不影响读,rockset支持api和数据注入两种方式写入数据。
  2. 支持文档字段的transformation, 称为fieldmappings, 可以在数据写入的时候就能进行转换
  3. 支持大数据量的bulk load, 元数据存入log store减少其负载,真是数据存入s3, leaf 读取时索引的同时也会进行压缩

Converged Indexing

  1. 实时索引,索引可变,任何对document的field修改不会导致造成整个document的重新索引
  2. 天生支持时间序列数据库,本身数据有序,对有序数据进行last hour minutes等查询操作

Query Processing

  1. leaf是shard结构的,可以用来提高并行,parsing -> ast -> query plan(DAG) -> optimize(CBO) -> execution
  2. query plan 会产生一些Leaf fragments 和 Aggregator fragments, 并调度到相应的worker上进行执行,worker我理解就是shard,如果有某个shard挂了就会重新调度。
mdianjun commented 3 years ago

我的总结: rockset.md