나는 페이스 북의 서브 세트와 같은 소셜 네트워크에서 일하고있다. 이는 애플리케이션이 쓰기가 무거운 것보다 더 무겁게 읽는다는 것을 의미한다고 생각합니다. (삽입, 업데이트 또는 삭제보다 더 많은 선택)mysql 테이블과 삭제 전략
MyISAM을 사용하여 데이터베이스에 MySQL을 사용할 계획입니다. 데이터베이스의 각 테이블에는 다음과 같은 세 개의 필드가 포함됩니다 : 레코드가
ROWSTATUS
수정 된 시간을 포함하는 날짜 필드 - - 레코드가UPDATED
을 생성 된 시간을 포함하는 날짜 필드
CREATED
을 - 레코드가 활성, 비활성 또는 삭제됨 (값 '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