2011-09-28 37 views
6

Tôi có một tập lệnh ruby ​​đọc một bảng lớn (~ 20m hàng), thực hiện một số xử lý và nạp nó cho Solr cho mục đích lập chỉ mục. Đây là một nút cổ chai lớn trong quá trình của chúng tôi. Tôi đang lên kế hoạch để tăng tốc độ ở đây và tôi muốn đạt được một số loại song song. Tôi bối rối về bản chất đa luồng của Ruby. Máy chủ của chúng tôi có ruby 1.8.7 (2009-06-12 patchlevel 174) [x86_64-linux]. Từ this blog postthis question at StackOverflow, có thể thấy rằng Ruby không có phương pháp tiếp cận đa luồng "thực". Máy chủ của chúng tôi có nhiều lõi, vì vậy việc sử dụng parallel gem có vẻ là một cách tiếp cận khác đối với tôi.Ruby Parallel/Multithread Programming để đọc cơ sở dữ liệu khổng lồ

Tôi nên tiếp cận phương pháp nào? Ngoài ra, bất kỳ đầu vào nào trên các hệ thống đọc dữ liệu song song sẽ được đánh giá cao.

+0

Làm cách nào để bạn truy cập cơ sở dữ liệu? Bạn có thể cho chúng tôi thấy một số mã không? –

+0

Tôi sử dụng đá quý mysql để lấy N (~ 500) bản ghi tại một thời điểm bằng cách sử dụng giới hạn của MySQL, các tham số bù đắp. Batch quá trình chúng và hàng loạt thức ăn cho họ để Solr. Cần thêm thông tin? –

Trả lời

1

Mọi cơ hội nâng cấp lên Ruby 1.9? Nó thường nhanh hơn 1.8.7.

Đó là sự thật rằng Ruby bị có một GIL nhưng nếu đa luồng sẽ giải quyết vấn đề của bạn thì bạn có thể xem JRuby vì nó hỗ trợ luồng thực sự.

Bạn cũng nên chắc chắn rằng đó là CPU là nút cổ chai bởi vì nếu nó đa luồng I/O có thể không mua cho bạn nhiều.

4

Bạn có thể song song điều này ở cấp hệ điều hành. Thay đổi tập lệnh để có thể lấy một loạt các dòng từ tệp đầu vào của bạn

$ reader_script --lines=10000:20000 mytable.txt 

Sau đó thực hiện nhiều phiên bản của tập lệnh.

$ reader_script --lines=0:10000 mytable.txt& 
$ reader_script --lines=10000:20000 mytable.txt& 
$ reader_script --lines=20000:30000 mytable.txt& 

Unix sẽ tự động phân phối chúng sang các lõi khác nhau.

+0

Điều này có vẻ giống như một cách tiếp cận hợp lý. Chúng tôi có 8 lõi, vì vậy tôi có thể chạy tối đa 8 trường hợp rất dễ dàng. –

+0

Bất kỳ tài liệu nào về 'reader_script'? Tôi không thể tìm thấy. – Chamnap

Các vấn đề liên quan