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