Thi hành song song tập lệnh bash


7

Tôi có một bảng URL_Experimenttrong cơ sở dữ liệu của tôi ( cơ sở dữ liệu myQuery ). Tôi có 2 triệu liên kết URL trong bảng này.

Đối với mỗi URL, tôi đang kiểm tra xem một số văn bản cụ thể có trong URL và cập nhật thông tin trong URL_Experimentbảng của tôi không .

Bây giờ, tôi cần phải làm cho kịch bản chạy nhanh. Giải pháp dễ dàng xuất hiện trong đầu tôi là:

chia URL_Experimentthành 10 bảng (mỗi bảng có 200.000 hàng) và chạy tập lệnh 10 lần cùng một lúc. Bằng cách này, tôi có thể đảm bảo rằng các cập nhật xảy ra đúng. Nhưng để làm điều này, tôi cần lưu 10 tập lệnh, mỗi tập lệnh truy cập vào bảng chính xác (tôi cần đổi tên các bảng từ 1 thành 10).

Mặc dù những điều trên có vẻ là một giải pháp khá gọn gàng, tôi đang tìm kiếm một giải pháp phức tạp hơn. Một cái gì đó sẽ thực thi cùng một kịch bản (song song) như 10 quy trình. Mối quan tâm của tôi là thời gian thực hiện. Tôi không muốn các tài nguyên bị lãng phí khi chúng có thể được sử dụng.


Không, thưa ngài. Nếu đó là một hệ thống spam, tôi có thể đã không tiết lộ danh tính ban đầu của mình. Nó liên quan đến công việc nghiên cứu luận án của tôi. Tôi đã xây dựng toàn bộ mã bằng VBA excel. Nhưng, nó đã thất bại đối với các bộ dữ liệu lớn hơn và vì vậy tôi đang viết lại toàn bộ mã trong tập lệnh bash. Nếu bạn thấy các câu hỏi SO của tôi, hầu hết chúng chỉ liên quan đến trích xuất dữ liệu trong VBA.
Ramesh

1
Tôi rất vui vì được chú ý cho câu hỏi của mình :) Tôi thực sự học được rất nhiều trong vài ngày sau khi bắt đầu viết lại mã trong kịch bản. Tôi sẽ đề cập đến tất cả các liên kết này trong phần bảo vệ luận án của mình :)
Ramesh

Bạn có đang điền vào MySQL DB hay nó là nguồn của các URL mà bạn đang được cung cấp? Tôi hỏi b / c Tôi có thể có xu hướng sử dụng sqlite thay vì MySQL. BTW, mục tiêu tổng thể của bạn cho dự án của bạn là gì?
slm

Tôi tạo các URL dựa trên tên mà tôi nhận được từ một nguồn khác. Tôi biết trang web luôn tuân theo một mẫu cụ thể và vì vậy tôi kiểm tra xem các URL này có tồn tại không và nếu chúng tồn tại, tôi trích xuất thông tin từ các URL đó và lưu trữ chúng trong các bảng cơ sở dữ liệu MySQL của tôi.
Ramesh

Hiệu suất trong việc tạo ra DB DB như thế nào? Thông thường với khối lượng hàng này, thiết kế của kiến ​​trúc sẽ cắn bạn nếu bạn không trả tiền đặc biệt. với nó ban đầu: stackoverflow.com/questions/1711631/ Cách
slm

Câu trả lời:


6

Bạn có thể thử GNU song song. Nhiều ví dụ có thể được tìm thấy ở đâyở đây .

Tôi là thành viên của nhóm Swift và chúng tôi thực hiện chính xác những điều này cho các dự án nghiên cứu lớn.


Cảm ơn rất nhiều cho lời đề nghị. Nếu tôi cần sử dụng GNU song song, tôi có phải thay đổi tập lệnh hay không? Tôi có cần thực hiện bất kỳ thay đổi cấu hình?
Ramesh

Ketan đề nghị liên hệ trực tiếp với anh ta nếu bạn cần trợ giúp để thiết lập Swift, chuyển điều này sang các bình luận, không thực sự là một phần của câu trả lời: "Hãy liên hệ với tôi nếu bạn muốn thiết lập Swift cho vấn đề của mình."
slm

3
song song có vẻ như là tốt nhất cho nhiệm vụ, cụ thể là tôi sẽ làm một cái gì đó nhưmysql -e 'select ...' | parallel --pipe -j10 --round-robin ./scriptname.sh
Patrick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.