django-cached-field

Software screenshot:
django-cached-field
Rincian Software:
Versi: 1.2.2
Tanggal Upload: 14 Apr 15
Pengembang: Martin Chase
Lisensi: Gratis
Popularitas: 2

Rating: 1.0/5 (Total Votes: 1)

Django-cache-bidang adalah aplikasi Django yang menyediakan Seledri-ditangguhkan, bidang cache pada Django ORM untuk mahal-to-menghitung data yang
Menggunakan Django ORM dan Seledri, tetap mahal-to-menghitung atribut up-to-date.
Contoh
Katakanlah Anda memiliki metode lambat pada salah satu model Anda:
Kelas Lamppost (models.Model):
& Nbsp; @ property
& Nbsp; def slow_full_name (self):
& Nbsp; tidur (30)
& Nbsp; kembali 'The% s% s dari% s'% (self.weight, self.first_name, self.country)
Ugh; terlalu lambat. Mari kita men-cache itu. Kami akan ingin beberapa alat. Seledri dengan Django-seledri perlu mengatur dan bersenandung bersama lancar. Kemudian kita akan menambahkan dalam bidang kita cache, mewarisi dari model mixin dan mengubah nama metode kami tepat:
dari django_cached_field impor CachedIntegerField, ModelWithCachedFields
Kelas Lamppost (models.Model, ModelWithCachedFields):
& Nbsp; slow_full_name = CachedTextField (null = True)
& Nbsp; def calculate_slow_full_name (self):
& Nbsp; tidur (30)
& Nbsp; kembali 'The% s% s dari% s'% (self.weight, self.first_name, self.country)
(Ya, calculate_ hanya konvensi. Saya jelas tidak menyerah rel hantu ...)
Selanjutnya, bermigrasi skema db Anda untuk memasukkan bidang cache baru menggunakan selatan, atau roll sendiri. Perhatikan bahwa dua bidang akan ditambahkan ke tabel ini, cached_slow_full_name jenis teks dan slow_full_name_recalculation_needed tipe boolean, mungkin default ke benar.
Sudah itu agak lebih baik. lamppost.slow_full_name dapat mengambil 30 detik pertama kali dipanggil untuk catatan yang diberikan, tetapi sejak saat itu, itu akan menjadi instan dekat. Tentu saja, pada saat ini, hal itu tidak akan pernah berubah setelah panggilan pertama.
Sisa bagian penting dari teka-teki adalah untuk membatalkan cache kita. Bidang konstituen thoses mungkin berubah dalam beberapa views.py (ini bisa lebih pintar tentang memperhatikan jika nilai yang relevan diperbarui):
render_to ("tiang lampu / edit.html")
def mengedit (permintaan, lamppost_id):
& Nbsp; tiang lampu = Lamppost.objects.get (pk = lamppost_id)
& Nbsp; jika request.METHOD == 'POST':
& Nbsp; bentuk = LamppostForm (request.POST)
& Nbsp; jika form.is_valid ():
& Nbsp; form.save ()
& Nbsp; form.instance.flag_slow_full_name_as_stale ()
& Nbsp; lain:
& Nbsp; bentuk = LamppostForm ()
& Nbsp; kembali {'bentuk': bentuk, 'tiang lampu': tiang lampu}
Ini adalah bagian tersulit sebagai pengembang! Caching mengharuskan Anda memburu setiap tempat nilai bisa berubah dan memanggil metode flag_slow_full_name_as_stale. Adalah negara diberi nilai baru acak setiap pagi di cron'o'clock? Bendera yang telah terbaik basi oleh cron'o'one. Apakah Anda menghitung berat berdasarkan jumlah semua merpati terkait? Menghubungkan ke merpati pendaratan. Dan lepas landas. Dan segala sesuatu yang berubah seberat merpati individu. Seperti kata Abraham Lincoln, "Hanya ada dua masalah yang sulit dalam pemrograman. Penamaan, cache pembatalan dan off-per-satu kesalahan"
Instalasi
Anda dapat membuat hal-hal mudah pada diri Anda sendiri:
pip menginstal Django-cache-bidang
Atau, untuk instalasi manual, Anda dapat mengkloning repo dan menginstalnya menggunakan python dan setup.py:
git clone git: //github.com/aquameta/django-cached-field.git
cd Django cache-bidang /
python setup.py install
Diuji dengan Django 1.3.1, 2.3.1 seledri, Django-seledri 2.3.3.
Konfigurasi
Dua pengaturan perubahan cukup banyak diperlukan untuk hal-hal bekerja: pastikan itu adalah aplikasi yang terdaftar, pastikan seledri melihat berkas tugas:
INSTALLED_APPS + = ['django_cached_field',]
CELERY_IMPORTS + = ['django_cached_field.tasks',]
Salah satu perubahan adalah opsional: apakah perhitungan harus terjadi ketika ditandai sebagai basi (default) atau dibiarkan untuk waktu berikutnya atribut diakses. Hal ini berguna untuk lingkungan pengujian di mana Anda tidak peduli bahwa nilai-nilai cache Anda tidak valid. Perhatikan bahwa dalam situasi ini, Anda tidak perlu seledri.
CACHED_FIELD_EAGER_RECALCULATION = True # atau Salah untuk lingkungan pengujian
Ini adalah pilihan yang global, sehingga pengecualian individu harus bukannya ditangani dengan melewati argumen and_recalculate ke panggilan flag_FIELD_as_stale.
Peringatan
- Kondisi Balap jika Anda bendera lapangan sebagai basi dalam transaksi db yang memakan waktu lebih lama untuk selesai dari pekerjaan seledri diperlukan untuk disebut.
- Semua metode ORM (misalnya order_by, filter) harus menggunakan cached_FIELD.
- Recalculate_FIELD menggunakan .update (cached_FIELD = untuk menetapkan nilai.
- Flag_FIELD_as_stale menggunakan .update, serta

Persyaratan :

  • Python
  • .
  • Django

Komentar untuk django-cached-field

Komentar tidak ditemukan
Tambahkan komentar
Aktifkan gambar!