Я работаю в социальной сети, как подмножество Facebook.Я думаю, это означает, что приложение будет более тяжелым для чтения, чем для тяжелой записи (т.е. больше SELECTS, чем INSERTS, UPDATES или OR DELETES)
Я планирую использовать MySQL для базы данных, используя MyISAM.Каждая таблица в базе данных будет содержать следующие три поля:
CREATED
- поле даты, содержащее время создания записи UPDATED
- поле даты, содержащеевремя изменения записи ROWSTATUS
- поле CHAR (1), содержащее флаг из одного символа, показывающий, активна ли запись, неактивна или удалена (с использованием значений «A», I
иD
, соответственно).
Через класс-оболочку PHP мы гарантируем, что все запросы SELECT включают ROWSTATUS, а запросы UPDATE также обновляют столбец UPDATED, а запросы INSERT обновляют столбец CREATED.
Я планирую на самом деле не удалять какие-либо записи, выбрав вместо этого обновить поле ROWSTATUS этих записей до D
, чтобы показать, что оно удалено (т.е. мягкое удаление).
У нас есть процедура SQLкоторый физически удаляет удаленные данные через 10 дней.
Однако я просматривал эту статью , в которой утверждается, что нет необходимости удалять физически, потому чтое блокировки накладных расходов.Скорее, автор предложил использовать эту схему:
SELECT e.eventid,e.title
FROM events e
WHERE NOT EXISTS
(SELECT * FROM event_deletes ed WHERE ed.eventid = e.eventid);
Мне интересно, как моя схема сравнивается с этим предложенным механизмом, и какой из них лучше?Я не мог найти окончательного ответа самостоятельно.