2008-09-01 25 views
18

Có bất kỳ đầu nối không đồng bộ nào tồn tại cho Mysql có thể được sử dụng trong ứng dụng C hoặc C++ không? Tôi đang tìm một thứ có thể được cắm vào một số reactor pattern được viết bằng Boost.Asio.Kết nối Mysql không đồng bộ

[Chỉnh sửa:] Chạy trình kết nối đồng bộ trong chuỗi không phải là một tùy chọn.

Trả lời

7

http://forums.mysql.com/read.php?45,183339,183339 thưởng thức

liên kết Cập nhật đến bài viết ban đầu thể hiện thế nào để làm async truy vấn mysql:

http://jan.kneschke.de/projects/mysql/async-mysql-queries-with-c-api/

+1

Kết nối chặn là một vấn đề nghiêm trọng trong việc triển khai này, nhưng dù sao dường như làm những gì tôi yêu cầu ban đầu. Dự án mưa phùn (https://launchpad.net/drizzle) đang hoạt động trên máy khách async sẽ tương thích ngược với Mysql (được đề cập ở đây: http://www.oddments.org/?p=20) –

0

Tôi nghĩ giải pháp duy nhất sẽ là tạo một dịch vụ không đồng bộ kết thúc tốt đẹp standard connector. Bạn sẽ cần hiểu các API ODBC.

2

Tôi đã có một vấn đề tương tự với một công nghệ rất khác nhau: Xoắn xoắn (IO dựa trên lò phản ứng) và sqlAlchemy (??). Trong khi tìm kiếm giải pháp, tôi đã tìm thấy về một dự án sAsync chỉ đơn giản là tạo ra một luồng riêng biệt cho sqlAlchemy và sau đó trả lời các yêu cầu.

Do ASIO dựa trên các tính năng OS cấp thấp (như aio_read() hoặc ReadFileEx() vv) và lò phản ứng ở mức hệ điều hành (hoặc proactor, trong trường hợp của Windows) Tôi không nghĩ bạn có cơ hội khác hơn là mô phỏng 'không đồng bộ' bằng các phương tiện tương tự.

Chạy một kết nối đồng bộ trong đề không phải là một lựa chọn

Hãy suy nghĩ về nó: libmysqlclient/mysqlclient.dll bạn đang sử dụng làm cho các cuộc gọi ổ cắm đồng bộ. Trình lên lịch hệ điều hành sẽ chuyển sang một luồng khác cho đến khi I/O hoàn tất, vậy sự khác biệt là gì? (ngoài thực tế là bạn không nên tạo chủ đề 2k cho điều này ..)

Chỉnh sửa: mysql_real_connect() hỗ trợ tham số socket UNIX. Bạn có thể được cho là đọc chính mình từ cổng máy chủ mysql và ghi vào ổ cắm UNIX đó chỉ bằng ASIO. Giống như proxyfication.

1

[Chạy trình kết nối đồng bộ trong chuỗi không phải là tùy chọn Hãy nghĩ về điều đó: libmysqlclient/mysqlclient.dll bạn đang sử dụng sẽ thực hiện cuộc gọi socket đồng bộ. Trình lên lịch hệ điều hành sẽ chuyển chính xác sang một chuỗi khác cho đến khi I/O được hoàn thành]

Điều này làm tôi thất vọng! - 'một chuỗi khác' có thể dễ dàng là đồng bộ thứ hai. kết nối với mysql, và nên được xử lý bởi mysql giống như nó sẽ là một khách hàng hoàn toàn? Gutfeel của tôi là nó nên làm việc bằng cách sử dụng nhiều chủ đề.

+1

Nó sẽ hoạt động trong chuỗi. Nhưng hãy nói rằng bạn muốn có 100 kết nối so với một hoặc nhiều máy chủ. Không phải là tôi tưởng tượng rằng bất cứ ai sẽ làm điều đó, nhưng chấp nhận nó vì lợi ích của cuộc tranh luận. Tôi có nên spin lên 100 thread (hoặc thậm chí chỉ có 10 trong một thread thread ..)? Đó là một chi phí khá lớn. –

1

MySQL Connector/C++ là một C++ thực hiện JDBC 4,0

Các khách hàng tham khảo sử dụng Trình kết nối MySQL/C++ là: - OpenOffice - MySQL Workbench

Tìm hiểu thêm: http://forums.mysql.com/read.php?167,221298

0

bạn đã xem xét sử dụng libdrizzle?tôi đã sử dụng chỉ một phiên bản cũ, từ khi nó là một dự án riêng biệt từ mưa phùn, và tôi đã thử nghiệm các tính năng truy vấn không đồng bộ, nhưng tôi chưa bao giờ thực hiện bất kỳ điểm chuẩn thực sự đáng nhắc đến.

+0

Tôi đã thực hiện xem nhanh dự án Mưa phùn khi tôi tạo câu hỏi này (Xem nhận xét của tôi về câu trả lời được chấp nhận). Vào thời điểm đó họ đã có một khách hàng không đồng bộ theo cách. Tôi thực sự không biết điều đó đã kết thúc như thế nào. –