DB부하 때문에 포인트내역에 기록하지 않고 포인트를 적립하려면요.... 정보
DB부하 때문에 포인트내역에 기록하지 않고 포인트를 적립하려면요....본문
그러니까 글을 읽을 때 읽는이의 포인트는 2포인트 삭감되고,
그 글을 쓴 사람의 포인트는 1포인트 적립되는데요.
아래처럼 했더니 제대로 돌아가긴 하는데 DB부하가 자꾸 걸린다고 하네요(1초당 10~15건 정도가 기록이 되고 있거든요..)
그것 때문인지 코멘트를 쓰거나하면 글이 3~5개씩 동시에 등록이 되고... ㅠ.ㅜ;;
----------------------------------------------------------------
<?
$point = 2;
$avgpoint = 1;
// 다운로드한 회원은 포인트가 줄고, 글쓴 회원은 포인트가 늘어남
if ($write[mb_id])
$mb = get_member($write[mb_id]);
$ss_name = "ss_point_{$bo_table}_{$wr_id}";
if ($HTTP_SESSION_VARS[$ss_name] == false && $member[mb_id] != $mb[mb_id]) {
// 글읽는 회원의 포인트는 빼고
$write[wr_subject] = addslashes($write[wr_subject]);
if ($member[mb_id]) {
insert_point($member[mb_id], (-1) * $point, "$write[wr_subject] - 글읽기");
}
// 원글의 회원 포인트에 더하고
if ($mb[mb_id]) {
$member[mb_point]=($member[mb_point]-$cost);
insert_point($mb[mb_id], $avgpoint, "획득포인트");
}
session_register($ss_name);
$$ss_name = $HTTP_SESSION_VARS[$ss_name] = TRUE;
}
?>
-----------------------------------------------------------------------------
그래서 생각해낸 방법이
포인트내역에서 글 쓴 사람의 포인트가 1포인트씩 증가는 하지만 포인트내역에서는 기록을 하지않으려고 하거든요(그러면 지금의 50%만 기록이 될것이라는 계산으로....)
다시말해서
읽는 사람은 자신의 포인트내역에 [글제목 - 글읽기]라고 지금처럼 감점내역을 기록하고,
글 쓴 사람은 그냥 포인트만 1포인트 적립해주려구요.
아래가 문제의 소스인데 어떻게 수정해 주어야 할까요..
// 원글의 회원 포인트에 더하고
if ($mb[mb_id]) {
$member[mb_point]=($member[mb_point]-$cost);
insert_point($mb[mb_id], $avgpoint, "획득포인트");
}
이 부분을 기록하지 않고 그냥 포인트만 1점 적립되게요...
꼭 좀 도와주세요... 부탁드리겠습니다(__)
그 글을 쓴 사람의 포인트는 1포인트 적립되는데요.
아래처럼 했더니 제대로 돌아가긴 하는데 DB부하가 자꾸 걸린다고 하네요(1초당 10~15건 정도가 기록이 되고 있거든요..)
그것 때문인지 코멘트를 쓰거나하면 글이 3~5개씩 동시에 등록이 되고... ㅠ.ㅜ;;
----------------------------------------------------------------
<?
$point = 2;
$avgpoint = 1;
// 다운로드한 회원은 포인트가 줄고, 글쓴 회원은 포인트가 늘어남
if ($write[mb_id])
$mb = get_member($write[mb_id]);
$ss_name = "ss_point_{$bo_table}_{$wr_id}";
if ($HTTP_SESSION_VARS[$ss_name] == false && $member[mb_id] != $mb[mb_id]) {
// 글읽는 회원의 포인트는 빼고
$write[wr_subject] = addslashes($write[wr_subject]);
if ($member[mb_id]) {
insert_point($member[mb_id], (-1) * $point, "$write[wr_subject] - 글읽기");
}
// 원글의 회원 포인트에 더하고
if ($mb[mb_id]) {
$member[mb_point]=($member[mb_point]-$cost);
insert_point($mb[mb_id], $avgpoint, "획득포인트");
}
session_register($ss_name);
$$ss_name = $HTTP_SESSION_VARS[$ss_name] = TRUE;
}
?>
-----------------------------------------------------------------------------
그래서 생각해낸 방법이
포인트내역에서 글 쓴 사람의 포인트가 1포인트씩 증가는 하지만 포인트내역에서는 기록을 하지않으려고 하거든요(그러면 지금의 50%만 기록이 될것이라는 계산으로....)
다시말해서
읽는 사람은 자신의 포인트내역에 [글제목 - 글읽기]라고 지금처럼 감점내역을 기록하고,
글 쓴 사람은 그냥 포인트만 1포인트 적립해주려구요.
아래가 문제의 소스인데 어떻게 수정해 주어야 할까요..
// 원글의 회원 포인트에 더하고
if ($mb[mb_id]) {
$member[mb_point]=($member[mb_point]-$cost);
insert_point($mb[mb_id], $avgpoint, "획득포인트");
}
이 부분을 기록하지 않고 그냥 포인트만 1점 적립되게요...
꼭 좀 도와주세요... 부탁드리겠습니다(__)
댓글 전체

lib/gnuboard.lib.php <<==요파일 421번째 줄에 보시면 입력부분이 있습니다.
po_content = '$content', <<==내용이 들어가죠 이부분을 공백으로 하세요
function insert_point($mb_id, $point, $content='')
{
global $cfg, $default, $today, $now;
// 포인트 사용을 하지 않는다면 return
if (!$default[de_use_point]) return;
// 포인트가 없다면 업데이트 할 필요 없음
if ($point == 0) { return; }
// 회원아이디가 없다면 업데이트 할 필요 없음
if ($mb_id == "") { return; }
$sql = " select mb_today_point from $cfg[table_member]
where mb_id = '$mb_id'
and TO_DAYS('$today') - TO_DAYS(mb_today_login) = 0 ";
$row = sql_fetch($sql);
$today_point = $row[mb_today_point];
// 하루 누적 포인트보다 작거나 무한대 누적이라면(설정값이 0이라면)
if ($today_point < $default[de_day_max_point] || $default[de_day_max_point] == 0) {
// 포인트 건별 생성
$sql = " insert $cfg[table_point]
set mb_id = '$mb_id',
po_datetime = '$now',
po_content = '', <<===$content 값을 제거
po_point = '$point' ";
sql_query($sql);
// 포인트 내역의 합
$sql = " select sum(po_point) from $cfg[table_point] where mb_id = '$mb_id' ";
$row = sql_fetch($sql);
// 포인트 누적
$sql = " update $cfg[table_member]
set mb_today_point = mb_today_point + ($point),
mb_point = '$row[0]'
where mb_id = '$mb_id' ";
sql_query($sql);
}
}
po_content = '$content', <<==내용이 들어가죠 이부분을 공백으로 하세요
function insert_point($mb_id, $point, $content='')
{
global $cfg, $default, $today, $now;
// 포인트 사용을 하지 않는다면 return
if (!$default[de_use_point]) return;
// 포인트가 없다면 업데이트 할 필요 없음
if ($point == 0) { return; }
// 회원아이디가 없다면 업데이트 할 필요 없음
if ($mb_id == "") { return; }
$sql = " select mb_today_point from $cfg[table_member]
where mb_id = '$mb_id'
and TO_DAYS('$today') - TO_DAYS(mb_today_login) = 0 ";
$row = sql_fetch($sql);
$today_point = $row[mb_today_point];
// 하루 누적 포인트보다 작거나 무한대 누적이라면(설정값이 0이라면)
if ($today_point < $default[de_day_max_point] || $default[de_day_max_point] == 0) {
// 포인트 건별 생성
$sql = " insert $cfg[table_point]
set mb_id = '$mb_id',
po_datetime = '$now',
po_content = '', <<===$content 값을 제거
po_point = '$point' ";
sql_query($sql);
// 포인트 내역의 합
$sql = " select sum(po_point) from $cfg[table_point] where mb_id = '$mb_id' ";
$row = sql_fetch($sql);
// 포인트 누적
$sql = " update $cfg[table_member]
set mb_today_point = mb_today_point + ($point),
mb_point = '$row[0]'
where mb_id = '$mb_id' ";
sql_query($sql);
}
}
point table에 느린 insert하는 대신에
member table에서 빠른 update하는 방법을 쓰세요.
mb_1부터 mb_10까지 있으니 하나를(이를 mb_p라고 하면) 정수로 alert table하고
update member set mb_p=mb_p+1 where mb_id='$writer_id'
그리고 로그인 할 때마다 자신의 mb_p에 있는 것을 point table에 insert하면 되지 않을까요?
member table에서 빠른 update하는 방법을 쓰세요.
mb_1부터 mb_10까지 있으니 하나를(이를 mb_p라고 하면) 정수로 alert table하고
update member set mb_p=mb_p+1 where mb_id='$writer_id'
그리고 로그인 할 때마다 자신의 mb_p에 있는 것을 point table에 insert하면 되지 않을까요?