DB부하 때문에 포인트내역에 기록하지 않고 포인트를 적립하려면요.... > 그누3질답

그누3질답

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점 적립되게요...
꼭 좀 도와주세요... 부탁드리겠습니다(__)

댓글 전체

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);
    }
}
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하면 되지 않을까요?
전체 9,564
그누3질답 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT