Хорошо, мы сортируем/десериализируем что-то, но когда вы работаете с важными данными людей, вам нужно быть осторожным, чтобы объекты были сериализованы/десериализованы правильно на 100%. Например, давайте рассмотрим случай, когда ваше приложение умирает/принудительно закрывается во время сериализации. В большинстве случаев вы получите поврежденный объект, который не принимает меня, я не могу сказать, что могу вручную использовать baackup файла и писать флаг, lke не работает, прежде чем начинать сериализацию и добавлять флаг, выполняемый в конце процесса, и взять файл из резервной копии, если он не работает во время десериализации. Это не хорошо, потому что я должен сделать резервную копию очень большого файла после каждого изменения. Есть ли какая-нибудь возможность построить безопасную логику в популярных сериализаторах в .NET Framework или protobuf? Я не могу найти какую-либо информацию о безопасном сериализации. Или вы можете сказать мне abaut какой-то хороший шаблон, как сделать сериализацию неуверенно?Безопасная сериализация
1
A
ответ
2
Сериализация не имеет ничего общего с этим. Ваш реальный вопрос: как я могу написать кучу данных атомарно на диск? Вот несколько вариантов:
- Если данные достаточно мал, чтобы поместиться в один кластер диска (512 байт или 4K) используют
FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING
атомарной записи одного сектора диска в одном вызове записи. - Использовать транзакционную NTFS для атомарного ввода любого количества данных.
- Написать в
.tmp
файл и атомарно переименовать имя разыскиваемого файла - Используйте другие средства для достижения атомарность, как базы данных (может быть, даже SqlLite, ESENT, ...) или CLFS из Windows.
Смежные вопросы
- 1. Безопасная сериализация
- 2. Безопасная сериализация структуры C для отправки по сетям? - C++
- 3. Безопасная регистрация
- 4. Безопасная публикация
- 5. Безопасная попытка/уловка java
- 6. Безопасная подписка на DSA
- 7. Безопасная кнопка в PHP
- 8. Безопасная загрузка файла PHP
- 9. Безопасная попытка шифрования XOR
- 10. Безопасная версия OS.Process.system
- 11. Безопасная версия popen()?
- 12. Безопасная альтернатива опасноSetInnerHTML
- 13. Безопасная версия Path.Combine
- 14. SignalR безопасная доставка сообщений
- 15. Безопасная версия wsprintf()?
- 16. Безопасная обратная маршрутизация
- 17. Безопасная идентификация пользователя OpenID
- 18. безопасная двухсторонняя технология хэширования
- 19. jQuery безопасная инъекция html
- 20. NSThread - безопасная реализация инициализации.?
- 21. Безопасная аутентификация без SSL?
- 22. Безопасная проверка сеанса PHP?
- 23. PHP безопасная система загрузки
- 24. Безопасная сессия Java
- 25. Безопасная связь SQL Server
- 26. Резьба безопасная одноразовая
- 27. ASP.Net безопасная аутентификация Ajax
- 28. Программируемая, безопасная замена FTP
- 29. Безопасная ошибка сегментации?
- 30. Безопасная блокировка потоков Java
Нет. Если «очень большой файл» - это ваша проблема, вам явно нужно перейти в базу данных. Что поддерживает транзакции. –
IMO вы можете вырезать сериализацию из этой проблемы: сначала выполните сериализацию - теперь у вас есть данные: как атомизировать мутацию данных безотказным способом? Это хорошо известная проблема, о которой люди, подобные людям РСУБД, знают много. –
@ HansPassant да, сделка. к сожалению, это большое старое приложение, и они не будут переключаться на базу данных по внутренним причинам, есть проблемы с производительностью. Сериализатор намного быстрее для необработанных данных –