Tôi hiện có API cho một trong các dự án của mình và dịch vụ chịu trách nhiệm tạo tệp xuất dưới dạng CSV, lưu trữ và lưu trữ chúng ở đâu đó trong đám mây.Trả lời với số lượng lớn các đối tượng thông qua API Rails
Vì API của tôi được viết bằng Rails và dịch vụ của tôi trong Ruby thuần túy, tôi sử dụng đá quý của cô trong dịch vụ để tương tác với API. Nhưng tôi thấy việc triển khai hiện tại của tôi kém hiệu quả hơn, vì tôi thực hiện dịch vụ Model.all
trong dịch vụ của mình, do đó kích hoạt yêu cầu có thể chứa quá nhiều đối tượng trong phản hồi.
Tôi tò mò về cách cải thiện toàn bộ tác vụ này. Dưới đây là những gì tôi đã nghĩ đến:
- thực hiện phân trang ở cấp API và gọi
Model.where(page: xxx)
từ dịch vụ của tôi; - tạo CSV thực tế ở cấp API và gửi CSV trở lại dịch vụ (điều này có thể được thực hiện đồng bộ hóa hoặc không đồng bộ).
Nếu tôi sử dụng cách tiếp cận đầu tiên, tôi cần truy xuất bao nhiêu đối tượng trên mỗi trang? Câu trả lời lớn đến mức nào?
Nếu tôi sử dụng phương pháp thứ hai, điều này sẽ mang lại chi phí cao hơn cho yêu cầu (và tôi đoán rằng các yêu cầu API sẽ không mất nhiều thời gian) và tôi tự hỏi liệu đó có phải là công việc của API để thực hiện điều này hay không.
Tôi nên làm theo phương pháp nào? Hoặc, có cái gì đó tốt hơn mà tôi đang thiếu?
Cảm ơn bạn đã chia sẻ ý kiến của mình! Tôi không muốn kết nối trực tiếp với DB từ dịch vụ vì mục đích cô lập; Sau đó tôi sẽ cần các mô hình ở nhiều nơi, và vì dịch vụ không phải là Rails, tôi sẽ có một thời gian khó khăn để làm điều này (đã trải qua điều này rồi). Tôi cũng không thể mương dịch vụ được; tính năng CSV này chỉ là một phần của dịch vụ. Về xử lý nền, bạn tham khảo điểm thứ hai của tôi, làm nó theo cách không đồng bộ? – linkyndy
Về các ràng buộc, tôi chỉ tìm cách tách các thành phần; thế hệ CSV sẽ chỉ xảy ra một lần mỗi ngày và vì nó nằm trong một dịch vụ riêng biệt, tôi đoán nó sẽ không ảnh hưởng đến bất cứ thứ gì nếu chạy nhiều hơn một chút. – linkyndy
Làm thế nào về việc tạo CSV trong ứng dụng API trong một công việc cron hoặc bộ xử lý nền và chỉ cần phục vụ nó bởi Dịch vụ khi được yêu cầu? – bbozo