我正在開發一個社交網絡,就像Facebook的一個子集。我認爲這意味着應用程序將比重寫更重(即比插入,更新或刪除更多的選擇)mysql表格和刪除策略
我打算使用MyISAM爲數據庫使用MySQL。數據庫中的每個表將包含以下三個領域:
CREATED
- 包含記錄被修改ROWSTATUS
時間日期字段 - 包含記錄的創建UPDATED
時間日期字段 - 包含單個字符標誌的CHAR(1)字段,用於顯示記錄是活動,未激活還是已刪除(分別使用值「A」,I
和D
)。
通過一個PHP包裝類,我們確保所有SELECT查詢都包含ROWSTATUS,並且UPDATE查詢也更新了UPDATED列,而INSERT查詢更新了CREATED列。
我打算不實際刪除任何記錄,而選擇將該記錄的ROWSTATUS字段更新爲D
以顯示它被刪除(即軟刪除)。
我們有一個SQL過程,它在10天后物理刪除已刪除的數據。
但是,我正在通過this article,它認爲,由於鎖定開銷,不需要物理刪除。相反,作者建議使用此方案:
SELECT e.eventid,e.title
FROM events e
WHERE NOT EXISTS
(SELECT * FROM event_deletes ed WHERE ed.eventid = e.eventid);
我想知道我的方案如何與此提議的機制進行比較,哪一個更好?我自己無法達成任何明確的答案。
接受一點鹽的建議。該文章發表後近7年發生了很大變化。 – 2010-12-16 06:35:49
你有計劃使用MyISAM而不是InnoDB的原因嗎? – AgentConundrum 2010-12-16 06:39:50
@AgentConundrum ...我們已經在使用MyISAM,我正在考慮遷移到InnoDB。只是想調查利弊 – Ahmad 2010-12-16 07:11:12