如何用tplogs恢复HDB?

时间:2016-02-27 04:21:38

标签: backup kdb

我们的系统目前正在将tplog备份到S3。根据我的阅读,如果在白天存在RDB问题,只需确保这些文件位于kdb期望的位置就可以进行恢复。

但是,我没有看到如何使用tplog来恢复HDB的解释。我试图创建另一个备份系统来同步hdb文件夹到S3。这将是更多的工作,设置和使用至少两倍的存储,以及冗余。因此,如果没有必要,那么我想避免这一额外的步骤。

如果我们无法访问我们的HDB文件夹,是否有办法从tplogs恢复HDB,或者我是否需要为HDB文件夹添加另一个备份系统?感谢。

2 个答案:

答案 0 :(得分:1)

将日志文件重播到HDB。

.Q.hdpf[`::;get `:tpLOgFile;.z.d;`sym]

根据我的经验,如果您使用get函数从TP日志文件加载tp日志文件构建HDB并使用高效的dpft保存它。

如果要使用-11!函数,则必须提供upd函数(-11!从tp日志文件读取每一行并调用upd函数然后将数据插入内存表中)以加载数据在内存中,然后将数据保存在磁盘上。

在这两种情况下,您都必须在内存中加载数据,但是使用get函数可以跳过upd函数调用

-11!函数可以有效地构建RDB,因为它不会加载完整的日志文件。

有关详细信息,请参阅下面的链接http://www.firstderivatives.com/downloads/q_for_Gods_July_2014.pdf

答案 1 :(得分:0)

好的,实际上找到了一个论坛对类似问题的回答,其中包含一个用于重放日志文件的脚本。

https://groups.google.com/forum/#!topic/personal-kdbplus/E9OkvJKGrLI

Jonny Press说:

通常的做法是使用-11!重播日志文件。基本脚本就像

// load schema
\l schema.q

// define upd
upd:insert

// replay log file 
-11!`:schema2015.07.09

// save
.Q.hdpf[`::;`:hdb;2015.07.09;`sym]

这会将完整的日志文件读入内存。所以你需要有RAM。

TorQ有一个TP日志重播脚本:

https://github.com/AquaQAnalytics/TorQ/blob/master/code/processes/tickerlogreplay.q