2014-07-20 2 views
4

저는 스칼라에서 이벤트 중심 아키텍처를 작성 중이므로이를 사용하여 데이터베이스를 관리해야합니다.JDBC가 이벤트 중심 프로그램에 얼마나 유용할까요?

동기 호출 만 지원하는 JDBC를 사용하면 내 문제에 대한 좋은 해결책이 될지 궁금합니다.

나는 JDBC 호출에 대한 비동기 래퍼를 작성하려고 생각했지만 데이터베이스 호출로 인해 차단되는 스레드의 문제점을 실제로 해결할 수 있을까?

답변

-1

또한 완전히 asnyc 아키텍처를 구현하려고 시도하고 DB 호출이 병목 현상이됩니다. 좋은 생각은 JDBC C3P0 드라이버를 사용하여 연결을 사용하는 것입니다. 다음은 Scala Slick 프레임 워크 link의 사용 예입니다. 연결 풀링은 DB에 대한 연결을 사용할 준비가 된 솔루션 중 하나입니다. 각 요청에 대해 새 연결을 생성하는 것보다 그 연결을 제거하는 것이 더 좋습니다. 여기에 C3P0 프로젝트의 전체 웹 사이트가 있습니다 link

3

이것은 정말 좋은 질문이며, 실제로 그것에 대한 단 하나의 좋은 대답은 없습니다.

정말 데이터베이스, 프로토콜 및 드라이버 구현에 따라 다릅니다. 우선, 일부 데이터베이스, 예를 들어. Cassandra, 비동기 기능을 프로토콜 수준으로 구축하십시오. 이벤트 중심 모델에서보다 쉽게 ​​작업 할 수 있어야합니다. 정확하게는 - 느린 연결을 통해 기가 바이트의 데이터를 가져 오는 경우 may 블록이 네트워크 수준에 있습니다.

다른 데이터베이스는 동기 프로토콜 만 가지고 있으므로 리소스를 차단할 수 있습니까? 정확하게는 차단과 관련된 문제를 방지하는 연결 풀이 있습니다.

따라서 액세스하는 응용 프로그램 아키텍처 및 데이터에 따라 JDBC 연결을 래핑하고 비동기 기능을 제공하는 데이터 액세스 계층을 분리해야 할 수 있습니다. 이 레이어는 열린 연결 (예 : 연결을 유지하는 액터, 사용 가능한 데이터베이스가없는 경우 새 DB 연결 액터를 생성하고 수퍼 스레드 PinnedDispatcher을 사용하여 새 스레드를 생성하는 감독자)의 가용성에 따라 위아래로 확장됩니다.

다른 드라이버의 경우 JDBC를 사용하여 미래의 드라이버를 만들 수 있습니다.

대규모 응용 프로그램을 작성하는 경우 영구 액세스 논리를 RabbitMQ로 완전히 분리하고 RPC를 사용하여 데이터베이스에 액세스 할 수도 있습니다.

0

필자가 아는 한 JDBC 드라이버는 동기식입니다. 어쩌면 당신은 당신의 "주"배우들이 비동기 적으로 요청을 JDBC 드라이버를 다루는 백그라운드 "JDBC"배우에게 보내도록 시스템을 설계 할 수 있을까요?

관련 문제