묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
코멘트 테이블 구조에 대해서 질문
2011.04.26 10:20
안녕하세요.
DB 마이그레이션을 준비하고 있는데요, 데이터가 수십만건인데다가 이미 부여된 고유번호(document_srl)을 바꾸고 싶지 않아서, XML migration tool은 쓰기가 곤란한 상황입니다.
그래서 DB 구조를 알아서 직접 집어넣으려고 하는데, xe_comments와 xe_comments_list의 구조가 눈에 잘 들어오지 않네요...
comments_list 테이블의 head, arrange값을 어떻게 줘야 하는지 잘 모르겠어요. 이 값을 바꾸니까 코멘트의 계층 구조가 엉망진창이 되는 걸로 봐서 코멘트 출력 순서하고 관련이 있는 것 같은데 값을 구하는 공식이라도 있나요? 검색해보니 list_order는 구하는 공식이 있던데요^^*
그리고 document_srl이 이미 정해져 있는 경우에, comment_srl은 별도로 아무렇게나 부여하면 되는지, 아니면 document_srl에 따라서 comment_srl 값도 변하는지 알고 싶습니다. 현재 document_srl값은 1번 글부터 8자리 이상으로 부여되어 있습니다(예: 12345678).
DB 마이그레이션을 준비하고 있는데요, 데이터가 수십만건인데다가 이미 부여된 고유번호(document_srl)을 바꾸고 싶지 않아서, XML migration tool은 쓰기가 곤란한 상황입니다.
그래서 DB 구조를 알아서 직접 집어넣으려고 하는데, xe_comments와 xe_comments_list의 구조가 눈에 잘 들어오지 않네요...
comments_list 테이블의 head, arrange값을 어떻게 줘야 하는지 잘 모르겠어요. 이 값을 바꾸니까 코멘트의 계층 구조가 엉망진창이 되는 걸로 봐서 코멘트 출력 순서하고 관련이 있는 것 같은데 값을 구하는 공식이라도 있나요? 검색해보니 list_order는 구하는 공식이 있던데요^^*
그리고 document_srl이 이미 정해져 있는 경우에, comment_srl은 별도로 아무렇게나 부여하면 되는지, 아니면 document_srl에 따라서 comment_srl 값도 변하는지 알고 싶습니다. 현재 document_srl값은 1번 글부터 8자리 이상으로 부여되어 있습니다(예: 12345678).
mysql> desc xe_comments;
+----------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| comment_srl | bigint(11) | NO | PRI | NULL | |
| module_srl | bigint(11) | NO | MUL | 0 | |
| document_srl | bigint(11) | NO | MUL | 0 | |
| parent_srl | bigint(11) | NO | | 0 | |
| is_secret | char(1) | NO | | N | |
| content | longtext | NO | | NULL | |
| voted_count | bigint(11) | NO | MUL | 0 | |
| blamed_count | bigint(11) | NO | MUL | 0 | |
| notify_message | char(1) | NO | | N | |
| password | varchar(60) | YES | | NULL | |
| user_id | varchar(80) | YES | | NULL | |
| user_name | varchar(80) | NO | | NULL | |
| nick_name | varchar(80) | NO | | NULL | |
| member_srl | bigint(11) | NO | MUL | NULL | |
| email_address | varchar(250) | NO | | NULL | |
| homepage | varchar(250) | NO | | NULL | |
| uploaded_count | bigint(11) | NO | MUL | 0 | |
| regdate | varchar(14) | YES | MUL | NULL | |
| last_update | varchar(14) | YES | MUL | NULL | |
| ipaddress | varchar(128) | NO | MUL | NULL | |
| list_order | bigint(11) | NO | MUL | NULL | |
+----------------+--------------+------+-----+---------+-------+
21 rows in set (0.01 sec)
mysql> desc xe_comments_list;+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| comment_srl | bigint(11) | NO | PRI | NULL | |
| document_srl | bigint(11) | NO | MUL | 0 | |
| head | bigint(11) | NO | | 0 | |
| arrange | bigint(11) | NO | | 0 | |
| module_srl | bigint(11) | NO | MUL | 0 | |
| regdate | varchar(14) | YES | | NULL | |
| depth | bigint(11) | NO | | 0 | |
+--------------+-------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
상황 : 데이터는 글만 수십만건이고 코멘트까지 더하면 수백만 건으로 추정됨. 글의 고유번호(document_srl)는 이미 부여되어 있으나 코멘트는 고유번호를 부여해주어야 함. 코멘트는 계층 구조를 갖고 있음(depth값이 있음).
p.s. 굳이 직접 DB에 입력하는 방법이 아니더라도 다른 방법이 있다면 소개 부탁드려요. 예를 들어서, xxx.php파일을 인클루드하고 func_xxx()를 호출해서 입력하는 방법이 있을 것 같은데 잘 모르겠네요^^;;
상황 : 데이터는 글만 수십만건이고 코멘트까지 더하면 수백만 건으로 추정됨. 글의 고유번호(document_srl)는 이미 부여되어 있으나 코멘트는 고유번호를 부여해주어야 함. 코멘트는 계층 구조를 갖고 있음(depth값이 있음).
p.s. 굳이 직접 DB에 입력하는 방법이 아니더라도 다른 방법이 있다면 소개 부탁드려요. 예를 들어서, xxx.php파일을 인클루드하고 func_xxx()를 호출해서 입력하는 방법이 있을 것 같은데 잘 모르겠네요^^;;
태그 연관 글
- [2018/02/12] 묻고답하기 레이아웃 테이블 여백(공백) 문제
- [2017/10/29] 묻고답하기 Cafe24 데이터 백업 및 이전방법 *1
- [2017/08/08] 묻고답하기 시놀로지 XE 설치시 DB 연결 실패 *4
- [2016/03/24] 묻고답하기 폴더안 txt 문서를 php explode 하여 mysql 에 넣는 과정이 안됩니다ㅠㅠ
- [2016/02/25] 묻고답하기 그누보드5 -> XE로 데이터(db)이전 *5
댓글 2
-
마일드^^
2011.04.26 10:29
-
pico
2011.04.26 11:23
감사합니다. 대충 모양은 만들 수 있을 것 같네요^^ -
pico
2011.04.26 11:22
자문자답
※ depth가 0인 최상위 부모 코멘트들을 '시조'라고 부를게요. 최상위 코멘트는 한 개일 수도, 여러개일 수도 있겠죠.
### head 값 ###
head 값은 시조의 comment_srl 값인 것 같습니다. 하위 코멘트가 더 생기거나 없어져도 값이 변하지 않네요.
### arrange 값 ###
arrange 값이 문제인데...
시조들의 arrange 값으로 자기 자신의 comment_srl 값이 부여되네요.
하위 코멘트들의 arrange 값은 무조건 한 단계 위 코멘트의 arrange 값보다 큽니다. 또한 같은 depth 이면서 더 위에 나와야 할 코멘트(먼저 쓴 코멘트)는 나중에 쓴 코멘트보다 arrange 값이 작습니다. 즉 arrange 값이 크면 클수록 코멘트는 아래에 위치하게 됩니다.
그러면 차례차례 코멘트를 다는 상황이 아니라, 이미 코멘트 트리가 있는 상황에서 중간 코멘트에 코멘트를 달 경우 arrange 값은 어떻게 되느냐... 시조 코멘트를 기준으로, 새로 생긴 코멘트보다 아래에 있는 코멘트들의 arrange값이 일제히 증가합니다. 그래야 중간에 코멘트가 들어가고 원래 있던 코멘트들이 한칸씩 아래로 이동하겠죠.
여기까지는 제 관찰 결과이고, 정확하게 comment_srl 이나 arrange 값을 생성하는 공식은 잘 모르겠네요. arrange 값은 단순히 1씩 증가하는게 아니라 2의 배수로 증가하는 것 같은데 아마 퍼포먼스를 위해서 튜닝되어 있는 것 갈습니다. 중간에 코멘트를 달 때 아래 코멘트의 arrange 값을 일제히 다 올려줘야 하니까 이미 코멘트와 코멘트 사이 arrange 값의 gap이 존재한다면 아래 코멘트의 arrange 값을 증가시키지 않아도 정렬이 되니까요.
이런 구조가 문서화되어 있으면 좋을 텐데, 찾아볼 수가 없네요...ㅠㅠ 그럼 누군가에게 도움이 되기를 바라며 이만.
구 제로보드 가 arrange 가 댓글의 depth와 관련되어있던거같은데, head와 arrange 두개가 합쳐서 트리구조를 만드는걸로 알고있거든요.
저 필드가 두개인게 tree 를 표현할려고 두개가 나온거에요.. 몇번 값 집어넣어보고 경우에 따라 어떻게 값이 바뀌는지 육안으로 확인하면 될듯 . 시뮬레이션이 최고죠.