문제

여기 누군가가 나를 도울 수 있기를 바랍니다.

내가 일하는 회사는 MSSQL 대신 MySQL을 사용하는 것을 선호합니다. 그래서 최신 드라이버 (6.1)를 다운로드하고 DB 레이어를 포팅하고 있습니다.

그러나 콜백을 매개 변수로 취하는 beginexecutereader 함수를 찾을 수 없습니다.

이것은 이유가 있습니까? 아니면 MySQL과 다르게 작동합니까?

내가 볼 수있는 한, 코드가 콜백을 일으키지 않으면 설문 조사를해야합니다. 연결 당 차단 스레드를 사용하는 것도 피하고 싶은 것입니다.

이것을 다루는 방법을 아이디어? (아마도 내 힘을 넘어서는 운전자를 변경하는 것 외에도)

아르 자형

도움이 되었습니까?

해결책

MySQL 커넥터의 버전 6.3.4는 비동기 메소드를 구현하지만 대의원을 비동기로 만 호출하여 호출 스레드에 차단되지 않지만 ThreadPool의 스레드를 저장하지는 않습니다. 다음은 이것에 대한 버그 보고서입니다.

그리고 당신이 말했듯이, 그것은 콜백 매개 변수가 없습니다. 다음은 이것에 대한 버그 보고서입니다.

나는 믿는다 Devart의 데이터 제공 업체 비동기 방법을 올바르게 구현하지만 무료는 아닙니다.

어쨌든 Async 데이터베이스 호출은 그 자체로 더 나은 전반적인 확장 성을 의미하지 않습니다. 기사를 읽는 것이 좋습니다. "내 데이터베이스 호출이 비동기적이어야합니까?"심층 분석을 위해.

다른 팁

이 커넥터에 대해 구체적으로 알지 못하지만 MySQL에서 본 다른 모든 커넥터는 Execute () 또는 Query () 호출 중에 서버가 데이터를 반환하기를 기다립니다. 가장 가까운 것은 execute () 또는 query ()에서 즉시 반환되는 "Unfufered"버전을 사용하는 것입니다. 그러나 다음 행을 요청하려고 할 때 블록하지만 아직 MySQL 서버에서 도착하지 않았습니다.

MySQL 스레드 지원은 기본적으로 나중에 생각하는 것 같습니다.

예를 들어 C API를 통해 발행 된 쿼리를 취소 할 수 없습니다. 오히려 쿼리 기능은 단순히 차단됩니다. 여러 동시 쿼리를 만들려면 쿼리 당 하나의 스레드가 필요합니다!

Postgres를 사용해보십시오. 나는 그것을 사용하지 않았지만 (C API가 나를 꺼내었다 - 모든 typedefs) 멀티 스레드 쿼리 (예 : 비동기 통화 등)에 대한 적절한 지원이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top