Tôi tự hỏi nếu có một cách để thực hiện cuộc gọi không đồng bộ đến cơ sở dữ liệu?
Ví dụ, hãy tưởng tượng rằng tôi có một yêu cầu lớn mất nhiều thời gian để xử lý, tôi muốn gửi yêu cầu và nhận thông báo khi yêu cầu sẽ trả về một giá trị (bằng cách chuyển qua Listener / gọi lại hoặc một cái gì đó). Tôi không muốn chặn chờ cơ sở dữ liệu trả lời.
Tôi không nghĩ rằng việc sử dụng một nhóm các luồng là một giải pháp vì nó không mở rộng được, trong trường hợp các yêu cầu đồng thời nặng nề, điều này sẽ tạo ra một số lượng rất lớn các luồng.
Chúng tôi đang phải đối mặt với loại vấn đề này với các máy chủ mạng và chúng tôi đã tìm ra giải pháp bằng cách sử dụng lệnh gọi / poll / epoll để tránh có một luồng trên mỗi kết nối. Tôi chỉ tự hỏi làm thế nào để có một tính năng tương tự với yêu cầu cơ sở dữ liệu?
Lưu ý: Tôi biết rằng việc sử dụng FixedThreadPool có thể là một công việc tốt, nhưng tôi ngạc nhiên rằng không ai đã phát triển một hệ thống thực sự không đồng bộ (không sử dụng thêm luồng).
** Cập nhật **
Vì thiếu các giải pháp thực tế thực tế, tôi đã quyết định tự tạo một thư viện (một phần của finagle): finagle-mysql . Về cơ bản, nó giải mã / giải mã yêu cầu / phản hồi của mysql và sử dụng Finagle / Netty dưới mui xe. Nó quy mô cực kỳ tốt ngay cả với số lượng lớn các kết nối.