Tôi là người dùng R và tôi thường xuyên thấy rằng tôi cần viết các hàm yêu cầu tập hợp dữ liệu lớn (10 trong số hàng triệu hàng). Khi tôi áp dụng các chức năng như vậy trên một số lượng lớn các quan sát, nó có thể mất rất nhiều thời gian nếu tôi không cẩn thận về cách tôi thực hiện nó.Cách nhanh nhất để tập hợp con - data.table so với MySQL
Để thực hiện việc này, đôi khi tôi đã sử dụng gói data.table và điều này cung cấp tốc độ nhanh hơn nhiều so với việc đặt trước bằng cách sử dụng các khung dữ liệu. Gần đây, tôi đã bắt đầu thử nghiệm với các gói như RMySQL, đẩy một số bảng vào mysql và sử dụng gói để chạy truy vấn sql và trả về kết quả.
Tôi đã tìm thấy các cải tiến hiệu suất hỗn hợp. Đối với các tập dữ liệu nhỏ hơn (hàng triệu), có vẻ như việc tải dữ liệu vào một data.table và thiết lập các phím bên phải làm cho việc subsetting nhanh hơn. Đối với các tập dữ liệu lớn hơn (10 đến 100 của hàng triệu), nó xuất hiện gửi một truy vấn đến mysql di chuyển nhanh hơn.
Đã tự hỏi liệu có ai có cái nhìn sâu sắc về kỹ thuật nào nên trả lại các truy vấn đơn giản hoặc tập hợp đơn giản nhanh hơn và liệu điều này có phụ thuộc vào kích thước của dữ liệu không? Tôi hiểu rằng việc thiết lập các khóa trong data.table có phần tương tự để tạo ra một chỉ mục, nhưng tôi không có nhiều trực giác hơn thế nữa.
Tôi biết một số người khác ở đây có nhiều kinh nghiệm hơn về điều này, vì vậy tôi sẽ để họ giải thích bằng câu trả lời thực tế, nhưng tôi nghi ngờ bạn sẽ muốn xem gói 'sqldf' mô tả, chỉ có nó tạo ra bảng trong bộ nhớ (tôi nghĩ) để các truy vấn có thể chạy khá nhanh hơn một chút. – joran
cảm ơn, joran! Tôi rất muốn hiểu điều này trong bối cảnh các bảng lớn. Đó là tất cả suy đoán, nhưng tôi đã nhận được lời khuyên rằng vấn đề tốc độ tôi có thể là do quản lý bộ nhớ/hạn chế. Sau khi tất cả, khi sử dụng dữ liệu.bảng, không phải là những bảng trong bộ nhớ là tốt? – exl
Thật vậy, đối với dữ liệu bộ nhớ lớn sẽ là một vấn đề, nhưng tôi tin rằng sqldf có thể sử dụng db đĩa là tốt. Một lần nữa, tôi đã không sử dụng nó nhiều, tôi đã đề cập đến nó bởi vì toàn bộ gói của nó được xây dựng xung quanh khái niệm đẩy dữ liệu vào một db, thực hiện sql và sau đó trả về R. – joran