database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
ㆍ자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
자유게시판 자유게시판 4662 게시물 읽기
 
No. 4662
어리석은 질문 하나 하려고 합니다. (db관련)
작성자
Coral
작성일
2005-03-02 16:04ⓒ
2005-03-02 16:05ⓜ
조회수
4,492

한동안 코빼기도 안 보이다가 아쉬울때만 들어오는것 같아 죄송합니다... 쩝...

 

 

회사에서 반쯤은 개인 프로젝트로 하나를 만들고 있습니다.

nms관련이고, 한번 폴링 할때마다 대략 11~13만 건이 추가됩니다.

현재 그걸 하루 2회 하고 있습니다. 결국은 보름이면 얼추 500만개가 되더군요.

- 하루 2회 하는 이유는 현재 제가 임의로 돌릴 수 있는 서버의 능력상 더 이상 자주 할 방법이 없어서입니다.

 

데이터는 mac과 ip 각 1개씩, text 필드 하나, 그리고 정수형 숫자 필드가 10여개 입니다.

회사 그만두기 전에 인터페이스 까지는 안 만들어놔도 골격과 씀임새가 있다는 것까지는 증명을 하고 싶은데...

상황을 보니 적어도 2달치의 데이터가 축적되지 않으면 필요불가결한 상황을 만들기 힘들것 같더군요.

(대략 2천만개)

 

쿼리의 형태는 주로 group 이며 밑에 것 정도가 가장 복잡한 것 같습니다.

DB는 PostgreSQL 입니다.

$sql = "SELECT name,channel_down,count(name),cmts " .

"FROM (SELECT * " .

"FROM cm_log, cmts " .

"WHERE cm_log.cmts=cmts.seq and cm_log.c_date={$da} AND cmts={$cmts}) AS a ".

"GROUP BY name, cmts, channel_down " .

"ORDER BY channel_down";

 

 

대략 어느 정도의 서버가 필요 할까요?

- 덤으로 위에 쿼리를 개선할 방법도...

이 글에 대한 댓글이 총 4건 있습니다.

현호형 안녕하세요~

댓글이 없길래 부끄러움을 무릅쓰고 첫 빠따로 적어 봅니다.

 

(업무 로직이나 테이블 구조/관계, 인덱스 등등의 정보가 필요하긴 하지만 감으로 판단을 해 보자면)

PostgreSQL은 안 써 봤지만, 쿼리를 개선한다면, 우선 GROUP BY를 없애야 할 것이라 생각듭니다. GROUP BY가 편하긴 하지만, 작동 방식 상 레코드 수가 많으면 속도가 영 꽝이거든요.

쉽게 예를 들어, 일일 방문자 수가 500만건 있을 때, 날짜별 방문자 수를 계산한다고 날짜별로 GROUP BY를 쓰면 오래 걸릴 것입니다.

 

이때,1) WHERE에 1일부터 31일까지 날짜를 주고 COUNT(*)를 하거나,

아니면,2) IF-ELSE에 SUM()을 두거나, 아님 아예 방문자가 있는 날짜만 따로 메타 테이블(?)혹은 프로파일 테이블(?)에 저장해 두고, Loop를 돌면서 해당 날짜의 COUNT(*)를 하는 방법이 있는데요.

 

방법에 따라 최대 쿼리를 31번 날릴 수도 있지만, 속도는 GROUP BY 쓰는 것 보단 빠르죠.

 

날짜야 값이 1일부터 31일까지니깐 쿼리 짜기는 쉬워지는데요. 형의 경우 제가 name, cmts, channel_down이 어떤 값인지 모르기 때문에 뭐라 드릴 말씀은 없구요.

 

암튼 프로그래밍이 귀찮아지더라도 GROUP BY 없애시고, 인덱스를 태워서 COUNT(*)를 하신 뒤에, channel_down에 대한 정렬은 클라이언트 프로그램에서 처리하는게 좋을 듯 싶습니다.

 

이상 저의 소견이었구요.

MySQL은 GROUP BY 성능이 안 좋은데 PostgreSQL은 좋다면 뭐 드릴 말씀이 없습니다.^^;

 

다른 분들도 의견 개진 부탁.

허정수(wertyu)님이 2005-03-03 01:34에 작성한 댓글입니다.
이 댓글은 2005-03-03 01:36에 마지막으로 수정되었습니다.

고마우이...

오랜만이군.

 

그런데 '일체'손을 대선 안되는 상황이 발생...

- 회사에서 요구하는 퇴직원을 보니 다른곳도 그런지 모르겠지만 기간도 없이 하도 일방적이라 남은 기간은 철저하게 수동적으로 일해야만 무병장수에 도움이 되겠더라구.

Coral님이 2005-03-03 10:16에 작성한 댓글입니다. Edit

위 글을 보니 코랄이 누군가했더니 현호님이군요. 잘 보이지 않으니 누군디지도 까먹는군요.

문태준(taejun)님이 2005-03-06 11:10에 작성한 댓글입니다.

털썩...

 

반성 포인트를 +15 획득했습니다.

명성 포인트를 -120 획득했습니다.

Coral님이 2005-03-07 01:16에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
4666자신의 별자리 알아보셔요. [3]
김칠봉
2005-03-02
5148
4665헉... 젠장.. 중복출금됐다.. [3]
이경환
2005-03-02
4744
4664이번 모임사진이 언제쯤 올라올까요 (압박용) [4]
이창민
2005-03-02
4806
4662어리석은 질문 하나 하려고 합니다. (db관련) [4]
Coral
2005-03-02
4492
4661DB 가 뭔지도 모르는 사람 ^^ [3]
최근섭
2005-03-02
4660
4660아하하... 저의 글이 도움이 될런지... [2]
이경환
2005-03-02
4396
4659디비....라는게.. [2]
천영철
2005-03-01
4459
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다