代码之家  ›  专栏  ›  技术社区  ›  mcauthorn

分层.NET文件格式?

  •  4
  • mcauthorn  · 技术社区  · 16 年前

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

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

    2)读取速度。我们的读取是随机的,不是连续的。越快越好。如果我们不是一个C开发商店,我会说速度是1。

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

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

    我们目前已经看到 HDF5 并且发现API在.NET领域非常缺乏,不能做Web服务,但是有我们正在寻找的大小/速度。我也调查过 JSON 看起来很有希望,但我还没有试着读回一段数据。我在网上搜索过,没有找到很多能满足我们需要的文件格式。感谢您的帮助。

    4 回复  |  直到 16 年前
        1
  •  1
  •   Doug    16 年前

    您需要一个B树数据库,例如: SQL Server Compact

    还可以看看sqlite http://sqlite.phxsoftware.com/

    ctree更像是一个isam,如果您可以免除SQL部分的话。 谷歌携程

    对不起,我会链接更多,所以不允许我,因为这是一个新的帐户

        2
  •  1
  •   jonathanpeppers    16 年前

    我认为最好将这些信息存储在数据库中的一个表中,如果您使用的是SQL Server,则varbinary应该完成这项工作。

    您的表可以是层次结构的,方法是包含一个[父级]字段,对于顶级节点可以为空。

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

    将数据库用于此信息使您能够:

    1)执行疯狂的查询、加入等。 2)您可以索引多个列,以便通过不同的键值更快地查找 3).NET当然有多个API 4)如果对速度影响不太大,可以增加压缩。 5)备份数据应该是小菜一碟

    这个建议对你有帮助吗?

        3
  •  0
  •   Tamás Szelei    16 年前

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

        4
  •  0
  •   Chris S    16 年前

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

    不过,它的重量并不比JSON轻,而是用“()”代替了“”。

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

    显然,作为一个二叉树,它的查询速度非常快,尽管可能不会比JSON对象的字典快,但是它没有需要担心的链表样式层次(对象图)。

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