저는 스칼라에서 이벤트 중심 아키텍처를 작성 중이므로이를 사용하여 데이터베이스를 관리해야합니다.JDBC가 이벤트 중심 프로그램에 얼마나 유용할까요?
동기 호출 만 지원하는 JDBC를 사용하면 내 문제에 대한 좋은 해결책이 될지 궁금합니다.
나는 JDBC 호출에 대한 비동기 래퍼를 작성하려고 생각했지만 데이터베이스 호출로 인해 차단되는 스레드의 문제점을 실제로 해결할 수 있을까?
저는 스칼라에서 이벤트 중심 아키텍처를 작성 중이므로이를 사용하여 데이터베이스를 관리해야합니다.JDBC가 이벤트 중심 프로그램에 얼마나 유용할까요?
동기 호출 만 지원하는 JDBC를 사용하면 내 문제에 대한 좋은 해결책이 될지 궁금합니다.
나는 JDBC 호출에 대한 비동기 래퍼를 작성하려고 생각했지만 데이터베이스 호출로 인해 차단되는 스레드의 문제점을 실제로 해결할 수 있을까?
이것은 정말 좋은 질문이며, 실제로 그것에 대한 단 하나의 좋은 대답은 없습니다.
정말 데이터베이스, 프로토콜 및 드라이버 구현에 따라 다릅니다. 우선, 일부 데이터베이스, 예를 들어. Cassandra, 비동기 기능을 프로토콜 수준으로 구축하십시오. 이벤트 중심 모델에서보다 쉽게 작업 할 수 있어야합니다. 정확하게는 - 느린 연결을 통해 기가 바이트의 데이터를 가져 오는 경우 may 블록이 네트워크 수준에 있습니다.
다른 데이터베이스는 동기 프로토콜 만 가지고 있으므로 리소스를 차단할 수 있습니까? 정확하게는 차단과 관련된 문제를 방지하는 연결 풀이 있습니다.
따라서 액세스하는 응용 프로그램 아키텍처 및 데이터에 따라 JDBC 연결을 래핑하고 비동기 기능을 제공하는 데이터 액세스 계층을 분리해야 할 수 있습니다. 이 레이어는 열린 연결 (예 : 연결을 유지하는 액터, 사용 가능한 데이터베이스가없는 경우 새 DB 연결 액터를 생성하고 수퍼 스레드 PinnedDispatcher
을 사용하여 새 스레드를 생성하는 감독자)의 가용성에 따라 위아래로 확장됩니다.
다른 드라이버의 경우 JDBC를 사용하여 미래의 드라이버를 만들 수 있습니다.
대규모 응용 프로그램을 작성하는 경우 영구 액세스 논리를 RabbitMQ로 완전히 분리하고 RPC를 사용하여 데이터베이스에 액세스 할 수도 있습니다.
필자가 아는 한 JDBC 드라이버는 동기식입니다. 어쩌면 당신은 당신의 "주"배우들이 비동기 적으로 요청을 JDBC 드라이버를 다루는 백그라운드 "JDBC"배우에게 보내도록 시스템을 설계 할 수 있을까요?