> 백엔드 개발 > PHP 튜토리얼 > MySQL은 데이터 테이블을 수직으로 분할합니다.

MySQL은 데이터 테이블을 수직으로 분할합니다.

WBOY
풀어 주다: 2016-09-15 11:30:59
원래의
1134명이 탐색했습니다.

개발 과정에서 다음과 같은 문제에 직면했습니다. 데이터베이스에 기사 관련 정보(예: 제목, 내용, 저자, 생성 시간, 컬렉션 수 등), 사용자와 기사 간의 수집 관계를 저장하는 또 다른 테이블이 있습니다(주요 필드: 사용자 ID, 기사 ID). 기사를 처음 열람할 때 기사 데이터는 다음에서 가져옵니다. 데이터베이스와 데이터가 redis에 캐시되어 성능이 향상됩니다. 하지만 이제는 기사를 즐겨찾기하거나 즐겨찾기에서 취소할 때마다 기사 테이블의
컬렉션 수 필드가 업데이트되고 기사의 캐시가 지워지기 때문입니다(제가 캐시를 업데이트하는 대신 캐시를 지우는 이유는 더티 데이터 생성을 방지하기 위해 다음에 기사에 액세스할 때 데이터베이스가 쿼리되고 데이터가 캐시되므로 성능에 일정한 영향을 미치기 때문입니다!

그래서 기사 테이블의 컬렉션 수를 분할하여 새 컬렉션 테이블을 만들고(주요 필드는 기본 키 ID, 기사 ID, 컬렉션 수) 캐싱할 때 컬렉션 수를 별도로 캐시하기로 결정했습니다. 기사 데이터이므로 기사가 수집되거나 수집되지 않을 때마다 기사 테이블을 업데이트할 필요는 없으며 기사 수집 수 테이블만 업데이트됩니다. 여기서 데이터는 수집 횟수가 특별히 중요한 데이터가 아니기 때문에 두려워하지 않습니다. 특정 오류가 있어도 부작용이 발생하지 않습니다.

위 솔루션을 사용하면 두 가지 질문이 발생하며 이에 대한 답을 얻을 수 있기를 바랍니다.

  1. 기사 모음 수 중 기본 키 ID와 기사 ID 필드는 고유하고 반복되지 않는 필드이므로 기본 키 ID 필드를 생략하고 기사 ID를 기본 키로 직접 사용할 수 있나요?

  2. 기사가 추가될 때마다 기사 ID에 해당하는 기사 모음 수가 동기화되지 않기 때문에 기사가 수집되거나 수집되지 않을 때 기사 모음 수가 업데이트될 때마다 기사 모음은 테이블에 해당 기사 ID에 해당하는 컬렉션 번호가 이미 있는지 쿼리해야 합니다. 없으면 새 컬렉션 번호 데이터를 추가합니다. 따라서 해당 기사의 컬렉션 번호를 직접 업데이트합니다. 단순화를 위해

    매번 새로운 기사를 추가하기로 했습니다. 기사 데이터가 추가되면 기사 ID에 해당하는 기사 수집 수 데이터가 동기화됩니다. 앞으로는 데이터가 존재하는지 먼저 확인할 필요가 없고 데이터를 직접 업데이트할 수 있습니다. 이 경우 새로 추가된 기사 데이터와 새로 추가된 기사 수집 데이터 사이에 이상이 발생하여 성공할 수 있습니다. 새 기사 데이터는 있는데 새 기사 수집 데이터의 실패? 트랜잭션을 사용하여 피할 수 있다는 것을 알고 있습니다. 더 쉬운 방법이 있습니까? MySQL은 데이터 조각을 추가할 때 자동으로 다른 테이블에 데이터 조각을 추가할 수 있습니까? (데이터베이스 쓰레기~)

위 내용에 감사드립니다!

답글 내용:

개발 과정에서 다음과 같은 문제에 직면했습니다. 데이터베이스에 기사 관련 정보(예: 제목, 내용, 작성자, 생성 시간,

컬렉션 수 등), 사용자와 기사 간의 수집 관계를 저장하는 또 다른 테이블이 있습니다(주요 필드는: 사용자 ID, 기사 ID). 기사를 처음 볼 때 기사 데이터는 다음에서 가져옵니다. 데이터베이스와 데이터가 redis에 캐시되어 성능이 향상됩니다. 하지만 이제는 기사가 수집되거나 수집되지 않을 때마다 기사 테이블의 수집 횟수
필드가 업데이트되고 기사의 캐시가 지워지기 때문에(제가 선택한 이유는 다음과 같습니다.) 캐시를 업데이트하는 대신 캐시를 지우는 이유는 더티 데이터 생성을 방지하기 위해 다음에 기사에 액세스할 때 데이터베이스가 쿼리되고 데이터가 캐시되므로 성능에 일정한 영향을 미치기 때문입니다! 그래서 기사 테이블의 컬렉션 수를 분할하여 새 컬렉션 테이블을 만들고(주요 필드는 기본 키 ID, 기사 ID, 컬렉션 수) 캐싱할 때 컬렉션 수를 별도로 캐시하기로 결정했습니다. 기사 데이터이므로 기사가 수집되거나 수집되지 않을 때마다 기사 테이블을 업데이트할 필요는 없으며 기사 수집 수 테이블만 업데이트됩니다. 여기서 데이터는 수집 횟수가 특별히 중요한 데이터가 아니기 때문에 두려워하지 않습니다. 특정 오류가 있어도 부작용이 발생하지 않습니다.

위 솔루션을 사용하면 두 가지 질문이 발생하며 이에 대한 답을 얻을 수 있기를 바랍니다.

    기사 모음 수 중 기본 키 ID와 기사 ID 필드는 고유하고 반복되지 않는 필드이므로 기본 키 ID 필드를 생략하고 기사 ID를 기본 키로 직접 사용할 수 있나요?
  1. 기사가 추가될 때마다 기사 ID에 해당하는 기사 모음 수가 동기화되지 않기 때문에 기사가 수집되거나 수집되지 않을 때 기사 모음 수가 업데이트될 때마다 기사 모음은 테이블에 해당 기사 ID에 해당하는 컬렉션 번호가 이미 있는지 쿼리해야 합니다. 없으면 새 컬렉션 번호 데이터를 추가합니다. 따라서 해당 기사의 컬렉션 번호를 직접 업데이트합니다. 단순화를 위해 매번 새로운 기사를 추가하기로 했습니다. 기사 데이터가 추가되면 기사 ID에 해당하는 기사 수집 수 데이터가 동기화됩니다. 앞으로는 데이터가 존재하는지 먼저 확인할 필요가 없고 데이터를 직접 업데이트할 수 있습니다. 이 경우 새로 추가된 기사 데이터와 새로 추가된 기사 수집 데이터 사이에 이상이 발생하여 성공할 수 있습니다. 새 기사 데이터는 있는데 새 기사 수집 데이터의 실패? 트랜잭션을 사용하여 피할 수 있다는 것을 알고 있습니다. 더 쉬운 방법이 있습니까? MySQL은 데이터 조각을 추가할 때 자동으로 다른 테이블에 데이터 조각을 추가할 수 있습니까? (데이터베이스 쓰레기~)

위 내용에 감사드립니다!

1. 네, 하지만 여기서는 연결을 해야 합니다. 즉, 기사를 추가하거나 삭제할 때 기사 수집 테이블도 작동해야 합니다

2 mysql의 udf를 사용합니다. 자세한 내용은 MySQL :: MySQL 5.1 참조 설명서 :: 22.3 MySQL에 새 함수 추가를 참조하세요. 그런 다음 트리거를 사용하여 기사 테이블 deleteinsert 다음에 함수를 호출하고 에 씁니다. 기사 즐겨찾기 테이블로 이동하세요. 대략 이렇습니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿