正在根据最佳实践读取未发布的易失性层分区



我正在使用OLP易失性层作为实时仪表板的后端(平均更新节奏约为5秒(。数据按源 ID 进行分区,源 ID 集随时间变化很大。

我知道文档中建议publish易失性层分区;但是,与upload不同,publish是一项昂贵的操作,我相信它不是设计为每隔几秒钟执行一次。

因此,到目前为止,我一直在做的是在将数据写入图层时跳过publish

val writeEngine =
    DataEngine().writeEngine("hrn:of:my:catalog", new StableBlobIdGenerator(123L))
writeEngine.put(
  NewPartition(
    partition = "source-id-1",
    layer = "my-volatile-layer",
    data = someData
  )
)

并使用与先验相同的blobIdGenerator读取数据:

readEngine
  .getDataAsBytes(new ReferencePartition(
    version = 123L,
    partition = "source-id-1",
    layer = "my-volatile-layer",
    dataHandle = (new StableBlobIdGenerator(123L)).generateBlobId(NewPartition(
      partition = "source-id-1",
      layer = "my-volatile-layer",
      data = NewPartition.ByteArrayData(Array.emptyByteArray)
    ))
  ))

意识到我将易失性层视为内存中的键值存储,并且我理解这样我将无法在 OLP 控制台 UI 中看到我的数据;但以编程方式,数据仍然是上传和可读的。它是对Volatile的API的合法使用吗?

即使不发布元数据,使用易失性层作为键值存储也是有效的。只要知道数据句柄,就可以了。如果需要按时间戳或分区 ID 查询(如果数据句柄未知(,元数据非常有用。

如果您选择发布易失性图层的元数据,则最有效的方法是简单地初始化发布并在添加或删除分区时上传元数据,只需不提交发布作业进行完成即可。

最新更新