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