Сохранение в CSV-файл с текущими изменениями

#.net #csv #persistence

#.net #csv #сохранение

Вопрос:

У меня есть два основных требования для сохранения моих данных:

  1. Сохраните его в чистом и расширяемом формате, таком как CSV.
  2. Следует ли быстро сохранять изменения в данных пользователем, чтобы избежать потери данных при подаче питания / фатальном сбое.

Первое требование исключает большинство баз данных, которые обычно превосходят второе.

Есть предложения о том, как это реализовать?

Мои данные в основном табличные, поэтому требований к сложности модели нет, а ожидаемый размер находится в пределах десятков / сотен тысяч записей.

Платформа .Net.

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

1. CSV не является хорошим решением для сохранения чего-либо, особенно с текущими изменениями. Это формат передачи данных.

2. Также обратите внимание, что если все сделано «правильно», в CSV есть больше, чем кажется (на первый взгляд): пробелы, кавычки, встроенные кавычки, разрывы строк в полях, форматы чисел и дат и т.д. Достойный и надежный редактор / читатель CSV — это больше, чем StringBuilder.Append() и / или String.Split() . РЕДАКТИРОВАТЬ: Извините, я не имел в виду, что вы этого не знаете, но на всякий случай…

3. Спасибо, что упомянули об этом. Я приобрел некоторый опыт разбора csv-файлов в наихудших условиях (unicode, отложенная загрузка, поля, содержащие трассировки стека и т.д.). Я нахожу, что LumenWorks csvreader делает это лучше всего и быстро.

Ответ №1:

Почему бы не сохранить это в базе данных, но не один столбец = одно значение, а одна строка = одно значение? Что-то вроде этого:

 
csvId | value | name?|
    1 | "aaa" | 
    1 | "bbb" |
  

тогда он «расширяемый»

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

1. Это жизнеспособный вариант, который я не рассматривал. Для простоты я хочу избегать баз данных, управление которыми зависит от сторонней библиотеки или которые нелегко переносимы (нет SQLServer, нет пользовательских решений для сериализации, таких как db4Objects и т.д.). Например, форматами csv / xml можно легко манипулировать и переносить на другие платформы. Csv имеет преимущество в том, что он более компактный и быстрее анализируется.

2. Что вы думаете об этом: загрузите все записи при запуске. При каждом изменении iser добавляйте всю запись в запущенный «журнал». При простаивании и / или при закрытии консолидируйте файл данных и файл журнала. Преимущества заключаются в быстрой загрузке (особенно если сначала загружается только n записей), быстрой сохраняемости изменений и простом формате csv. Недостатками является высокая цена консолидации.