Facebook のサブセットのようなソーシャル ネットワークに取り組んでいます。これは、アプリケーションが書き込みよりも読み取りの方が多いことを意味すると思います (つまり、INSERTS、UPDATES、または DELETES よりも SELECTS の方が多い)。
MyISAM を使用して、データベースに MySQL を使用する予定です。データベースの各テーブルには、次の 3 つのフィールドが含まれます。
CREATED
- レコードが作成された時刻を含む日付フィールドUPDATED
- レコードが変更された時刻を含む日付フィールドROWSTATUS
- レコードがアクティブ、非アクティブ、または削除されているかどうかを示す単一の文字フラグを含む CHAR(1) フィールド (それぞれ値 'A'、I
、およびD
を使用)。
PHP ラッパー クラスを介して、すべての SELECT クエリに ROWSTATUS が含まれるようにし、UPDATE クエリも UPDATED 列を更新し、INSERT クエリが CREATED 列を更新するようにします。
実際にレコードを削除するつもりはありません。代わりに、そのレコードの ROWSTATUS フィールドを更新して、D
削除されたことを示すようにします (つまり、ソフト削除)。
10 日後に削除されたデータを物理的に削除する SQL 手順があります。
ただし、この記事を読んでいたところ、オーバーヘッドがロックされているため、物理的に削除する必要はないと主張しています。むしろ、著者は次のスキームを使用することを提案しました。
SELECT e.eventid,e.title
FROM events e
WHERE NOT EXISTS
(SELECT * FROM event_deletes ed WHERE ed.eventid = e.eventid);
私のスキームがこの提案されたメカニズムとどのように比較され、どちらが優れているのだろうか? 自分だけでは決定的な答えにたどり着けませんでした。