如何控制DolphinDB中流表的总行数?

问题描述 投票:0回答:1

我需要将记录插入到持久流表中,但我担心它会变得太大。

我的目标是将行数限制在特定行(例如 1000)。这不仅可以减少流表的内存使用量,还可以防止由于表持久化而导致过多的磁盘空间消耗。

以下配置在控制总行数方面似乎无效:

maxPubQueueDepthPerSite=1200
maxPersistenceQueueDepth=1300

任何人都可以帮助我达到想要的结果吗?

这是我的脚本startup.dos供参考:

clearTablePersistence(`h_bb);
h_bbt = streamTable(2000:0,`sj`id`v,[TIMESTAMP,int,bool])

//share h_bbt  as h_bb
enableTableShareAndPersistence(table=h_bbt,tableName=`h_bb,preCache=10,cacheSize=60,retentionMinutes=60)
if(existsDatabase("dfs://xq")){
  db=database("dfs://xq")
  h_bbp = loadTable(db, `h_bbp )
  subscribeTable(tableName="h_bb", actionName="h_bb", offset=-1, handler=append!{h_bbp}, msgAsTable=true ,batchSize=100,throttle=1,persistOffset=true)
}
else{
  db=database("dfs://xq", VALUE,  2022.01.01..2040.12.31)
  h_bbt1 = table(2000:0,`sj`id`v,[TIMESTAMP,int,bool])
  h_bbp = db.createPartitionedTable(h_bbt1, `h_bbp , `sj)
  subscribeTable(tableName="h_bb", actionName="h_bb", offset=-1, handler=append!{h_bbp}, msgAsTable=true ,batchSize=100,throttle=1,persistOffset=true)
}

由于持久化数据非常大,每次启动时加载时间较长。我必须先调用

clearTablePersistence
函数来删除这些数据。

streaming persistence dolphindb
1个回答
0
投票

enableTableShareAndPersistence
函数中配置三个参数:cacheSizeretentionMinutespreCache

cacheSize:设置流表保留在内存中的最大行数。如果为 0 或未指定(默认为 -1),则所有行都保留在内存中。如果您使用小于 100,000 的正整数,则会自动设置为 100,000。

retentionMinutes:定义上次更新后日志文件将保留多长时间(以分钟为单位)。过期的日志文件将被自动删除。默认值为 1440(即一天)。

preCache:指定从磁盘上的持久流表加载到内存中的记录数。如果不指定,所有记录都会加载到内存中,这会导致启动过程中加载时间较长。要解决此问题,请设置较小的值。

© www.soinside.com 2019 - 2024. All rights reserved.