django-cached-field

Phần mềm chụp màn hình:
django-cached-field
Các chi tiết về phần mềm:
Phiên bản: 1.2.2
Ngày tải lên: 14 Apr 15
Nhà phát triển: Martin Chase
Giấy phép: Miễn phí
Phổ biến: 2

Rating: 1.0/5 (Total Votes: 1)

django-cache-field là một ứng dụng Django cung cấp Cần tây hoãn, lĩnh vực lưu trữ trên Django ORM cho tốn kém-to-tính toán dữ liệu
Sử dụng Django ORM và cần tây, giữ đắt-to-tính toán các thuộc tính để cập nhật.
Ví dụ
Giả sử bạn có một phương pháp chậm trên một trong những mô hình của bạn:
class cột đèn (models.Model):
& Nbsp;property
& Nbsp; def slow_full_name (tự):
& Nbsp; giấc ngủ (30)
& Nbsp; return '% s% s trong% s'% (self.weight, self.first_name, self.country)
Ugh; quá chậm. Hãy nhớ cache mà. Chúng tôi sẽ muốn có một vài công cụ. Cần tây với django-cần tây sẽ cần phải được thiết lập và ồn ào cùng thuận lợi. Sau đó chúng tôi sẽ thêm trong lĩnh vực lưu trữ của chúng tôi, kế thừa từ các mô hình mixin và đổi tên phương pháp của chúng tôi một cách thích hợp:
từ django_cached_field nhập CachedIntegerField, ModelWithCachedFields
class cột đèn (models.Model, ModelWithCachedFields):
& Nbsp; slow_full_name = CachedTextField (null = True)
& Nbsp; def calculate_slow_full_name (tự):
& Nbsp; giấc ngủ (30)
& Nbsp; return '% s% s trong% s'% (self.weight, self.first_name, self.country)
(Yeah, calculate_ chỉ là một quy ước. Tôi rõ ràng đã không cho lên đường ray ma ...)
Tiếp theo, di chuyển đồ db của bạn để bao gồm các lĩnh vực lưu giữ mới sử dụng nam, hoặc cuộn của riêng bạn. Lưu ý rằng hai lĩnh vực sẽ được bổ sung vào bảng này, cached_slow_full_name các loại văn bản và slow_full_name_recalculation_needed kiểu boolean, có thể mặc định là true.
Đã đó là kinda tốt hơn. lamppost.slow_full_name có thể mất 30 giây lần đầu tiên nó được gọi là một bản ghi nào đó, nhưng từ đó về sau, nó sẽ ngay lập tức đêm. Tất nhiên, vào thời điểm này, nó sẽ không bao giờ thay đổi sau khi cuộc gọi đầu tiên.
Phần quan trọng còn lại của câu đố là để làm mất hiệu lực bộ nhớ cache của chúng tôi. Lĩnh vực thành thoses có lẽ thay đổi trong một số views.py (điều này có thể trở nên thông minh hơn về ý nếu các giá trị có liên quan được cập nhật):
render_to ("cột đèn / edit.html")
def chỉnh sửa (yêu cầu, lamppost_id):
& Nbsp; cột đèn = Lamppost.objects.get (pk = lamppost_id)
& Nbsp; nếu request.METHOD == 'POST':
& Nbsp; hình thức = LamppostForm (request.POST)
& Nbsp; nếu form.is_valid ():
& Nbsp; form.save ()
& Nbsp; form.instance.flag_slow_full_name_as_stale ()
& Nbsp; khác:
& Nbsp; hình thức = LamppostForm ()
& Nbsp; trở lại {'form': hình thức, "cột đèn": cột đèn}
Đây là phần khó khăn nhất là các nhà phát triển! Caching yêu cầu bạn săn lùng khắp mọi nơi các giá trị có thể được thay đổi và gọi là phương pháp flag_slow_full_name_as_stale. Là đất nước chỉ định một giá trị mới ngẫu nhiên mỗi buổi sáng tại cron'o'clock? Lá cờ đó đã tốt nhất là cũ bởi cron'o'one. Để bạn tính toán trọng lượng dựa trên số tiền của tất cả các con chim bồ câu có liên quan? Móc vào chim bồ câu hạ cánh. Và khi cất cánh. Và tất cả mọi thứ thay đổi trọng lượng một chim bồ câu của từng cá nhân. Như Abraham Lincoln nói: "Chỉ có hai vấn đề khó khăn trong lập trình:. Đặt tên, bộ nhớ cache và huỷ bỏ hiệu lực off-by-một lỗi"
Cài đặt
Bạn có thể làm cho mọi việc dễ dàng với bản thân:
pips cài đặt django-cache-field
Hoặc, cho tiến trình cài đặt, bạn có thể sao chép các repo và cài đặt nó bằng cách sử dụng python và setup.py:
git clone git: //github.com/aquameta/django-cached-field.git
cd django-cache-field /
python setup.py cài đặt
Thử nghiệm với django 1.3.1, 2.3.1 cần tây, cần tây django-2.3.3.
Cấu hình
Hai thay đổi thiết lập được khá nhiều yêu cầu cho những thứ để làm việc: chắc chắn rằng nó là một ứng dụng đăng ký, hãy chắc chắn cần tây thấy tập tin nhiệm vụ của mình:
INSTALLED_APPS + = ['django_cached_field',]
CELERY_IMPORTS + = ['django_cached_field.tasks',]
Một thay đổi là tùy chọn: cho dù tính toán lại nên xảy ra khi gắn cờ như cũ (mặc định) hoặc được để lại cho thời gian tiếp theo thuộc tính được truy cập. Điều này rất hữu ích cho các môi trường thử nghiệm mà bạn không quan tâm rằng các giá trị được lưu trữ của bạn không hợp lệ. Lưu ý rằng trong tình huống này, bạn sẽ không cần cần tây.
CACHED_FIELD_EAGER_RECALCULATION = True # hoặc False cho các môi trường thử nghiệm
Đây là một lựa chọn toàn cầu, vì vậy trường hợp ngoại lệ riêng lẻ thay vì phải được xử lý bằng cách thông qua các tham số and_recalculate để gọi flag_FIELD_as_stale.
Hãy cẩn thận
- Race điều kiện nếu bạn cờ một lĩnh vực như cũ trong một giao dịch db mà phải mất nhiều thời gian để hoàn thành hơn công việc cần tây cần để được gọi là.
- Tất cả các phương pháp ORM (ví dụ order_by, bộ lọc) cần phải sử dụng cached_FIELD.
- Recalculate_FIELD sử dụng .update (cached_FIELD = để thiết lập giá trị.
- Flag_FIELD_as_stale sử dụng .update, cũng

Yêu cầu :

  • Python
  • .
  • Django

Ý kiến ​​để django-cached-field

Bình luận không
Nhập bình luận
Bật hình ảnh!