enableTableShareAndPersistence

语法

enableTableShareAndPersistence(table, tableName, [asynWrite=true], [compress=true], [cacheSize=-1], [retentionMinutes=1440], [flushMode=0], [preCache])

参数

table 是一个空的流数据表。

tableName 是一个字符串,表示table共享后的名称。

asynWrite 是一个布尔值。它是可选参数,表示表是否以异步模式保存。默认值为true。

compress 是一个布尔值。它是可选参数,表示是否以压缩模式模式保存至硬盘。默认值为true。

cacheSize 是长整型数据类型(long)的整数。它是一个可选参数,表示流数据表在内存中最多保留多少行。如果它为0或者没有指定,所有记录行都会保存在内存中。默认值为-1。如果 cacheSize 是小于100,000的正整数,它会被自动调整为100,000.

retentionMinutes 是一个整数,表示log文件的保留时间(从文件的最后修改时间开始计算),单位是分钟。默认值是1440,即一天。

flushMode 是一个整数,取值只能为0或1。默认值是0,表示流数据首先写入操作系统缓存,不立刻写入到磁盘上。如果 flushMode=1,流数据会立刻写入到磁盘上。

preCache 是一个整数,表示从硬盘加载到内存的记录条数。如果没有指定该参数,默认会把所有记录加载到内存中。

详情

该命令把流数据表共享,并把它持久化到硬盘上。

为了保证该命令能够正常执行,需要指定配置参数 persistenceDir。流数据表在磁盘上的存储目录是<PERSISTENCE_DIR>/<TABLE_NAME>。目录包含两种类型的文件:数据文件(名称类型 data0.log, data1.log… )和索引文件 index.log。把这些数据保存到硬盘后,如果重启系统,再次执行该命令会把硬盘中的数据加载到内存中,加载的记录条数由参数 preCache 指定,但是实际加载的记录条数有可能会超过 preCache

参数 asyn 会告知系统是否以异步模式保存表。在异步模式中,追加的数据会被放进队列,之后用于保存的工作线程把数据写入硬盘。在同步模式中,表的追加数据操作直到追加数据被保存到硬盘中才完成。该参数的默认值是true,即为异步模式。通常情况下,异步模式实现更高的吞吐量,但是如果服务器崩溃,可能会丢失最后追加的行。在异步模式中,保存表的工作是由单个工作线程完成,并且一个工作线程可能处理多个表。如果只保存一个表,增加工作线程的数量并不会提升性能。

默认情况下,流计算的表把所有数据保存在内存中。如果流数据表太大,系统可能会出现内存不足的情况。为了避免内存不足的问题,可以设置一个界限。如果流数据表的行数达到这个界限,前面一半的记录行会从内存中清理。

注:

  • 如果手动重启server,建议先把缓存区的数据写入磁盘再kill进程。

  • 如果设置flushMode=0,则server发生crash时可能会丢失一部分数据。

例子

$ colName=["time","x"]
$ colType=["timestamp","int"]
$ t = streamTable(100:0, colName, colType);
$ enableTableShareAndPersistence(table=t, tableName=`st, cacheSize=1200000)
$ go;
for(s in 0:200){
    n=10000
    time=2019.01.01T00:00:00.000+s*n+1..n
    x=rand(10.0, n)
    insert into st values(time, x)
}
$ getPersistenceMeta(st);

sizeInMemory->800000
asynWrite->true
totalSize->2000000
compress->true
memoryOffset->1200000
retentionMinutes->1440
sizeOnDisk->2000000
persistenceDir->/home/llin/hzy/server1/pst/st
hashValue->0
diskOffset->0

相关命令:disableTablePersistence, clearTablePersistence, getPersistenceMeta