分层.Net文件格式?

Posted

技术标签:

【中文标题】分层.Net文件格式?【英文标题】:hierarchical .Net file format? 【发布时间】:2010-11-12 16:17:44 【问题描述】:

我们公司一直在研究一种文件格式来保存大量实验室传感器数据。每次他们运行仪器时,它都会生成一个文件,我们使用该文件并将其存储在数据库中以进行趋势分析等。分层格式是首选,因为它允许我们“分组”数据。这是我们将数据放入数据库之前的中间文件格式。由于我们的开发环境,这是我们的优先级列表:

1) .Net 兼容。该 API 将用于 Web 服务和客户端应用程序。我们无法控制客户的环境,因此最好使用 pure.Net 解决方案。

2) 读取速度。我们的读取是随机的,而不是顺序的。越快越好。如果我们不是 C# 开发商店,我会说速度是第一。

3) 文件大小。如果文件本身很大,则需要良好的压缩率(86% 或更高)。

4) 读取的内存占用。由于数据量大,我们不能简单地读取它。每个传感器都有一个时间/值对。这可以生成超过 400 万对。这为我们消除了 XML。

我们目前查看了HDF5,发现该 API 在 .NET 领域非常缺乏,无法提供 Web 服务,但具有我们正在寻找的大小/速度。我还研究了JSON,它看起来很有希望,但我还没有尝试读回一段数据。我在网上搜索并没有找到很多满足我们需要的文件格式。任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

您需要一个 b-tree 数据库,例如: Sql Server 精简版

也看看 SQLite http://sqlite.phxsoftware.com/

CTree 更像是一个 ISAM,如果你可以省去 SQL 部分 谷歌搜索树

对不起,我会链接更多,所以不让我知道这是一个新帐户

【讨论】:

谢谢,我会尝试概念验证,看看它是如何工作的。它看起来很有希望。 从所有初始时间测试和演示中,它的读写速度与 HDF5 一样快,压缩效果也不如(减少 10%),但通过使用它,我已经能够获得较小的文件大小中的相同数据。谢谢推荐。【参考方案2】:

我认为您最好将此信息存储在数据库的表中,如果您使用的是 SQL Server,VARBINARY 应该可以完成这项工作。

您的表可以是分层的,方法是包含一个 [Parent] 字段,该字段对于***节点可以为空。

如果您索引查找值(文件的 ID),随机访问应该很快。如果您需要压缩,您可以尝试使用 GZip 类来格式化您的原始字节[],然后再将其粘贴到数据库中。

使用数据库获取此信息使您能够:

1) 运行疯狂的查询、连接等。 2)您可以索引多个列,以便通过不同的键值更快地查找 3) .Net 肯定有多个 API 4) 对速度影响不大的可以加压缩 5) 备份数据应该是小菜一碟

这个建议对你有帮助吗?

【讨论】:

我们确实将它存储在数据库中,但我们需要一些东西作为包含信息的中间体。我们不能只从传感器 -> 数据库。它进入传感器-> 文件-> 数据库。当我说我很想直接去 DB 时,请相信我。 您仍然可以让传感器写入临时文件并将其加载到 VARBINARY 列中。如果速度可以接受,我通常会尝试在各种情况下使用数据库——以后的维护工作更容易管理。【参考方案3】:

我认为特殊的阅读要求对于任何格式都是一个问题,在这种情况下,您需要实现自己的解析器。

【讨论】:

【参考方案4】:

如果二叉树/平衡树格式不太费力,您可以考虑将其存储在 Newick Format 中。它还可以支持JSON等键/值对格式。

然而,它实际上并不比 JSON 更轻量 - “” 被替换为 “()”。

((浣熊, 熊),((海狮,海豹),((猴子,猫), 黄鼠狼)),狗);

显然它是一棵二叉树,它的查询速度非常快,虽然可能也不比来自 JSON 对象的字典快,但它没有需要担心的链表样式层次结构(对象图)。

恐怕我找不到任何 .NET api,只有 Java 和 C。

【讨论】:

以上是关于分层.Net文件格式?的主要内容,如果未能解决你的问题,请参考以下文章

最新机动车行驶证模板PSD可编辑分层文件下载

用VB.NET和VC.NET编译出来的文件是IL格式还是纯PE(EXE)文件格式?

信息以文件形式存储,文件用啥分类分层存放

PSD是什么文件格式

xml文件的递归函数(分层数据)

.Net 组件将所有主要文件格式转换为 PDF [关闭]