mysql2
được hiểu như một sự thay thế hiện đại hơn cho mysql
hiện có đá quý, đã cũ trong một thời gian. Tôi cũng nghe nói rằng tác giả không hỗ trợ nó nữa và thay vào đó khuyến nghị mọi người sử dụng phiên bản ruby thuần túy của mình vì nó tương thích với nhiều triển khai Ruby hơn (nhưng nhiều chậm hơn).
Sự cố đầu tiên với mysql
gem là nó không thực hiện bất kỳ kiểu đúc nào trong C, nó trả lại cho bạn các chuỗi ruby mà sau đó bạn phải chuyển đổi thành các loại ruby thích hợp. Làm điều đó với ruby nguyên chất cực kỳ chậm và tạo ra các đối tượng trên heap mà ngay từ đầu chưa bao giờ cần thiết để tồn tại. Và như chúng ta đều biết, Ruby's GC là lý do chính dẫn đến sự chậm chạp của nó. Vì vậy, tốt nhất bạn nên tránh nó và làm càng nhiều càng tốt bằng C nguyên chất càng tốt.
Thứ hai là nó chặn toàn bộ ruby VM trong khi kết nối, gửi truy vấn và chờ phản hồi, và thậm chí đóng kết nối. mysqlplus
chắc chắn giúp giải quyết vấn đề này, nhưng chỉ để gửi các truy vấn theo những gì tôi biết.
mysql2
nhằm giải quyết những vấn đề này trong khi vẫn giữ cho API cực kỳ đơn giản. Eric Wong
(tác giả của Unicorn) đã đóng góp một số bản vá tuyệt vời giúp hầu hết mọi thứ không bị chặn và / hoặc phát hành GVL trong Ruby. Mysql2::Result
lớp hiện thực Enumerable nên nếu bạn biết cách sử dụng Mảng, bạn sẽ biết cách sử dụng nó.
Tôi chỉ biết một số người sử dụng nó trong sản xuất ngay bây giờ nhưng nó đang được đánh giá trên Twitter, WorkingPoint và UserVoice.
Tôi cũng đang nói chuyện với Yehuda
về việc nó được khuyến nghị / mặc định cho Rails 3 khi nó xuất xưởng. Một số kỹ thuật và tối ưu hóa của nó cũng sẽ được đưa vào do_mysql
của DataObjects lái xe sớm.
Trình điều khiển ActiveRecord hiện tại khá vững chắc. Tất cả những gì bạn cần làm là cài đặt gem và thay đổi tên bộ điều hợp của bạn trong database.yml thành mysql2
.
Nếu bạn quan tâm đến việc sử dụng nó, hãy dùng thử. Tôi nhanh chóng đưa ra các bản sửa lỗi nếu bạn tìm thấy bất kỳ vấn đề nào;)