5

Tôi có một khung dữ liệu gấu trúc với lớp bao bọc lỏng xung quanh nó cung cấp siêu dữ liệu cho ứng dụng django/DRF của tôi. Ứng dụng về cơ bản là một cách thân thiện với người dùng (không lập trình) để thực hiện một số phân tích và xác thực dữ liệu. Giữa các yêu cầu tôi muốn có thể lưu trạng thái của khung dữ liệu để tôi có thể có một loạt tương tác với dữ liệu nhưng không cần phải lưu trong cơ sở dữ liệu (Nó chỉ cần tồn tại miễn là phiên trình duyệt). Từ này nó là hợp lý để kiểm tra khuôn khổ phiên django của, nhưng từ những gì tôi đã nghe dữ liệu phiên nên được trọng lượng nhẹ và các đối tượng dataframe không json serialize.Truy cập đối tượng dữ liệu pandas dataframe giữa các yêu cầu qua khóa phiên

Vì tôi không có nhiều người dùng và tôi muốn ứng dụng cảm thấy như một trang web dành cho máy tính để bàn, tôi đã nghĩ đến việc sử dụng bộ nhớ đệm django như một cách để giữ đối tượng dataframe trong bộ nhớ. Vì vậy, việc đưa dữ liệu vào bộ nhớ cache sẽ giống như thế này

>>> from django.core.cache import caches 
>>> cache1 = caches['default'] 
>>> cache1.set(request.session._get_session_key, dataframe_object) 

và sau đó giống nhau ngoại trừ việc sử dụng các yêu cầu sau để truy cập. Đây có phải là một cách hay để xử lý quy trình làm việc này hoặc có một hệ thống khác mà tôi nên sử dụng để giữ dữ liệu khá lớn (5mb đến 100mb) trong bộ nhớ không?

Trả lời

2

Nếu bạn đang chạy ứng dụng của mình trên một máy chủ hiện đại thì 100MB không phải là một lượng bộ nhớ khổng lồ. Tuy nhiên, nếu bạn có nhiều hơn một vài chục người dùng đồng thời, mỗi người yêu cầu 100MB bộ nhớ cache thì điều này có thể thêm tối đa bộ nhớ hơn máy chủ của bạn có thể xử lý. Bộ nhớ cache và máy chủ của bạn phải được định cấu hình phù hợp và bạn có thể muốn giới hạn tổng số lượng các khung dữ liệu đã lưu trong mã python của bạn.

Vì có vẻ như Django cần tuần tự hóa dữ liệu phiên, lựa chọn của bạn là sử dụng các phiên với PickleSerializer hoặc sử dụng bộ nhớ cache. Theo tài liệu, PickleSerializer không được khuyến khích vì lý do bảo mật vì vậy lựa chọn của bạn để sử dụng bộ nhớ cache là tốt nhất.

Bộ đệm ẩn mặc định trong Django không chia sẻ mục qua các quy trình để bạn có được bộ nhớ và thời gian hiệu quả hơn bằng cách cài đặt memcached và cho phép memcached.MemcachedCache backend.

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