6

Tại công việc của tôi, tôi thường có hai bảng trong các mô hình django của tôi và phải kết nối chúng để trả lại dữ liệu này dưới dạng csv chẳng hạn. Dữ liệu đó không được kết nối bằng khóa ngoại, nhưng chúng có một số nhận dạng để kết nối chúng. Điều này dẫn đến thực tế là chúng tôi nhập dữ liệu này từ hai nguồn khác nhau và đôi khi đối tác bị thiếu, vì vậy tôi không thể kết nối trong khi tạo mục nhập.Tối ưu hóa hiệu suất để kết nối dữ liệu trong các mô hình django

Câu hỏi của tôi là: Cách tốt nhất để kết nối dữ liệu này về hiệu suất nếu bạn nghĩ thực tế là tôi thường phải trả lại dữ liệu này là gì?

  1. Cách: Tạo mô hình mới kết nối dữ liệu (như m2m) hoặc lớp cha với số nhận dạng, cả hai được kết nối với.
class OrderInvoiceConnector(models.Model): 
    order_data = models.ForeignKey(Order, related_name="invoice") 
    invoice_data = models.ForeignKey(Invoice, related_name="order") 
  1. Way: Tạo một mô hình mới mà tiết kiệm chỉ có dữ liệu đó là cần thiết cho việc xuất khẩu csv. Một cái gì đó như:
class ConnectedData(models.Model): 
    invoice_id = models.CharField(max_length=255) 
    country_iso = models.CharField(max_length=255) 
    invoice_date = models.CharField(max_length=255) 
    tax = models.FloatField(max_length=255) 
    price = models.FloatField() 
+0

Khó có thể đưa ra câu trả lời thích hợp bên dưới nhưng tôi sẽ thử và nhận xét về những gì tôi sẽ làm và có thể nó hữu ích nhưng phụ thuộc vào một vài điều. Nếu người dùng đang chờ tệp CSV tải xuống, tôi có thể đi với tùy chọn 2 nhưng tất cả điều này phụ thuộc vào tần suất thay đổi dữ liệu và thời gian cần để tạo. Một vài lần một ngày với một lượng nhỏ dữ liệu là OK. Ngoài ra, nếu CSV này không thể tùy chỉnh trong dự án django của người dùng, tôi sẽ nghĩ đến việc tạo CSV trước khi người dùng yêu cầu. Nếu không, tùy chọn đầu tiên của bạn. Nói vậy, điều này phụ thuộc vào rất nhiều thứ. –

+0

Bạn có thể cung cấp thêm một chút thông tin về vấn đề hiệu suất không? DB tham gia có mất vài giây/phút/giờ không. Nếu người dùng chờ điều này? Tần suất dữ liệu thay đổi như thế nào? –

+0

Thay đổi dữ liệu mỗi ngày một lần. Người dùng sẽ có thể tải xuống csv từ một trang web thông thường, với các tùy chọn lọc (ví dụ: lọc theo ngày). Việc tham gia mất 2 giờ cho 150.000 tập dữ liệu trên mỗi trang web. –

Trả lời

1

tôi sẽ đi với biến thể thứ hai, như bạn nói rằng tham gia sẽ rất tốn kém, và thay đổi dữ liệu được sản xuất trên cơ sở hàng ngày. Nếu bạn tạo một mô hình chỉ đọc, bạn sẽ đóng gói tất cả các dữ liệu cần thiết cho việc sử dụng của người dùng trong một truy vấn bảng đơn. Bạn sẽ phải điền dữ liệu với một số công việc tự động, nhưng có vẻ chấp nhận được trong kịch bản được đề cập của bạn.

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