2010-12-20 2 views
1

QSqlTableModel/QSqlDatabase/etc를 통해 Qt를 사용하여 MySQL 데이터베이스에 연결합니다.이 질문이 더 일반적이지만.Qt/QSqlTableModel을 통한 MySQL 데이터베이스 폴링

"실시간 데이터베이스 테이블보기"를 얻는 가장 좋은 방법은 무엇입니까? 한 가지 옵션은 QSqlTableModel에서 select() 메서드를 반복적으로 호출하여 전체 테이블을 지속적으로 폴링하는 것입니다. 이것은 비효율적 인 것 같습니다 (매번 MySQL에서 Qt로 전달되는 전체 테이블입니까?)

또 다른 옵션은 로그 테이블의 역할을하는 다른 테이블을 갖는 것입니다 (모든 업데이트/변경 사항을 추적합니다). 이 로그 테이블을 폴링 할 수 있습니다 (새 항목 만 확인하면 더 효율적으로 보입니까?). 그러나 QSql에 내장 된 많은 기능을 잃어 버립니다.)

또는 내가 폴링하는 카운터 변수가 있어야합니까? 그리고 그 수가 증가하면 전체 테이블을 새로 고치는 것이 좋습니다.

이러한 모든 접근 방식은 약간 지저분한 것처럼 보입니다. 무엇을 권하고 싶습니까? 감사.

답변

0

이것은 정말 MySQL의 질문이지만 대답이 있습니다! :)

실제로 원하는 것은 X 초마다 데이터베이스를 폴링하는 것입니다. 그러나 행을 삽입, 갱신 및/또는 삭제할 경우 표시기를 만들 수 있도록 MySQL "트리거"를 만드는 것이 효율적입니다.

수정 된 행을 두 번째 테이블에 삽입하는 트리거를 만들어야한다고 생각합니다. 당신의 Qt는 프로그램에서 여론 조사는 이러한 작업을 수행해야합니다

  • 이 두 번째 "수정"잠금 테이블
  • 이 두 번째 "수정"
  • 이 두 번째 "수정"의 모든 내용을 삭제 테이블의 전체 내용을 읽어 테이블 당신이 실수로 읽기 및 삭제 사이에 삽입 된 새 행 삭제할 수 테이블을 잠글 해달라고하면
  • 는 두 번째 "수정"테이블

잠금을 해제합니다. 그러나 잠금을 피하고 싶으면 모든 것을 읽은 다음 "수정"테이블에 각 행을 삽입하여 생성 된 고유 ID를 기반으로 검색 한 행을 삭제하십시오.

의 MySQL에 대한 자주 묻는 질문 및 문서 트리거

은 여기에 있습니다 : 잠금에 대한 http://dev.mysql.com/doc/refman/5.0/en/faqs-triggers.html

문서/테이블을 잠금 해제하는 것은 여기에 있습니다 : http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html