2017-02-18 42 views
0

如果使用postgresql,则可能知道它将各种统计信息存储在内部视图中。我想获得一些时间间隔的统计信息并将其存储到二进制文件中。我通过以下方式看到它:将具有不同大小的结构写入二进制文件并读取它

  1. 从libpq读取PQexec()的统计数据。
  2. 使用关于结果中行数和列数的信息,分配一个3d指针数组。
  3. 看跌结果的三维阵列(这已经是结构的一部分)
  4. 三维阵列为二进制文件
  5. 转到步骤1,重复

接着写结构,它可以读取这个二进制文件,将结构读入到类似的3d数组中,然后对值,视图等进行排序。

一切都看起来不错,直到行数不变为止,但在postgresql中有行数永久更改的视图。因此,书写结构的大小将总是不同,我不知道如何从文件中正确读取这些结构(因为我需要知道结构的大小)。

你能否告诉我或者提出一个更好的方法来做到这一点?

+0

这听起来像你只需要在实际数据之前在文件中写入一些元数据作为头文件。那么你将没有问题编码的元素大小。 –

+0

是的,我想过标题,有一个让我困惑的时刻 - 标题在文件中有**固定大小,因此我们可以在文件中放入数量有限的快照。 也许最好是为每个统计信息捕捉用户专用标题。首先读取行标题(大小所在的位置),然后读取日期。 – lesovsky

回答

1

基本上你需要采用一种文件格式。最基本的格式就是先写大小然后写数据。然后读者将读取大小,分配内存然后读取数据。

0

您将需要TLV - Type, Length, Value - 编码的变体。您可以存储(固定大小)有关下一个可变长度数据的信息。阅读时,阅读固定大小的信息并使用它来分配正确的空间来阅读随后的数据。