Страницы

Поиск по вопросам

среда, 12 июня 2019 г.

Создание и сохранение списка изменений объектов

Доброго времени суток!
Столкнулся с задачей сохранения списка изменений в коллекции объектов на диск.
public class Foo { public string WindowColor; public int FontSize;
// какие-то составные типы... public Car Car; }
Есть коллекция таких объектов (около 1000 элементов)
List Foos;
Элементы этой коллекции ежедневно редактируют пользователи, сетевые сервисы, ... Необходимо сохранять изменения этой коллекции на диск, чтобы в любой момент можно было открыть файл с диска на нужный день и просмотреть изменения.
Я думаю использовать бинарную сериализацию коллекции изменений, т.к. быстрее и нет необходимости открывать в ручную файл.
public class ChangeFoo { DateTime TimeStamp; //время изменения
public Foo Foo; //старый объект public Foo FooNew; //новый объект
//методы по вычислению изменений Foo->FooNew }
При каждом изменении я наполняю такую коллекцию.
List ChangeFoos;
Мне было бы удобно при наполнении коллекции в памяти сразу же писать 1 изменение на диск. Но я столкнулся с тем что сериализовать нужно ВСЮ коллекцию, чтобы потом без исключений ее десериализовать с диска. Грубо говоря если сериализуешь по 1 объекту ChangeFoo, то при загрузке не получается извлечь все объекты так:
ChangeFoos= (List)binFormat.Deserialize(fStream);
Т.е. если у меня будет 10000 изменений за день я для сохранения след. изменения обязан буду перезаписать весь список (пусть и в бинарном виде).
Подскажите как правильно сохранять такие коллекции и может в самой структуру ChangeFoo хранить пару имя измененного свойство и его значение, чтобы потом через рефлексию можно было присвоить значение свойству?


Ответ

Не мучайтесь и используйте LiteDb - это простая и легкая в использовании NoSQL Database, которая хранит все данные в переносимом файле. Есть поддержка индексов, возможность сохранить файлы, Linq, fluent mapping и прочие приятные мелочи.

Комментариев нет:

Отправить комментарий