2012-05-03 27 views
7

Có thể thực hiện nhiều cập nhật trong một cuộc gọi bằng cách sử dụng Sequel không? Ví dụ:Có thể cập nhật hàng loạt trong phần tiếp theo không?

Ví dụ: làm cho khoảng 200 bản cập nhật có thể mất vài phút trên máy chủ của tôi, nhưng nếu tôi giả mạo một truy vấn SQL duy nhất nó chạy trong vài giây. Tôi tự hỏi nếu phần tiếp theo có thể được sử dụng để giả mạo truy vấn SQL đó hay thậm chí tốt hơn, hãy thực hiện toàn bộ hoạt động một lần.

+1

Có, nhưng tùy thuộc vào chính xác bạn đang cố gắng làm gì và RDBMS bạn đang chạy. Vui lòng cung cấp thêm thông tin để chúng tôi có thể tư vấn cho bạn tốt hơn. –

+0

Tôi đang sử dụng PostgreSQL và tôi muốn Sequel phát hành một truy vấn cho nhiều bản cập nhật, vì tôi có thể thực hiện trong SQL thuần tuý. – RooSoft

Trả lời

3

Giải pháp mà tôi đã gặp phải liên quan đến phương thức update_sql. Thay vì thực hiện các hoạt động, nó tạo ra các truy vấn SQL thô. Để thực hiện nhiều lần cập nhật, bạn chỉ cần tham gia các cập nhật này; ở giữa, gọi phương thức chạy với chuỗi kết quả và bạn đã hoàn tất.

Giải pháp ghép nối nhanh hơn nhiều lần cập nhật.

+1

Giải pháp này chỉ nhanh hơn 'nhiều lần cập nhật' ở chỗ bạn chỉ thực hiện một kết nối/chuyến đi thực tế đến cơ sở dữ liệu cho toàn bộ các bản cập nhật, chứ không phải một lần cho mỗi lần cập nhật. Xin lưu ý rằng một số khung công tác tự động thực hiện loại hành vi này - chúng sẽ giữ các bản cập nhật trong bộ nhớ cho đến khi giao dịch được thực hiện. Ngoài ra, bạn _may_ có thể nhận được các lợi ích lớn hơn, nếu nhiều câu lệnh có thể được viết lại thành câu lệnh _one_. –

+2

Điều đó có thể hoạt động trong trường hợp của bạn, nhưng không phải tất cả các bộ điều hợp Sequel đều hỗ trợ nhiều truy vấn trong Database # run. Phần tiếp theo thực sự không cung cấp một phương thức độc lập với bộ điều hợp chấp nhận nhiều truy vấn trong một chuỗi đơn (một số bộ điều hợp sẽ làm việc với một chuỗi như vậy, một số khác sẽ không). –

+1

Đối với trình điều khiển mysql2, bạn phải sử dụng {flags: :: Mysql2 :: Client :: MULTI_STATEMENTS} làm tùy chọn khi kết nối – tothemario

5

Bạn có thể sử dụng Datset#importhttp://sequel.jeremyevans.net/rdoc/classes/Sequel/Dataset.html#method-i-import "Chèn nhiều bản ghi vào bảng được liên kết. Phương pháp này có thể được sử dụng để chèn một số lượng lớn bản ghi vào bảng trong một truy vấn nếu cơ sở dữ liệu hỗ trợ. Một giao dịch."

đây là một ví dụ về cách sử dụng nó:

DB = Sequel.connect(...) 
DB[:movies].import([:id, :director, :title, :year], [[1, "Orson Welles", "Citizen Kane", 1941],[2, "Robert Wiene", "Cabinet of Dr. Caligari, The", 1920]]) 
Các vấn đề liên quan