Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在c+中记录动态数据+;_C++_Logging_Sequence - Fatal编程技术网

C++ 在c+中记录动态数据+;

C++ 在c+中记录动态数据+;,c++,logging,sequence,C++,Logging,Sequence,我的程序中有几个动态队列,可以在处理过程中在后面或中间添加元素/从前面删除元素,并且在处理完成后从不将元素存储在内存中。但是,为了内省的目的,我想记录/序列化序列的动态状态,包括所有删除的元素 e、 g 是否可以将多个不同的位置写入单个文件,以便每个序列跟踪其自己的位置,并写入该位置,以便最终结果是简单的连续序列描述?(我所能想到的就是类似于文件支持的SGI rope实现的东西) 在这种情况下,最终结果可能是 { "v1" : ["elem1_v1","elem3_v1",

我的程序中有几个动态队列,可以在处理过程中在后面或中间添加元素/从前面删除元素,并且在处理完成后从不将元素存储在内存中。但是,为了内省的目的,我想记录/序列化序列的动态状态,包括所有删除的元素

e、 g

  • 是否可以将多个不同的位置写入单个文件,以便每个序列跟踪其自己的位置,并写入该位置,以便最终结果是简单的连续序列描述?(我所能想到的就是类似于文件支持的SGI rope实现的东西)
在这种情况下,最终结果可能是

   { 
     "v1" : ["elem1_v1","elem3_v1","elem2_v1"],
     "v2" : ["elem1_v2","elem2_v2"]
   }

当然,以一种粗略的方式,我可以将所有元素记录在一个平面文件中,在前面加上一些信息,比如哪个序列&在哪里,然后在整个文件中搜索它们以重新构建它们。但是,如果可以处理此类问题,我正在寻找一种更健壮、更结构化的替代方案。

您最好的选择是顺序日志记录(带有标识符)以及以后的重建

随机访问日志记录的问题有两个方面:

  • 在大多数磁盘上,随机写入比顺序写入慢得多
  • 你应该保留多少空间?筋疲力尽时你会怎么做
大多数情况下,日志记录不是应用程序的主要目标;这是为了调查而加上去的。因为它不是必需的,所以它应该是非三色的:

  • 不起作用?好吧,没有理由申请失败
  • 慢得要命?没有理由让应用程序慢下来

让一个离线流程来完成繁重的工作,并协调数据。

那么,您是否建议像我问题中的第一个备选方案那样,使用容器和位置编写数据标记,并对其进行后期处理,以获得一些好的JSON/XML格式?是否有任何标准协议支持这种部分序列化(比如boost序列化)?我的意图与序列化C++命名空间的一些相似之处,可以重新打开,可以写入更多成员。@ abb: 1)是的,没错。2) 不,如果您的数据足够简单,那么纯文本(正确的结构)就足够了;否则,您将需要转向序列化。我建议使用协议缓冲区来支持多种语言(使编写工具更容易),并且只需在日志文件中一个接一个地连接消息(您可以在编写时根据消息的长度为它们添加前缀)。谢谢。听起来很合理。我甚至想使用sqlite数据库作为日志文件,这样我就可以在序列中追加/插入更多的项&并将它们记录为表行!由于日志由一个布尔检查保护,我希望它在关闭时不会招致任何性能损失,但是当它打开时,我需要获得一些度量。
   { 
     "v1" : [],
     "v2" : [],
     append("v1"):
     [
        "elem1_v1", "elem2_v1"
     ],
     append("v2"):
     [
        "elem1_v2", "elem2_v2"
     ],
     insert("v1",1):
     [
        "elem3_v1"
     ]
   }
   { 
     "v1" : ["elem1_v1","elem3_v1","elem2_v1"],
     "v2" : ["elem1_v2","elem2_v2"]
   }