我需要将记录插入到持久流表中,但我担心它会变得太大。
我的目标是将行数限制在特定行(例如 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
函数来删除这些数据。
在
enableTableShareAndPersistence
函数中配置三个参数:cacheSize、retentionMinutes 和 preCache。
cacheSize:设置流表保留在内存中的最大行数。如果为 0 或未指定(默认为 -1),则所有行都保留在内存中。如果您使用小于 100,000 的正整数,则会自动设置为 100,000。
retentionMinutes:定义上次更新后日志文件将保留多长时间(以分钟为单位)。过期的日志文件将被自动删除。默认值为 1440(即一天)。
preCache:指定从磁盘上的持久流表加载到内存中的记录数。如果不指定,所有记录都会加载到内存中,这会导致启动过程中加载时间较长。要解决此问题,请设置较小的值。