2

我使用 OLP Volatile 层作为实时仪表板的后端(平均更新节奏约为 5 秒)。数据按源 ID 划分,源 ID 集随时间变化很大。

我了解文档中建议将其用于publish您的 volatile 层分区;但是,与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)
    ))
  ))

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

4

1 回答 1

0

即使没有发布元数据,使用 volatile 层作为键值存储也是有效的。只要知道数据句柄,就可以了。如果您需要按时间戳或分区 id 查询(如果数据句柄未知),元数据很有用。

如果您确实选择为 volatile 层发布元数据,那么在添加或删除分区时简单地初始化发布并上传元数据是最有效的,只需不要提交发布作业以完成最终确定。

于 2019-05-08T20:46:24.523 回答