1

我想弄清楚是否可以使用 protobuf-net 来存储和检索以下序列化数据结构:

我每天有大约 200,000 个大小为 16 字节的对象(该对象包含一个 long 和两个浮点类型值,8 字节加上 2 * 4 字节),我喜欢将它们存储在二进制文件中。此类对象的检索将仅按一整天进行,例如,我想请求 2012 年 4 月 1 日至 2012 年 4 月 6 日之间的对象,这些对象应该从 4 月 1 日开始读取,然后是 4 月 2 日,... 4 月 6 日。一个要求是访问需要是随机的,这意味着,该文件可能包含从 2010 年到 2012 年 6 月的数据,但我可能只想检索 2012 年 4 月 1 日到 4 月 6 日之间的元素,而不必从一开始就读取所有元素。

我目前以 DateTimeTick 的顺序将数据存储为连续的字节数组,但不考虑新的一天何时开始或结束。如果我可以使用 protbuf-net 将数据作为 IEnumerable 的全天“blob”流式传输,那就太棒了。那可能吗?我正在考虑为使用 protobuf-net 序列化的每一天存储一个 IEnumerable 或 List,但不知道以后如何随机访问特定列表?有什么想法或建议吗?谢谢

4

1 回答 1

1

这不是 protobuf-net 的典型用例,虽然我怀疑这样使用它是可能的,但尝试这样做并不是我的本能。如果关键要求是按天拆分,那么使用多个文件将是一个明显的选择。或者,调整您现有的文件格式以包括(每天)日期戳和当天数据的大小 - 然后您可以使用FileStream'.Position属性在一整天内向前跳过。

protobuf-net确实具有流式处理和跳过 API,或者如果您不想涉及核心序列化程序,则可以使用原始的“阅读器”API,但是:我不确定这是否会对您有很大帮助。

坦率地说,由于(在您当前的过程中)每个块都是固定大小的,您还可以使用二进制搜索(也许使用线性插值作为凝视位置)来寻找正确的时间。

于 2012-06-08T06:15:28.110 回答