我们的系统目前正在将tplog备份到S3。根据我的阅读,如果在白天存在RDB问题,只需确保这些文件位于kdb期望的位置就可以进行恢复。
但是,我没有看到如何使用tplog来恢复HDB的解释。我试图创建另一个备份系统来同步hdb文件夹到S3。这将是更多的工作,设置和使用至少两倍的存储,以及冗余。因此,如果没有必要,那么我想避免这一额外的步骤。
如果我们无法访问我们的HDB文件夹,是否有办法从tplogs恢复HDB,或者我是否需要为HDB文件夹添加另一个备份系统?感谢。
答案 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