В проекте, над которым я сейчас работаю, необходимо сохранить значительную структуру данных на диск (отредактируйте: подумайте о десятках MB). Будучи оптимистом, я думал, что для такой проблемы должно быть стандартное решение; однако до сих пор я не нашел решения, удовлетворяющего следующим требованиям:
- Поддержка .NET 2.0, предпочтительно с реализацией FOSS
- Версия дружественная (это должно интерпретироваться как: чтение старой версии формата должно быть относительно простым, если изменения в базовой структуре данных просты, скажем, добавление/удаление полей)
- Возможность делать некоторую форму произвольного доступа, когда часть данных может быть расширена после первоначального создания без необходимости десериализации коллекции, созданной до этого момента (подумайте об этом как о промежуточных результатах).
- Эффективность пространства и времени (XML был исключен как опция с учетом этого требования)
Варианты, рассмотренные до сих пор:
- XmlSerializer: было отклонено, поскольку сериализация XML не соответствует требованиям 3 и 4.
- SerializableAttribute: не поддерживает требования 2 и 3.
- Буферы протокола: был отклонен приговором документации о Large Data Sets - поскольку этот комментарий предложил добавить еще один слой сверху, это вызовет дополнительную сложность, которую я хочу обработать самим форматом файла.
- HDF5, EXI: do похоже, нет .net-реализации.
- SQLite/SQL Server Compact edition: структура данных под рукой приведет к довольно сложной структуре таблицы, которая кажется слишком тяжелой для предполагаемого использования.
- BSON: не поддерживает требование 3.
- Fast Infoset: только, кажется, заплатили .NET-реализации.
Приветствуются любые рекомендации или указатели. Кроме того, если вы считаете, что какая-либо из приведенных выше сведений неверна, предоставьте указатели/примеры, чтобы доказать, что я не прав.