안녕하세요.
이번에는 약간 다른 문제를 질문드리려고 하는데요.
현재 상황부터 말씀드릴께요. 지금 DB server에는 HEAP이라고 하는 table이 하나 있습니다. 다음과 같이 구성되어 있고요.
INT seq1 | INT pos1 | INT seq2 | INT pos2 | FLOAT weight
그리고 parallel하게 약 100여개의 컴퓨터에서 동시에 이 한 테이블에 데이터를 쓰고 있습니다. 문제는 제 생각에 여러곳에서 동시에 DB의 한 테이블에 쓰려고 하니 당연히 Lock이 걸릴것이고 이것이 무시못할 정도의 performance저하를 가져 올것 같습니다.
그래서, 생각해 본것이 HEAP table을 parallel하게 돌고 있는 컴퓨터 수만큼 (즉, 100개)를 만듭니다. 그뒤 각각 parallel하게 돌고 있는 컴퓨터에서는 각각 자신에게 할당된 Table에 data를 씁니다. (자신에게 할당된 테이블에만 데이터를 쓰니 lock도 필요없고 parallel하게 쓸 수 있을것 같습니다.) 그 뒤 100여개의 HEAP table을 합쳐서 하나의 큰 Heap Table을 만듭니다.
최종적으로 하나의 TABLE을 만들어야 하는 이유는 나중에 select해서 불러올때 weight에 따라 정렬되서 불러야 하기 때문입니다.
제 질문은
(1) 위와 같이 HEAP을 100여개로 나눈뒤 나중에 하나로 합치는것이 원래 HEAP table이 하나 있고 그곳에 계속 data를 쓰는것보다 더 효율적일까요?
(2) 후자의 방법을 하더라도, 100여개의 HEAP table에 있는 data (data수 많습니다.)를 하나로 합칠때 꽤 시간이 걸릴것 같은데요. 어떨까요? postgresql db내부적으로 이것을 어떻게 처리할 지 몰라서 가늠할 수 가 없네요. 그리고 결정적으로 어떻게 (어떤 명령어로) 이것을 (100개의 table을 하나로 합치는것) 효율적으로 할 수 있을까요?
만약 더 좋은 방법이 있다면 조언부탁드립니다.
감사합니다.
|