2010-01-08 17 views
6

Trong tập 78 của Joel & Jeff podcast, một trong những người Doctype/Litmus nói rằng bạn sẽ không bao giờ muốn xây dựng một con nhện bằng ruby. Có ai muốn đoán tại lý do của mình cho điều này?Tại sao Ruby không được sử dụng để tạo ra một con nhện

+1

Tôi chỉ định câu hỏi này được đặt trong Câu hỏi thường gặp vì định nghĩa "chủ quan và tranh luận" * và * "không phải là câu hỏi thực". –

+0

Ồ, và thực tế nó cũng không liên quan đến lập trình. Vì vậy, nhiều sự lựa chọn ... –

+0

@ Jorg: không phải là nó Joel và Jeff là tranh luận, không Ben? –

Trả lời

15

Trình thu thập thông tin cần phải nhanh như thế nào? Nó phụ thuộc vào việc bạn đang thu thập thông tin toàn bộ web theo lịch trình chặt chẽ hay thu thập dữ liệu từ vài chục trang trên một trang web.

Với thư viện Ruby và nokogiri, tôi có thể đọc this page và phân tích cú pháp trong 0,01 giây. Sử dụng xpath để trích xuất dữ liệu từ trang được phân tích cú pháp, tôi có thể biến tất cả dữ liệu thành các đối tượng miền cụ thể trong 0,16 giây. Tất cả 223 hàng.

Tôi đang gặp phải ít sự cố hơn trong đó vấn đề ràng buộc truyền thống (cpu/bộ nhớ/đĩa). Đây là tuổi của rất nhiều. Nơi tài nguyên không phải là một ràng buộc, đừng hỏi "cái gì tốt hơn cho máy." Hỏi "điều gì tốt hơn cho con người?"

+1

Trình thu thập thông tin không cần phải rất nhanh nếu bạn chỉ xem một trang, nhưng có một lý do Google vẫn sử dụng C. Khi bạn nhân một vài phần nghìn giây tiết kiệm trên một triệu máy lặp đi lặp lại, nó nhanh chóng bắt đầu cộng lại. – kejadlen

1

Bạn sẽ không nhận được hiệu suất mong muốn từ Ruby. Xem liên kết được tham chiếu: http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/

Trong khi kiểm tra hiệu suất như thế này nên được thực hiện với một hạt muối, có sự khác biệt đáng kể giữa Ruby và ngôn ngữ hàng đầu (tốc độ).

Chỉnh sửa: Xấu hổ với tôi khi trả lời câu hỏi đã tải. Vẻ đẹp của lập trình là tất cả các ngôn ngữ này đều có sẵn để bạn sử dụng, vì vậy bạn có thể kiểm tra những gì có hiệu quả. tốt nhất cho các yêu cầu của dự án của bạn. Đề xuất của tôi là thử nghiệm và xem những gì phù hợp nhất với bạn.

+0

eI nghĩ rằng tốc độ có thể là một vấn đề, mặc dù tại sao một con nhện cần phải được nhanh chóng? Chắc chắn rất nhiều những gì họ đang làm là mạng bị ràng buộc? Điều gì sẽ là một ngôn ngữ phù hợp hơn? – Ben

+3

Một con nhện phong nha sẽ đa nhiệm (multi-thread) để trong khi một số chủ đề đang chờ một máy chủ để thức dậy, những người khác sẽ bận rộn truy vấn. Tùy thuộc vào kết nối Internet của bạn, bạn sẽ có thể tối đa CPU của bạn, đặc biệt là vì hy vọng bạn sẽ làm điều gì đó có ý nghĩa và đòi hỏi tính toán với nội dung trang khi bạn đã tải xuống. –

+1

Và thuật toán Josephus cụ thể mà ông đã profiling không trên khuôn mặt của nó có rất nhiều để làm với các vấn đề nhện. Hiệu suất có thể là lý do, và ruby ​​có thể quá chậm, nhưng liên kết cụ thể này không liên quan gì đến điều đó (vì tác giả đau buồn khi nói ở đầu bài viết). Spidering bị chi phối bởi lưu lượng mạng, trong khi vấn đề Josephus bị chi phối bởi việc đếm. –

0

Điều OG cho biết. Nói một cách đơn giản, Ruby là con chó chậm chạp và nếu bạn đang tìm cách làm được rất nhiều trong một đơn vị thời gian, đó là sự lựa chọn sai về ngôn ngữ.

4

Theo tôi, đó chỉ là vấn đề về quy mô. Nếu bạn đang viết một scraper đơn giản cho việc sử dụng cá nhân của riêng bạn hoặc chỉ một cái gì đó sẽ chạy trên một máy tính một vài lần một ngày, sau đó bạn nên chọn một cái gì đó liên quan đến ít mã/nỗ lực/bảo trì đau. Cho dù đó là ruby ​​là một câu hỏi khác (tôi sẽ chọn Groovy trên Ruby cho nhiệm vụ này => tốt hơn luồng + phân tích cú pháp XML rất thuận tiện). Mặt khác, nếu bạn đang cạo hàng terabyte dữ liệu mỗi ngày, thì thông lượng của ứng dụng của bạn có lẽ quan trọng hơn thời gian phát triển ngắn hơn.

BTW, bất kỳ ai nói rằng bạn sẽ không bao giờ muốn sử dụng một số công nghệ trong một số ngữ cảnh hoặc cách khác có lẽ là sai.

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