我在KDB的内存中存储了大量的表。我希望创建这些表的HDB,这样我就可以释放内存空间。我对创建HDB的过程有点困惑 - 展示桌子等等。有人可以帮助我创建HDB的过程,然后需要做些什么才能继续前进 - 即上传我已经结束的任何新数据一天。
感谢。
答案 0 :(得分:3)
根据场景,有很多方法可以创建HDB。一般做法是:
对于小型表,只需使用
将它们写为平面/序列化文件`:/path/to/dbroot/flat set inMemTable;
或
`:/path/to/dbroot/flat upsert inMemTable;
后者将在前者覆盖时添加新行。但是,由于你试图释放内存,所以使用flat / serialized并不是那么有用,因为平面/序列化文件无论如何都会被完全拉入内存。
对于每天不会增长太多的较大表(百万分之一),您可以使用set与.Q.en一起展开它们(当表未保存为平面/序列化时,需要枚举):
`:/path/to/dbroot/splay/ set .Q.en[`:/path/to/dbroot] inMemTable;
或
`:/path/to/dbroot/splay/ upsert .Q.en[`:/path/to/dbroot] inMemTable;
再次取决于您是要覆盖还是添加新行。
对于每天增长且具有自然日期分隔的表,您将写为日期分区表。虽然您也可以将set和.Q.en用于日期分区表(因为它们与splayed表相同,只是分成物理日期目录),更简单的方法可能是使用.Q.dpft或dsave如果您使用的是最新版本的kdb。这些将为你做很多工作。
由您来维护表格,确保定期(通常是每天)保存,并在必要时附加到表格等等。