SQL 분 표, 라 이브 러 리 파 티 션, 읽 기와 쓰기 분리 및 동기 화
8111 단어 SQL
분 표 는 수직 분 표 와 수평 분 표 로 나 뉜 다.
1. 수직 분 표
수직 분 표 는 데이터베이스 디자인 의 문제 일 수 있 기 때문에 상대 적 으로 보기 드 물고 사용 되 지 않 는 다.만약 에 데이터베이스 에 표 의 일부 필드 가 거의 변경 되 지 않 지만 자주 조회 하 는데 일부 필드 의 데이터 가 자주 바 뀌 면 이런 디자인 은 같은 표 에 넣 으 면 합 리 적 이지 않 고 서로 영향 이 너무 크다.이미 상황 을 바 꾼 표 가 존재 할 때, 열 에 따라 표, 즉 수직 으로 나 누 는 것 을 고려 할 수 있다.
소스 시트 디자인 구조:
--
CREATE TABLE [dbo].[DemoTab](
[Guid] [uniqueidentifier] NOT NULL,
[UserName] [nvarchar](30) NOT NULL,
[Password] [nvarchar](30) NOT NULL,
[UserAccount] [varchar](30) NOT NULL,
[Amount] [numeric](18, 4) NULL,
CONSTRAINT [PK_DemoTab] PRIMARY KEY CLUSTERED ([Guid])
)
GO
ALTER TABLE [dbo].[DemoTab]
ADD CONSTRAINT [DF_DemoTab_Guid] DEFAULT (newsequentialid()) FOR [Guid]
GO
-- ( )
CREATE VIEW [dbo].[VDemoTab]
AS
SELECT [Guid],[UserName],[Password],[UserAccount],[Amount]
FROM [dbo].[DemoTab]
GO
주: 분 리 된 후 각 표 의 메 인 키 는 모두 같 고 분 리 된 시 계 는 규범화 되 었 습 니 다.
현재 빈번 한 필드 와 빈번 하지 않 은 필드 에 따라 두 장의 표를 뜯 습 니 다.
-- 【1】, " ", " "
CREATE TABLE [dbo].[DemoTab001](
[Guid] [uniqueidentifier] NOT NULL,
[UserName] [nvarchar](30) NOT NULL,
[Password] [nvarchar](30) NOT NULL,
CONSTRAINT [PK_DemoTab001] PRIMARY KEY CLUSTERED ([Guid])
)
GO
-- ,
--ALTER TABLE [dbo].[DemoTab001]
--ADD CONSTRAINT [DF_DemoTab001_Guid] DEFAULT (newsequentialid()) FOR [Guid]
--GO
-- 【2】," "
CREATE TABLE [dbo].[DemoTab002](
[Guid] [uniqueidentifier] NOT NULL,
[UserAccount] [varchar](30) NOT NULL,
[Amount] [numeric](18, 4) NULL,
CONSTRAINT [PK_DemoTab002] PRIMARY KEY CLUSTERED ([Guid])
)
GO
-- ,
--ALTER TABLE [dbo].[DemoTab002]
--ADD CONSTRAINT [DF_DemoTab002_Guid] DEFAULT (newsequentialid()) FOR [Guid]
--GO
-- ( , ON UPDATE CASCADE)
ALTER TABLE [dbo].[DemoTab002]
ADD CONSTRAINT [FK_DemoTab002_DemoTab001_Guid] FOREIGN KEY ([Guid])
REFERENCES [DemoTab001]([Guid]) ON UPDATE CASCADE ON DELETE CASCADE
GO
만약 에 이전에 단일 표 나 보기 조작 이 었 다 면 분 리 된 후에 논리 층 이 많이 바 뀌 었 을 것 입 니 다. 변경 을 최소 화하 기 위해 연합 보기 로 조작 할 수 있 습 니 다.어떻게 연결 하 는 지 는 개인 상황 에 따라 결정 된다.-- (INNER JOIN )
ALTER VIEW [dbo].[VDemoTab]
AS
SELECT T1.[Guid],T1.[UserName],T1.[Password],T2.[UserAccount],T2.[Amount]
FROM [dbo].[DemoTab001] T1 LEFT JOIN [dbo].[DemoTab002] T2 ON T1.[Guid]=T2.[Guid]
GO
이때 문제 가 발생 했 습 니 다. 시 계 를 DML 조작 해 야 합 니 다. insert, update, delete 는 어떻게 해결 합 니까?메 인 키 가 여러 시계 에 분산 되 어 있 고 똑 같 아야 하기 때 문 입 니 다!이 때 는 트리거 를 고려 해 일치 성 을 확보 할 수 밖 에 없 으 며, 트리거 는 보기 로 정의 되 며, 인 스 티 드 오 브 타 입의 트리거 를 사용 합 니 다.
-- insert
CREATE TRIGGER [dbo].[tgr_VDemoTab_insert]
ON [dbo].[VDemoTab]
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO [dbo].[DemoTab001]([Guid],[UserName],[Password])
SELECT [Guid],[UserName],[Password] FROM inserted;
INSERT INTO [dbo].[DemoTab002]([Guid],[UserAccount],[Amount])
SELECT [Guid],[UserAccount],[Amount] FROM inserted;
END
GO
-- update
CREATE TRIGGER [dbo].[tgr_VDemoTab_update]
ON [dbo].[VDemoTab]
INSTEAD OF UPDATE
AS
BEGIN
UPDATE T1 SET
T1.[UserName] = T2.[UserName],
T1.[Password] = T2.[Password]
FROM [dbo].[DemoTab001] AS T1, inserted AS T2 WHERE T1.[Guid] = T2.[Guid]
UPDATE T1 SET
T1.[UserAccount] = T2.[UserAccount],
T1.[Amount] = T2.[Amount]
FROM [dbo].[DemoTab002] AS T1, inserted AS T2 WHERE T1.[Guid] = T2.[Guid]
END
GO
보기 [VDmoTab] 기록 을 삭제 하고, 여러 테이블 과 관련 해 서 는 삭제 가 허용 되 지 않 으 므 로 '메 인 테이블' 기록 만 삭제 하면 되 며, 다른 테이블 은 직렬 로 삭 제 됩 니 다.
-- delete
CREATE TRIGGER [dbo].[tgr_VDemoTab_delete]
ON [dbo].[VDemoTab]
INSTEAD OF DELETE
AS
BEGIN
DELETE FROM [dbo].[DemoTab001]
WHERE [Guid] IN (SELECT [Guid] FROM deleted)
END
GO
디자인 이 거의 완성 되 었 으 니 지금 테스트 를 진행 합 니 다.INSERT INTO [dbo].[VDemoTab]([Guid],[UserName],[Password],[UserAccount],[Amount])
SELECT NEWID(),'user01','pw01','account01',100
UNION ALL
SELECT NEWID(),'user02','pw02','account02',99
UNION ALL
SELECT NEWID(),'user03','pw03','account03',0
GO
UPDATE [VDemoTab] SET [Password]='pw',[Amount]='10'
WHERE [Amount] >=0 AND [Amount]<100 AND [UserName] LIKE '%3'
GO
DELETE FROM [VDemoTab] WHERE [UserName] = 'user03'
GO
SELECT * FROM [dbo].[DemoTab001]
SELECT * FROM [dbo].[DemoTab002]
SELECT * FROM [dbo].[VDemoTab]
기본 조작 은 모두 정상 입 니 다!수직 분 표 완성!성능 이 어때요?
2. 수평 분 표
그 중의 한 열 에 있 는 데이터 값 범위 에 따라 각 구성원 표 간 에 데 이 터 를 나 누 어 표시 합 니 다.각 구성원 표 의 데이터 범 위 는 표 에 따라 열 에 따라 지정 한 CHECK 제약 조건 에서 정 의 됩 니 다.그리고 UNION ALL 을 사용 하여 선택 한 모든 구성원 표를 하나의 결과 집합 으로 조합 합 니 다.이 보기 의 SELECT 문 구 를 참조 하여 열 에 따라 검색 조건 을 지정 한 후, 검색 유 틸 리 티 는 CHECK 제약 정 의 를 사용 하여 어떤 구성원 표 가 해당 줄 을 포함 하 는 지 확인 합 니 다.
SqlServer 파 티 션 보기 수준 표 구현
2. 표 분할 (즉, 라 이브 러 리)
1. 수평 분할
그러나 파 티 션 시트 라면 표 데 이 터 는 지정 한 규칙 에 따라 서로 다른 파일 에 나 누 어 져 큰 데이터 파일 을 여러 개의 작은 파일 로 나 누고 이 작은 파일 들 을 서로 다른 디스크 에 두 고 여러 cpu 로 처리 할 수 있 습 니 다.이런 파일 의 크기 는 분할 에 따라 줄 어 들 고 하드웨어 시스템 의 강 화 를 받 아 자 연 스 럽 게 우리 가 데 이 터 를 조작 하 는 데 큰 유리 하 다.
따라서 빅 데이터 양의 데이터 시트 는 파 티 션 에 대한 수요 가 필요 합 니 다. select 효율 을 높 일 수 있 고 역사 데이터 에 대해 줄 을 통 해 압축 파일 을 구분 할 수 있 기 때 문 입 니 다.그러나 데이터 양 이 적은 데 이 터 는 이런 떠들썩 함 을 만 들 지 마라. 왜냐하면 표 분 구 는 데이터 베이스 에 불필요 한 비용 을 발생 시 키 고 성능 을 제외 하면 실현 대상 의 관리 비용 과 복잡성 을 증가 시 킬 수 있 기 때문이다.
SQL Server 테이블 파 티 션
SQL Server 파 티 션 테이블
2. 수직 파 티 션 (수직 라 이브 러 리 라 고도 함)
수직 분 고 는 업무 수요 에 따라 분 고 를 하 는 것 이다. 예 를 들 어 교육 시리즈 의 경우 정보, 과정, 사용자 (학생, 학교) 세 개의 데이터 베이스 로 나 눌 수 있다.예 를 들 어 전자상거래 의 경우 주문, 상품, 사용자 (업 체, 소비자) 세 개의 데이터 베이스 로 나 눌 수 있다.
3. 데이터베이스 읽 기와 쓰기 분리 와 데이터 동기 화
생산 환경 에서 우 리 는 자주 이런 상황 을 만 날 수 있다.
전단 의 oltp 업 무 는 매우 바 쁘 지만 이러한 운영 데이터 에 대해 olap 를 진행 해 야 합 니 다. 전단 의 정상 적 인 업무 에 영향 을 주지 않 기 위해 서 는 데이터 베 이 스 를 읽 기와 쓰기 로 분리 해 야 합 니 다.
여기 서 저 는 읽 기와 쓰기 가 분 리 될 수 있 는 몇 가지 방안 을 정리 하 겠 습 니 다. 여기 서 데이터 베 이 스 를 사용 할 수 있 는 지 를 고려 하지 않 고 읽 기와 쓰기 가 분 리 된 장면 만 을 대상 으로 합 니 다. 방안 자 체 는 우열 이 없고 업무 사용 장면 에 적합 한 지 만 볼 수 있 기 때문에 몇 가지 방안 의 특징 만 나열 하고 구체 적 인 문제 가 발생 할 때 자신의 수요 와 환경 을 종합 적 으로 고려 한 다음 에 취사선택 을 합 니 다.
읽 기와 쓰기 분리 방안
실시 간 동기 화
던 전 데 이 터 를 직접 읽 을 수 있 습 니까?
부본 수
최소 입도
던 전 색인 만 들 기
환경.
결점.
거울 상
예.
여부 (스냅 샷 을 켜 야 합 니 다. 읽 기 전용)
1
창고.
아니.
도 메 인 / 비 도 메 인 (인증서 사용)
높 은 안전 모드 에서 메 인 라 이브 러 리 성능 에 어느 정도 영향 을 미친다.
로그 배 송 (로그 전송)
아니.
네.
N
창고.
아니.
UNC 방식 접근 가능
던 전 라 이브 러 리 는 resostre 를 만 들 때 연 결 된 사용자 연결 을 끊 습 니 다. 일반적인 로그 백업 에 영향 을 줄 수 있 습 니 다.
구독 발표 (트 랜 잭 션 복사)
예.
예.
N
표 (조회)
예.
도 메 인 / 비 도 메 인
메 인 라 이브 러 리 에 대량의 DML 작업 이 있 을 때 배포 서버 에 어느 정도 영향 을 미 칠 수 있 고 구독 데이터 베 이 스 는 데이터 동기 화 지연 이 있 을 수 있 습 니 다.
always on
예.
네.
4(sql 2012) 8(sql 2014)
창고.
아니.
영역
비 도 메 인 환경 사용 불가
SQL Server 2012 의 AlwaysOn 시도
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redash를 사용할 때 몰랐던 SQL을 쓰는 법을 배웠습니다.최근 redash에서 sql을 쓸 기회가 많고, 이런 쓰는 방법이 있었는지와 sql에 대해 공부를 다시하고 있기 때문에 배운 것을 여기에 씁니다. Redash란? 월별로 데이터를 표시하고 싶습니다 주별로 데이터를 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.