私はFacebookのサブセットのようなソーシャルネットワークに取り組んでいます。これは、アプリケーションが書き込み重いよりも読み込み重いことを意味すると思います(挿入、更新、または削除よりも多くの選択肢)mysqlテーブルと削除戦略
MyISAMを使用してデータベースにMySQLを使用する予定です。データベースの各テーブルには、次の3つのフィールドが含まれます:レコードは
ROWSTATUS
を変更された時刻を含む日付フィールド - - レコードがUPDATED
を作成された時刻を含む日付フィールド
CREATED
を - レコードがActive、Inactive、またはDeleted(値 'A'、I
、およびD
をそれぞれ使用する)であるかどうかを示す単一文字フラグを含むCHAR(1)フィールド。
PHPラッパークラスを使用して、すべてのSELECTクエリにROWSTATUSが含まれていることを確認し、UPDATEクエリもUPDATED列を更新し、INSERTクエリはCREATED列を更新します。
実際にレコードを削除しないで、そのレコードのROWSTATUSフィールドをD
に更新することを選択して、削除されたことを示します(つまり、ソフト削除)。
10日後に削除されたデータを物理的に削除するSQLプロシージャがあります。
しかし、私はthis articleに行きました。これは、ロックオーバーヘッドのために物理的に削除する必要はないと主張しています。むしろ、作者はこの方式を使うことを提案:
SELECT e.eventid,e.title
FROM events e
WHERE NOT EXISTS
(SELECT * FROM event_deletes ed WHERE ed.eventid = e.eventid);
私は私のスキームは、この提案された機構と比較して、どちらが優れているどのように思ったんだけど?私は自分自身で決定的な答えに達することができませんでした。
塩分でそのアドバイスを受けてください。その記事からほぼ7年間で多くのことが変わった。 –
InnoDBではなくMyISAMを使用する理由はありますか? – AgentConundrum
@AgentConundrum ...私たちはすでにMyISAMを使用しています。私はInnoDBへの移行を考えています。賛否両論を調べたいだけです。 – Ahmad