**ソフトデリートの課題**

- **データ整合性リスク**
  - 非アクティブなレコードがテーブルに残ることで、重複データや誤ったビジネスロジックにつながる可能性があります。
  - 関連テーブルがソフト削除行を考慮していない場合、参照整合性制約が破綻する恐れがあります。

- **パフォーマンス低下**
  - クエリは「`WHERE is_deleted = false`」で削除済み行を除外しなければならず、オーバーヘッドが増大します。
  - インデックスが肥大化し、メンテナンス(例:PostgreSQL の VACUUM)がよりコスト高になります。

- **ストレージ膨張**
  - ソフト削除は行全体を保持するため、ハードデリートやアーカイブで解放できる領域が確保されません。
  - 長時間実行中のトランザクションがこれらの行にロックを保持すると、同時実行性が低下します。

- **複雑なビジネスロジック**
  - 関数やストアドプロシージャは削除ステータスを追加で確認する必要があります。
  - 監査システムは「本当に削除されたか」「論理的に除外されただけか」を区別しなければなりません。

- **データプライバシー遵守**
  - GDPR や CCPA といった法規制では個人情報の完全消去が求められるため、ソフト削除のみでは要件を満たせない場合があります。

- **復旧とリストアの課題**
  - ソフト削除されたレコードを復元する際、ビジネスルールが変更されているとエラーが発生しやすくなります。
  - バルクでの未削除操作は古いデータや不整合な情報を再導入するリスクがあります。

- **テスト・QA の負荷**
  - テストスイートはアクティブ状態と非アクティブ状態の両方を網羅しなければならず、複雑さが増します。
  - 単体テストでソフトデリート挙動をモックすることは容易ではありません。

---

**結論**  
ソフトデリートは監査性やロールバックの利便性を提供しますが、維持管理・パフォーマンス・コンプライアンスに関して大きな課題をもたらすため、慎重に運用する必要があります。

2026/01/21 6:36

**ソフトデリートの課題** - **データ整合性リスク** - 非アクティブなレコードがテーブルに残ることで、重複データや誤ったビジネスロジックにつながる可能性があります。 - 関連テーブルがソフト削除行を考慮していない場合、参照整合性制約が破綻する恐れがあります。 - **パフォーマンス低下** - クエリは「`WHERE is_deleted = false`」で削除済み行を除外しなければならず、オーバーヘッドが増大します。 - インデックスが肥大化し、メンテナンス(例:PostgreSQL の VACUUM)がよりコスト高になります。 - **ストレージ膨張** - ソフト削除は行全体を保持するため、ハードデリートやアーカイブで解放できる領域が確保されません。 - 長時間実行中のトランザクションがこれらの行にロックを保持すると、同時実行性が低下します。 - **複雑なビジネスロジック** - 関数やストアドプロシージャは削除ステータスを追加で確認する必要があります。 - 監査システムは「本当に削除されたか」「論理的に除外されただけか」を区別しなければなりません。 - **データプライバシー遵守** - GDPR や CCPA といった法規制では個人情報の完全消去が求められるため、ソフト削除のみでは要件を満たせない場合があります。 - **復旧とリストアの課題** - ソフト削除されたレコードを復元する際、ビジネスルールが変更されているとエラーが発生しやすくなります。 - バルクでの未削除操作は古いデータや不整合な情報を再導入するリスクがあります。 - **テスト・QA の負荷** - テストスイートはアクティブ状態と非アクティブ状態の両方を網羅しなければならず、複雑さが増します。 - 単体テストでソフトデリート挙動をモックすることは容易ではありません。 --- **結論** ソフトデリートは監査性やロールバックの利便性を提供しますが、維持管理・パフォーマンス・コンプライアンスに関して大きな課題をもたらすため、慎重に運用する必要があります。

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

メインメッセージ:
新規プロジェクトでは、著者はトリガー駆動型アーカイブ戦略を推奨しています。行が削除されると、トリガーがそれを汎用の

archive
テーブル(JSONB データ付き)にコピーし、
archived_at
タイムスタンプを記録します。これによりライブテーブルは軽量化され、読み取り時のフィルタリングオーバーヘッドを回避でき、セッション変数を介したカスケード削除の因果関係も保持できます。

主要な根拠と推論:

  • ソフトデリートは通常
    deleted
    フラグまたは
    archived_at
    列で実装されますが、アーカイブされた行はほぼアクセスされず(≈99%)、蓄積してストレージを膨張させ、バックアップ速度を遅くします。
  • archived_at = NULL
    にリセットしてレコードを復元するのは複雑になりがちで、推奨される方法は標準の復元 API を使用することです。
  • トリガーにより簡単なクリーンアップクエリ(
    WHERE archived_at < NOW() - INTERVAL '90 days'
    )を実行でき、ライブテーブルを清潔に保てます。
  • 代替手段としては、アプリケーションレベルのアーカイブ(SQS イベント → S3)、WAL ベースの CDC(Debezium + Kafka)があり、アプリコードを変更せずにすべての変更をストリームできますが、コンシューマーが遅延するとディスク枯渇を招く可能性があります。さらに DELETE を無視する実験的なレプリカもありますが、それぞれ運用上または一貫性上の課題があります。

将来の方向性:
著者は、新規プロジェクトに対してトリガー方式を採用することを推奨しています。その理由はシンプルさとインフラ要件が最小限であるためです。既存システムは、成熟するにつれて重い CDC パイプラインや SQS ベースのアーカイブから徐々に離れる可能性があります。

明確さと曖昧さについての注意:

  • 改善された概要は簡潔であり、主要なポイントに忠実で、元のテキストに存在しない推論を避けています。
  • ソフトデリート機構、ストレージ膨張、復元の複雑さ、代替案、および推奨事項といった重要要素はすべて網羅されています。

本文

ソフトデリート設計レビュー

ソフトデリート(論理削除)フラグ(booleanまたは

archived_at
タイムスタンプ)は、
誤って削除されたレコードを復旧できると同時にコンプライアンス/監査要件にも応えるため、
ソフトウェアプロジェクトでよく使われます。
しかしながら、以下のような大きな複雑さが生じます。

  • デッドデータ:ほぼすべてのアーカイブ行は参照されず、テーブルを肥大化します。
  • クエリオーバーヘッド:各クエリで削除済みレコードを除外しなければならず、インデックスが増大して無駄な行も含まれます。
  • 運用負担:ライブデータとアーカイブデータが同じテーブルに共存すると、マイグレーション・バックアップ・リストアが難しくなります。
  • 信頼性リスク:古いアーカイブを削除し忘れると、データベースは大きく遅くなります。

以下では、ライブテーブルをクリーンに保ちつつ、レコードのアーカイブ・復旧を簡単に行える代替策を紹介します。主にPostgreSQL向けですが、多くのアイディアは他のRDBMSにも応用可能です。


1. アプリケーションレベルでのアーカイブ

  • パターン:レコード削除時にドメインイベント(例:SQS)を発行し、
    バックグラウンドワーカーがそのイベントを受け取ってJSONスナップショットをオブジェクトストレージ(S3、GCSなど)へ保存します。
長所短所
プライマリデータベースとアプリコードをシンプルに保てる。バグが増える可能性がある;失われたアーカイブは手動でクリーンアップする必要がある。
削除処理が外部リソースも非同期にクリアできる。複数サービスとメッセージキューを要する。
JSONで保存されるため、検査や再生成が容易。アーカイブデータのクエリは難しく、追加ツールが必要になる。

2. トリガー駆動型アーカイブ

削除された行をJSONブロブとして格納する専用「archive」テーブルを作成します。

CREATE TABLE archive (
    id              UUID PRIMARY KEY,
    table_name      TEXT NOT NULL,
    record_id       TEXT NOT NULL,
    data            JSONB NOT NULL,
    archived_at     TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    caused_by_table TEXT,
    caused_by_id    TEXT
);

CREATE INDEX idx_archive_tbl_rec ON archive(table_name, record_id);
CREATE INDEX idx_archive_ts   ON archive(archived_at);

トリガー関数は以下のようになります。

CREATE OR REPLACE FUNCTION archive_on_delete()
RETURNS TRIGGER AS $$
DECLARE
    cause_table TEXT;
    cause_id    TEXT;
BEGIN
    -- カスケード削除のコンテキストを検知
    cause_table := current_setting('archive.cause_table', true);
    cause_id    := current_setting('archive.cause_id', true);

    IF cause_table IS NULL THEN
        PERFORM set_config('archive.cause_table', TG_TABLE_NAME, true);
        PERFORM set_config('archive.cause_id', OLD.id::TEXT, true);
        cause_table := TG_TABLE_NAME;
        cause_id    := OLD.id::TEXT;
    END IF;

    INSERT INTO archive (id, table_name, record_id, data,
                         caused_by_table, caused_by_id)
    VALUES (
        gen_random_uuid(),
        TG_TABLE_NAME,
        OLD.id::TEXT,
        to_jsonb(OLD),
        cause_table,
        cause_id
    );
    RETURN OLD;
END;
$$ LANGUAGE plpgsql;

トリガーを付与します。

CREATE TRIGGER archive_users
    BEFORE DELETE ON users
    FOR EACH ROW EXECUTE FUNCTION archive_on_delete();

CREATE TRIGGER archive_documents
    BEFORE DELETE ON documents
    FOR EACH ROW EXECUTE FUNCTION archive_on_delete();

利点

  • ライブテーブルは
    archived_at
    列や不要行を持たない。
  • アーカイブテーブルはパーティション分割・別テーブルスペースへ移動可能。
  • シンプルなクリーンアップ:
    DELETE FROM archive WHERE archived_at < NOW() - INTERVAL '90 days';
  • 通常のクエリでアーカイブデータを除外する必要がない。

トレードオフ

  • 削除時にトリガー実行分だけオーバーヘッドが増える。
  • アーカイブテーブル自体もストレージを消費するが、削除済み行のみ保存される点はメリット。

3. WALベースのCDC(Change Data Capture)

PostgreSQL の論理リプリケーションスロットと CDC ツール(Debezium, pgstream, wal2json 等)を使い、DELETE イベントを Kafka → S3 / Elasticsearch / DB など外部ストアへストリームします。

長所

  • アプリやトリガーの変更不要。
  • 同時に複数の宛先へ送信可能。

短所

  • Kafka クラスター、CDC ワーカー、監視など運用オーバーヘッドが大きい。
  • コンシューマが遅延すると WAL が蓄積し、
    max_wal_size
    max_slot_wal_keep_size
    の調整が必要。
  • スキーマ変更は送信側と受信側の両方で調整が求められる。

4. “Delete‑Ignore” レプリカ(実験的)

論理レプリカを作成し、DELETE コマンドを無視させることで、挿入・更新されたすべての行を保持します。必要に応じてこのレプリカ上で

archived_at
列へ変換してもよい。

潜在的課題

  • スキーママイグレーションが失敗する可能性。
  • レプリカ維持のため追加ストレージ・運用コストが発生。

推奨策

新規プロジェクトでソフトデリートを採用する場合、トリガー駆動型アーカイブ が最もシンプルかつ侵入性が低い選択肢です。

  1. ライブテーブルはスリムに保ち(
    archived_at
    列不要)。
  2. 削除を専用 JSON テーブルへアーカイブ。
  3. 定期的に古いアーカイブを時間ベースで削除。
  4. 復旧は通常 API で JSON スナップショットを再挿入するだけ。

この手法は保守性・パフォーマンス・復元性のバランスが良く、追加サービスや複雑なインフラを必要としません。Kafka を既に利用している場合や外部へ変更ストリームを送る必要があるなら CDC も検討すべきですが、それ以外はトリガーで十分です。

同じ日のほかのニュース

一覧に戻る →

2026/01/21 3:16

**2019年 「見えないままに隠された26000年前の天文モニュメント」**

## Japanese Translation: **概要:** フーバーダムの西側にあるモニュメント・プラザは、地球の25,772年周期の軸進動をタレーズ床にマッピングした芸術的な敬意表現です。設計の中心には旗竿があり、これは進動円の中心として機能します。その周囲には巨大な翼付きブロンズ像が配置されています。床はダム開業時(1936年)のポラリス、ピラミッド建設中のトゥバン、そして将来の北極星としてプロジェクトされたベガを示しており、技術図面には惑星位置が正確に配置されているため、1日単位での日付計算が可能です。1931年に米国再利用局(U.S. Bureau of Reclamation)から委託され、1936年に完成したモニュメントは後にモニュメント・プラザと名付けられました。アーティストのオスカー J. W. ハンセン氏の意図表明は抽象的であり、歴史家エメー・ウッドワードが提供したアーカイブ写真には「セーフティアイランド」という早期建設名が示されています。デザインはロング・ナウ(Long Now)の10,000年時計コンセプトを反映しており、天体周期の公衆展示に類似するものとしてインスピレーションを与える可能性があります。米国再利用局が計画図をInternet Archiveへ公開したことは、ダム文書へのオープンアクセス化の動向を示しています。訪問者には短い音声解説のみが提供されるため、詳細な科学内容はほぼ隠蔽されており、教育的広報は限定的です。それでもプラザは20世紀初頭の大規模インフラプロジェクトにおける芸術と科学の統合を示す具体例として、歴史家・天文学者・エンジニアに貴重な実証を提供します。

2026/01/21 6:34

**日本のスナックバーの秘密世界へようこそ** 「おかかん」と呼ばれることもある日本のスナックバーは、地元ならではの味と創造性を堪能できる隠れた宝石です。小さな飲食店が揃うこれらのお店では、フライドライスボール(おにぎり)や塩気のあるペストリー、甘いスイーツなど、手軽で美味しい一口料理を提供しつつ、親切なサービスも楽しめます。 - **雰囲気**:街角の居心地の良い隅っこや静かな路地裏が主流です。 - **メニューの見どころ**: - 海苔と醤油をトッピングしたフライドライスボール - 蜂蜜でコーティングされた甘いかぼちゃロール - 豚肉と竹笹の餡が入った塩味の餃子 - **特徴**: - 多くのお店では、新鮮な地元産食材を使用しています。 - 季節ごとにメニューが変わるローテーションもあります。 おかかんへ足を踏み入れることは、単なるスナックの取得以上の体験です。便利さと伝統が交差する日本の食文化を垣間見る瞬間なのです。

## Japanese Translation: スナックバー―第二次世界大戦後に厳しい酒類法を回避するために登場した、女性が経営する小規模カフェ―は、日本独自の社会的ハブとして確立しました。全国には約10万店舗が存在し、コンビニエンスストアの数を2倍以上上回ります。これらは「ママさん」と呼ばれる年配女性によって運営され、家庭的な雰囲気でシンプルなお菓子や飲み物を提供します。主目的は食べ物や飲み物だけでなく、会話と個人的つながりを得られる居心地の良い空間を提供することです。 このコンセプトは日本の戦後経済成長期に急速に広がりました。1960年代後半には全国的にスナックバーが普及し、コミュニティのハブとなり、その後1980年代中頃から1990年代初頭まで存続しました。特徴として「ボトルキープ」システムがあります:常連客は自分のウイスキーや焼酎をラベル付けして保管し、次回訪問時に利用できます。伊良谷真由子(Mayuko Igarashi)氏などの研究者は2021年以降、1200件以上の店舗を巡り、旅行者とこれまで地元住民限定だった場所を結びつけています。 スナックバーはCOVID-19以前から人気低下やホスト人口の高齢化、カラオケバーやチェーン居酒屋との競争など課題に直面していますが、新しいトレンドが存続を支えています。アニメテーマのスナック、SNSプロモーション、LGBTQ+来客へのより包括的な対応などです。著名例として新橋の「Aeru」のウララ氏は14年間でタロットリーディングと現代のマッチメイキング手法を用いて90組以上のカップルを紹介しています。 デジタルライフの圧力にもかかわらず、スナックバーはママさんとの真の人間関係や親密な会話が評価され続けています。旅行者は、豪華ホテルや寿司教室など高価な観光活動よりも、これらの場所での思い出深い体験を重視しており、地元経済と伝統的ホスピタリティ慣行の保存に対する継続的な関連性を示しています。

2026/01/21 1:48

**UNIXパイプ・カードゲーム**

## Japanese Translation: 記事は、子どもに Unix パイプコマンドチェーンの構築方法を教えるカードベースのボードゲームについて説明しています。デッキには、`cat`、`grep`、`tail`、**`head`、`wc`、`sort`、`uniq`** などの主要な Unix コマンドを表すカードと、特定行の表示、出現回数のカウント、非表示コマンドチェーンの作成といったタスクが含まれています。ローカルの Unix システムが利用できない場合は、ブラウザベースの jslinux を使用できます。 ゲームプレイは時計回りに進行します:プレイヤーはカードを引き、最短または最長の有効パイプラインを目指すかどうかを選択し、タスクを完了した最初のプレイヤーがポイントを獲得します。例として、最も頻出する行を見つけるチェーンを示すラウンドがあります: ``` cat 03.txt | sort | uniq -c | sort -n | tail -1 ``` ゲームは €5,00 EUR(現在完売)で販売されており、印刷可能な PDF(`unix-pipe-cards.pdf`、`unix-pipe-box.pdf`)も入手できます。 GitHub 上のソースコードリポジトリ(`github.com/jackdoe`)、共著者 Jackie、連絡メールアドレス (`b0000@fastmail.com`) と CC BY 4.0 ライセンスが製品に付属しています。 「UNIX Pipe Game – Process Substitution」という拡張パックでは、プロセス置換用のコマンド(`paste`、`tr`、`cut`、`bc`)を追加します。 著者は Python の基礎、C ポインタ、機械語、ランレングス符号化、関数合成、RISCV アセンブラなどをカバーする追加のカードゲームも公開しており、子ども向けにプログラミング概念をゲーミフィケーションする広範な取り組みを示しています。

**ソフトデリートの課題** - **データ整合性リスク** - 非アクティブなレコードがテーブルに残ることで、重複データや誤ったビジネスロジックにつながる可能性があります。 - 関連テーブルがソフト削除行を考慮していない場合、参照整合性制約が破綻する恐れがあります。 - **パフォーマンス低下** - クエリは「`WHERE is_deleted = false`」で削除済み行を除外しなければならず、オーバーヘッドが増大します。 - インデックスが肥大化し、メンテナンス(例:PostgreSQL の VACUUM)がよりコスト高になります。 - **ストレージ膨張** - ソフト削除は行全体を保持するため、ハードデリートやアーカイブで解放できる領域が確保されません。 - 長時間実行中のトランザクションがこれらの行にロックを保持すると、同時実行性が低下します。 - **複雑なビジネスロジック** - 関数やストアドプロシージャは削除ステータスを追加で確認する必要があります。 - 監査システムは「本当に削除されたか」「論理的に除外されただけか」を区別しなければなりません。 - **データプライバシー遵守** - GDPR や CCPA といった法規制では個人情報の完全消去が求められるため、ソフト削除のみでは要件を満たせない場合があります。 - **復旧とリストアの課題** - ソフト削除されたレコードを復元する際、ビジネスルールが変更されているとエラーが発生しやすくなります。 - バルクでの未削除操作は古いデータや不整合な情報を再導入するリスクがあります。 - **テスト・QA の負荷** - テストスイートはアクティブ状態と非アクティブ状態の両方を網羅しなければならず、複雑さが増します。 - 単体テストでソフトデリート挙動をモックすることは容易ではありません。 --- **結論** ソフトデリートは監査性やロールバックの利便性を提供しますが、維持管理・パフォーマンス・コンプライアンスに関して大きな課題をもたらすため、慎重に運用する必要があります。 | そっか~ニュース