иерархический формат файла .Net? - PullRequest
4 голосов
/ 21 июля 2009

Наша компания какое-то время искала формат файла для хранения большого количества данных лабораторных датчиков. Каждый раз, когда они запускают инструментарий, он генерирует файл, который мы используем и храним в базе данных для анализа тенденций и т. Д. Предпочтительным является иерархический формат, поскольку он позволяет нам «группировать» данные. Это промежуточный формат файла, прежде чем мы поместим данные в базу данных. Из-за нашей среды разработки, это наш список приоритетов:

1). Net совместимый. API будет использоваться в веб-сервисах и клиентском приложении. Мы не имеем никакого контроля над средой клиента, поэтому лучше использовать решение pure.Net.

2) Скорость чтения. Наши чтения являются случайными, а не последовательными. Чем быстрее тем лучше. Если бы мы не были магазином для разработки на C #, я бы сказал, что скорость равна # 1.

3) Размер файла. Если сам файл большой, желательно иметь хорошую степень сжатия (86% и выше).

4) След памяти чтения. Из-за объема данных мы не можем просто прочитать их. каждый датчик имеет пару время / значение. Это может генерировать более 4 миллионов пар. Это устранило для нас XML.

В настоящее время мы рассмотрели HDF5 и обнаружили, что API ужасно не хватает на арене .NET, мы не можем работать с веб-службами, но имеем нужный нам размер / скорость. Я также изучил JSON , и это выглядело многообещающе, но я не пытался прочитать часть данных обратно. Я искал в Интернете и не нашел много форматов файлов, которые делают то, что нам нужно. Любая помощь приветствуется.

Ответы [ 4 ]

1 голос
/ 21 июля 2009

Вам нужна база данных b-дерева, например: Sql Server Compact

Также посмотрите на SQLite http://sqlite.phxsoftware.com/

CTree - это скорее ISAM, если вы можете обойтись без SQL-части Google для ctree

Извините, я бы связал больше, ТАК не позволяет мне, потому что это новый акт

1 голос
/ 21 июля 2009

Я думаю, что вам лучше хранить эту информацию в таблице в вашей базе данных, если вы используете SQL Server, VARBINARY должен сделать эту работу.

Ваша таблица может быть иерархической, если включить поле [Parent], которое может быть пустым для узлов верхнего уровня.

Если вы индексируете значение поиска (идентификатор файла), произвольный доступ должен быть быстрым. Если вам нужно сжатие, вы можете попробовать использовать классы GZip для форматирования вашего необработанного байта [], прежде чем помещать его в базу данных.

Использование базы данных для этой информации дает вам возможность:

1) Запускайте сумасшедшие запросы, объединения и т. Д. 2) Вы можете индексировать несколько столбцов для более быстрого поиска по различным значениям ключа 3) .Net наверняка имеет несколько API 4) Сжатие можно добавить, если оно не слишком сильно влияет на скорость 5) Резервное копирование данных должно быть легко

Помогает ли вам этот совет?

0 голосов
/ 21 июля 2009

Если формат Binary Tree / Balanced Tree не требует особых усилий, вы можете сохранить его в формате Newick . Он также может поддерживать формат пары ключ / значение, такой как JSON.

Однако на самом деле это не намного легче, чем JSON - "{}" заменены на "()".

((енот, медведь), ((sea_lion, печать), ((обезьяны, кошки), ласка)), собака);

Очевидно, что это двоичное дерево, которое очень быстро запрашивать, хотя, опять же, вероятно, не быстрее, чем словарь из объекта JSON, однако у него нет иерархии связанного стиля списка (графа объектов), о котором следует беспокоиться.

Боюсь, я не смог найти .NET apis для него, только Java и C.

0 голосов
/ 21 июля 2009

Я думаю, что специальное требование чтения будет проблемой для любого формата, и в этом случае вам нужно будет реализовать свой собственный синтаксический анализатор.

...