<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<oembed>
  <author_name>sumzap_engineer</author_name>
  <author_url>https://blog.hatena.ne.jp/sumzap_engineer/</author_url>
  <blog_title>Sumzap Engineering Blog</blog_title>
  <blog_url>https://tech.sumzap.co.jp/</blog_url>
  <categories>
    <anon>クライアント</anon>
    <anon>Unity</anon>
    <anon>C#</anon>
  </categories>
  <description>目次 はじめに なぜマスタデータは壊れるのか 書き込み途中のクラッシュ スレッド競合 データとハッシュの不整合 設計方針：3層防御 第1層：破損防止 アトミック書き込み スレッドセーフ化 起動時クリーンアップ 第2層：検知 整合性状態の定義 VerifyAndRead：検証と読み込みの一体化 第3層：リカバリ Load 失敗時の再ダウンロード誘導 破損ファイルの安全な削除 保存リトライ 落とし穴と学び File.Replace の代わりに Delete + Move を選んだ理由 FileStream の二重 Dispose ConcurrentDictionary.AddOrUpdate の…</description>
  <height>190</height>
  <html>&lt;iframe src=&quot;https://hatenablog-parts.com/embed?url=https%3A%2F%2Ftech.sumzap.co.jp%2Fentry%2Fmaster-data-corruption-prevention-three-layer-defense&quot; title=&quot;モバイルゲームのローカルキャッシュが壊れた！アトミック書き込みと3層防御で解決した話 - Sumzap Engineering Blog&quot; class=&quot;embed-card embed-blogcard&quot; scrolling=&quot;no&quot; frameborder=&quot;0&quot; style=&quot;display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;&quot;&gt;&lt;/iframe&gt;</html>
  <image_url>https://cdn-ak.f.st-hatena.com/images/fotolife/s/sumzap_engineer/20260330/20260330153450.png</image_url>
  <provider_name>Hatena Blog</provider_name>
  <provider_url>https://hatena.blog</provider_url>
  <published>2026-05-18 14:58:12</published>
  <title>モバイルゲームのローカルキャッシュが壊れた！アトミック書き込みと3層防御で解決した話</title>
  <type>rich</type>
  <url>https://tech.sumzap.co.jp/entry/master-data-corruption-prevention-three-layer-defense</url>
  <version>1.0</version>
  <width>100%</width>
</oembed>
