2012-05-10 2 views
5

Oracle과 Mysql을 사용하여 API를 작성하지 않아서 전화를 걸고 다른 일을 한 다음 다시 돌아와 나중에 NIO처럼 받아 들일 수있는 이유를 알아 내려고 노력합니다. 스레드가 데이터를 기다리는 데 전념 할 수 있습니다. SQL 인터페이스가 싱크 IO가 여전히 강제되는 유일한 장소 인 것처럼 보이는데, 이는 DB를 기다리는 스레드를 묶는 것을 의미합니다.주요 DB 공급 업체가 진정으로 비동기 API를 제공하지 않는 이유는 무엇입니까?

아무도 이유를 설명 할 수 있습니까? 이 일을 어렵게하는 근본적인 것이 있습니까?

작업자 스레드를 사용하여 데이터를 검색하는 대신 DB 쿼리 문제와 결과 페치를 관리하는 데 1-2 스레드를 사용할 수 있다는 것이 좋습니다.

비동기 API 구현시 두 가지 실험적 시도 (예 : adbcj)가 있지만 프로덕션 용도로는 준비가되어 있지 않은 것으로 나타났습니다.

+0

나는 이것에 대해서도 놀랐다. –

답변

1

데이터베이스 서버는 수천 개의 클라이언트를 처리 할 수 ​​있어야합니다. 비동기 인터페이스를 제공하기 위해 DB 서버는 결과 집합을 메모리에 저장해야하므로 나중에 단계에서이를 가져올 수 있습니다. 그것은 곧 자원을 잃을 것입니다.

+1

나는 너의 관점을 어느 정도까지 보았다. 어쨌든 일어날지라도. 큰 결과를 가져 오는 것은 일반적으로 한 번에 전체 결과 집합을 검색하지 않습니다. – jasonk

1

async의 많은 문제점은 트랜잭션에 threadlocal을 사용하는 많은 라이브러리입니다.

Java의 경우 JDBC 사양 대부분은 트랜잭션 당 단일 스레드를 달성하기 위해 동기 동작을 사용합니다. 즉, 절차 순서로 거래를 작성하는 것입니다.

올바른 거래를 수행하려면 콜백을 통해 처리해야하지만 그렇지 않습니다. 이 작업을 수행하는 node.js 만 알지만 그 작업이 실제로 비동기인지는 확실하지 않습니다.

물론 비동기를 수행하더라도 실제로 동기화를 수행하는 경우 데이터베이스 자체의 성능을 향상시킬 수 있는지 확실하지 않습니다. Is asynchronous jdbc call possible?

는 개인적으로이 문제를 해결하기 위해 내가 RabbitMQ 같은 메시지 버스를 사용

는 (자바)에서 이상 인구 스레드를 피하기 위해 많은 방법이 있습니다.

관련 문제