'Tech'에 해당되는 글 4건

  1. 2012.02.19 PHP Mysql query 자동 주석 함수. by heechul
  2. 2008.09.10 sphinx 업데이트 문제 관련 메모 (2) by heechul
  3. 2008.08.07 픽짜 업데이트 소식. (6) by heechul
  4. 2008.08.03 제네시스와 소통하기 (4) by heechul

Slow query 를 잡는 것은 아주 필수적이고 당연한 일인데,
이게 db 서버도 많아지고, web 서버도 많아지면,
각 query 가 어디서 나오고 누가 만들었는지 알기도 쉽지 않습니다.

따라서  query 안에 주석을 넣어주면 참 좋은데,
이미 프로그램이 모두 개발된 상태에서 일일히 넣어주기는 어렵습니다. (라고 쓰고 귀찮다 라고 읽습니다) 

외국 사례를 좀 찾아보면 php mysql 드라이버를 좀 고쳐서 로그를 남기기도 하던데,
웹 서버 로그를 뒤지기도 힘든 일이잖아요. 

그래서 아무튼 자동 주석함수를 만들었습니다. db query 를 위해
라이브러리를 쓰신다면, 거기 적어주시면 좋고, 아니면 php.ini 에
auto_prepend_file 로 다음의 파일을 모든 php 에 자동으로 include 해버려도 좋습니다.

( 동작을 위해서는 apd 모듈이 필요합니다)

<?
/*
* 2012.2.17. 최희철 ( ironyjk@.... )
* Slow query 추적을 위한 mysql_query 함수 override 및 주석 추가
*/
 


if (!function_exists("mysql_commented_query"))
{
       function mysql_commented_query($query,$dblink = null, $writer="")
       {
   $comment = php_uname('n');
   $backtrace = debug_backtrace();

   if (!empty($backtrace))
$comment .= " " . $backtrace[1]['file'] . " (" . filemtime($backtrace[1]['file']) .   ") : " . $backtrace[1]['line'] ;

   if (!empty($writer))
       $comment .= " " . $writer;

   $query = "/* " . $comment . " */ " . $query ;  // 호스트명, 파일명, line no, 작성자 순으로 query 에 주석 추가

return is_null($dblink)? mysql_old_query ( $query ) : mysql_old_query ( $query , $dblink);

       }
}

if ( !function_exists("mysql_old_query") )
{
       rename_function('mysql_query','mysql_old_query');
}       


if (!function_exists("mysql_query"))
{

       override_function('mysql_query','$query,$dblink=null,$writer=""','return mysql_commented_query($query,$dblink,$writer);');
} ?> 

 
위의 작성시에는 엠모사 모사장님과 모사의 모본부장님 두분이 도움을 주셨다는 걸 밝혀둡니다. (읽으실리는 없겠지만.)

그럼.  

(stackoverflow 에 댓글로 달아두었어야 하는 내용일까요. 아무튼 stackoverflow 도움을 참 많이 받는데, 기여는...)
 
p.s rename_function 의 경우에는 한번 적용후 계속 적용되어서 업데이트 했습니다. 
신고
Creative Commons License
Creative Commons License
Posted by heechul
이전 블로그에 검색엔진인 sphinx 관련된 글을 몇 개 적은 적이 있는데
그에 관련된 문의가 오랜만에 와서, 답장한 내용을 오려 붙여 옮깁니다.

국내 사용자가 많이 없지만 혹시라도 검색하실 분들을 위해서요.
정리가 안 된 내용이고, sphinx 와 관련 없는 분들은 이해하지 못할 내용이니
읽지 않으셔도 됩니다

(초략)
아무튼, 도움이 되실지 모르겠지만 예전에 저희가 고민해서 구축한 시스템에 대해서
살짝 설명드리겠습니다.
 
저희는 db 에 updated 라는 필드를 만들었습니다.
 
정상 인덱스를 뜻하는 normal, 업데이트되어서 델타인덱스에서 인덱스해야 할  updated ,
수정되어서 인덱스 하면 안되는 beUpdated .. 이렇게 세가지 상태로 구분하였습니다.
 
update 필드는 당연히 스핑크스의 attribute 로 지정해두었구요
 
레코드가 수정될 때는 항상 DB 와 검색 인덱스의 attribute 를 같이 beUpdated 로 수정해줍니다.
 
검색할 때는 아래와 같이 filter 를 사용해서 attribute 중 normal 만을 골라서 검색에 사용하시면 수정된 레코드는 실시간으로 제외되구요.
 - $cl->SetFilter("updated",array(0));  
 
수정된 레코드는 델타 인덱싱시에 반영되는데, 델타 인덱싱시의 sql_query 에는 normal 의 상수값을 updated 로 반환하는 꽁수를 사용하였습니다.
- SELECT  ...... #{@nUpdatedType['normal']} as updated from #{tablename}
 
실제 필드 값은 메인 인덱스의 rebuilding 시에 sql_query_pre 문을 통해서 업데이트 되게 되구요..
 
아마 더 좋은 방법이 많을 것이기 때문에 세세한 내용은 줄이도록 하겠습니다.
 
다만, 제 나름대로의 결론은 sphinx의 attribute 는 변경할 수 있고, 검색에도 사용할 수 있다는 점과
인덱스시의 sql_query 및 sql_query_pre 를 유연하게 사용하면, 여러 상황에
대처할 수 있는 검색엔진을 만들 수 있다는 점입니다.

(종략)
신고
Creative Commons License
Creative Commons License
Posted by heechul

픽짜 업데이트 소식.

Tech : 2008.08.07 15:21
매주 목요일에는 픽짜 (http://www.piczza.com)가 업데이트 됩니다. 오늘 업데이트에도
맥에서 윈도우로 파일 전송시 호환성 확장을 위한 패치등
여러가지가 업데이트 되었는데요.

특히 그 중에 제가 가장 중요하게 생각하는 건,
바로, 파일 없이 보내기 기능입니다. 자 보실까요?

사용자 삽입 이미지

이렇게 주소와 내용만 적어서 보내면, 아래처럼 메일로 해당 내용이 도착합니다.

사용자 삽입 이미지

아주 멋지죠? 그럼 앞으로도 즐거운 파일 전송 픽짜를 많이 애용해....

Q: 어이 거기 -_-;, 도대체 파일 전송에서 파일을 빼면, 왜 픽짜를 써야 하는 거죠?
A: 그게... 저기... 편하기도 하고... (얼버무린다) 아무튼 픽짜를 만들어 놨더니, 사용자분들이 아무 파일이나 넣고, 메일 보내는 데 많이 쓰시더라구요.

Q: 그게 메일 보다 더 편한 이유가 있나요?
A: 음. 프로그램이 단순하고 빨리 뜨거든요. 게다가 제목도 안적어도 되고...

Q: 그러면 메신저를 쓰면 되잖아요?
A: 메신저로 말걸면, 인사도 해야하고, 친구 신청이 안되어 있으면 친구 신청도 해야 하잖아요. 근데 픽짜는 메모나 메시지만 간단히 보내버리는거죠.

Q: 혹시 이것도 돈을 받으실 생각인가요? 아니, 픽짜는 웹하드인줄 알았더니 메일인것 같기도 하고, 이런 서비스를 왜 하는거죠?
A: 물론 무료이구요, 저희는 다른 서비스의 형식에 얽매이지 않고, 누구보다도 편리한 전송 방법을 찾기 위해 노력하고 있습니다.

Q: 이거외에 다른 기능을 준비중이신게 있나요?
A: 물론 많은 기능을 준비중입니다. 동시에 편리함을 잃지 않도록 하기 위해서 고민중이구요. 예를 들면, 산간오지에 메시지를 전송하기 위해서, 비둘기를 사용하는 방법 까지도 진지하게 고려하고 있습니다. (이럴 때 구글의 선례가 많은 도움이 되더라구요 ;;)





신고
Creative Commons License
Creative Commons License
Posted by heechul

제네시스와 소통하기

Tech : 2008.08.03 22:27
현대의 야심작이라고 하는 제네시스를 타보았습니다. 그런데. 멋지고 깔끔하게 생긴
녀석이 말을 또이 또이 못하더군요.

올라타서 움직여 볼까 하고 엑셀을 밟았더니 이 녀석이 말합니다.
 
사용자 삽입 이미지

'자동 해제 조건이 아닙니다. EPB 스위치로 수동해제 가능합니다.'

잠깐 땀이 납니다. 차가 안 움직입니다.
머리를 굴리면서 생각해봤더니, EPB 는 Electronic Parking Brake 같았습니다.
열심히 찾아보니 스위치도 있더군요.

스위치를 한번 눌러봅니다. 여전히 같은 말을 반복합니다.
움직일 재간이 없습니다. 인간이라면 한 마디 더 물어보면 되지만,
자동차라서 더 물어볼 방법이 없습니다.

결국 메뉴얼을 꺼내서, 저 문장이 무슨 의미인지 번역해 봅니다.

제가 알아들을 수 있는 말로 번역하니, 이렇게 되더군요.

'안전벨트를 매주세요'

......

물론, 벨트도 매지 않고 운전하려고 했던 제 버릇은 나쁜 겁니다.

하지만, 그걸 제대로 지적해주지 못하는 이 경고 시스템은
참 이상한 겁니다.
(사족으로, 다른 차들은 벨트를 매지 않고 어느 정도 움직이기
시작하면 경고음을 발생시키기도 하던데 말이죠.
차를 빼주거나, 세차를 하거나 할 때도 차를 움직이려고,
안전벨트를 매야 하는 것은 좀 불편한 듯 합니다)

그 외에, 음성인식 기능등도 상당히 불편하더군요.

이 정도라면, 매뉴얼 읽기 힘드신, 나이 드신 분들께,
섣불리 추천드리기 어려울 듯 합니다.
(최저사양이라면 좀 다를까요?)

현대가 좋은 차를 만들기 위해 열심히 노력한 것은 알겠지만,
사소한 사용자 경험을 소홀히 한다면, 큰 점수차이가 나버립니다.

부디 다음번에는, 좀 더 말이 통하는 차를 타보고 싶군요.

신고
Creative Commons License
Creative Commons License
Posted by heechul

티스토리 툴바