Meningkatkan Kinerja Django Bagian 1: Pengoptimalan Basis Data Oleh Esther Watt | Juni 2022

Programming

[ad_1]
Halo Teman-teman di suratpembaca.web.id. Hari ini kita akan mengupas tentang Linux yaitu Meningkatkan Kinerja Django Bagian 1: Pengoptimalan Basis Data Oleh Esther Watt | Juni 2022

.

Semoga postingan mengenai Meningkatkan Kinerja Django Bagian 1: Pengoptimalan Basis Data Oleh Esther Watt | Juni 2022

bisa memberikan manfaat bagi Teman-teman semua. Yuk baca postingan ini
hingga tuntas.

Bagian 1: Pengoptimalan Basis Data

Foto oleh Ivan Diaz di Unsplash

Tujuan utama pengoptimalan dalam proyek Django adalah untuk melakukan kueri basis data dengan cepat, memastikan bahwa proyek Anda dijalankan dengan penggunaan terbaik dari sumber daya sistem. Database yang dioptimalkan dengan baik akan mengurangi waktu respons dan menghasilkan pengalaman pengguna yang lebih baik.

Dalam seri 4-bagian ini, Anda akan belajar bagaimana mengoptimalkan area yang berbeda dari program Django.

Bagian ini berfokus pada pengoptimalan basis data untuk kecepatan dalam aplikasi Django.

Memahami cara kerja kumpulan kueri menghasilkan kode yang lebih baik. Sebelum pengoptimalan apa pun, mulailah dengan memahami konsep-konsep ini:

  1. Koleksi kueri malas: Anda dapat menulis sejumlah kueri, tetapi Django hanya meminta dari database saat kueri dievaluasi.
  2. Selalu batasi hasil yang Anda dapatkan dari database dengan menentukan jumlah nilai yang harus dikembalikan.
  3. Di Django Anda dapat mengevaluasi diri sendiri queryset Dengan metode berulang, pemotongan, cache, dan seperti python len()kan count()Dll, jadi pastikan Anda memanfaatkannya sebaik mungkin.
  4. Django menyimpan cache setiap set kueri untuk meminimalkan akses basis data. Memahami cara kerja cache memungkinkan Anda menulis kode yang lebih baik dan lebih efisien.
  5. Ambil hanya apa yang Anda butuhkan
  6. Jika Anda pikir Anda akan menggunakannya nanti, pulihkan semuanya sekaligus
  7. Selalu lakukan pekerjaan basis data alih-alih Python di basis data

Basis data adalah inti dari aplikasi apa pun. Bertentangan dengan kepercayaan banyak orang, kompleksitas tidak selalu menjamin kinerja. Karena sifatnya yang open source, Postgresql adalah basis data pilihan untuk aplikasi Django, serta ideal untuk kueri kompleks.

Untuk mengoptimalkan kueri dalam program Django apa pun, kami akan mencakup area berikut untuk pengoptimalan basis data, yaitu:

  1. Pengindeksan basis data
  2. menyimpan
  3. Pilihan terkait versus pengambilan terkait
  4. Metode massal
  5. RawSql
  6. Kunci eksternal

Pengindeksan basis data adalah teknik yang digunakan untuk mempercepat kueri saat mengambil catatan dari basis data. Saat bekerja dengan database besar yang menghasilkan banyak data, pengindeksan adalah tindakan yang tidak dapat dinegosiasikan untuk mempercepat aplikasi Anda.

Saat aplikasi menjadi lebih signifikan, kecepatannya mungkin melambat dan pengguna akan menyadarinya karena butuh banyak waktu untuk menerima data yang diminta. Untuk mengilustrasikannya, kami menggunakan contoh toko e-commerce yang memiliki produk meja dengan model berikut.

Seiring bertambahnya basis data, Anda mungkin mendapati bahwa pemulihan data membutuhkan waktu lama. Misalnya, Anda ingin menerapkan indeks ke kolom harga untuk meningkatkan kecepatan pencarian di kolom.

price = models.DecimalField(decimal_places= 2,max_digits=8,db_index=True)

Setelah menerapkan indeks, Anda harus menjalankan migrasi untuk membuat indeks.

Penting juga untuk dicatat bahwa jika tabel memiliki banyak baris, pembuatan indeks membutuhkan waktu lebih lama. Anda juga dapat membuat satu daftar untuk dua bidang:

Penyimpanan basis data adalah cara terbaik untuk merespons dengan cepat. Ini memastikan bahwa beberapa kontak dibuat ke database dan mencegah kelebihan database. Struktur cache standar akan terlihat seperti ini:

Django menyediakan mekanisme cache yang dapat memanfaatkan berbagai cadangan penyimpanan seperti Memcached dan Redis yang memungkinkan Anda menghindari banyak permintaan.

Memcached adalah sistem memori open source yang sederhana namun kuat yang dijamin akan mengembalikan hasil yang disimpan dalam waktu kurang dari satu milidetik. Memcached juga mudah digunakan dan terukur.

Redis, di sisi lain, juga merupakan sistem cache open source yang menawarkan kemampuan yang sama dengan Memcached. Sebagian besar aplikasi offline menggunakan data yang disimpan sebelumnya, yang berarti bahwa sebagian besar permintaan bahkan tidak mencapai database.

Sesi pengguna harus disimpan dalam cache di aplikasi Django Anda, dan karena redis menyimpan data pada disk, tidak semua sesi untuk pengguna yang masuk berasal dari database tetapi di-cache. Untuk mengaktifkan cache database redis, Anda harus menginstal redis melalui pip.

pip install redis

Setelah menginstal redis, tambahkan kode berikut ke file settings.py:

Anda juga dapat menggunakan Memcached dan Redis untuk menyimpan token otentikasi pengguna. Karena setiap pengguna yang masuk harus menyediakan token, semua operasi ini dapat menyebabkan overhead yang tinggi pada database. Menangkap token dari cache menghasilkan database dengan kinerja yang jauh lebih cepat.

Django menyediakan parameter untuk mengoptimalkan Querysest Anda yang disebut Select related dan prefetch_related. Kedua metode ini mengurangi jumlah kueri yang dilakukan dalam database. Sebagai contoh, perhatikan model berikut dengan 2 tabel.

Tabel orang memiliki banyak hubungan dengan tabel Tweet, misalnya, satu orang dapat memiliki banyak tweet, tetapi satu tweet hanya dapat dimiliki oleh satu orang. Misalkan Anda ingin mengetahui detail semua tweet di database Anda, Anda terlebih dahulu mengambil semua tweet.

Untuk informasi tambahan seperti first_names Dan last_name Kemudian lakukan kueri tambahan sebagai berikut:

Ini menghasilkan 9 kueri seperti yang ditunjukkan di atas.

pilih_terkait

Dengan select_related, Anda bisa membuat kueri yang mengembalikan semua objek terkait untuk hubungan satu-ke-banyak dan satu-ke-satu untuk sampel. pilih_kueri terkait digunakan dalam hubungan kunci eksternal untuk mengambil data terkait tambahan apa pun saat menjalankan kueri.

Meskipun select_related menghasilkan kueri yang lebih kompleks, data yang diperoleh disimpan dalam cache. Oleh karena itu, memanipulasi data yang diperoleh tidak memerlukan permintaan basis data tambahan.

Mari kita lakukan pertanyaan yang sama dengan select_related.

queryset = Tweet.objects.select_related('owner').all()

Kode di atas menerima semua tweet dan data orang-orang sekaligus dan hanya membuat satu kueri.

prefetch_related

prefetch_relatedDi sisi lain, ini digunakan dalam hubungan multi-ke-multiple dan multi-to-one. Ini menghasilkan kueri untuk semua model dan filter yang ditentukan dalam kueri.

Misalnya, Anda memiliki model berikut:

Mari kita ambil semua film dan aktor terkait:

Seperti yang Anda lihat di atas, setiap iterasi mengarah ke kueri tambahan.

Sekarang mari kita gunakan prefetch untuk menjalankan kueri yang sama.

Seperti yang Anda lihat di atas, jumlah kueri saat ini adalah 2, kueri pertama mengambil semua video dalam database, dan kueri kedua dan ketiga hanya menghasilkan satu kueri.

Kategorisasi adalah metode lain dari operasi kode untuk mengambil kueri.

Saat Anda perlu menambahkan beberapa record ke database, cara paling efisien adalah dengan membuat semua objek sekaligus. Untungnya Django menyediakan bulk_create() Metode untuk tujuan itu, alih-alih membuat setiap instance sekaligus dan kemudian mengembalikannya, yang membebani database, bulk_create Menjalankan semua sampel dan menyimpan kueri:

Anda juga bisa melakukannya bulk_create Dan bulk_update(). Misalnya, Anda perlu memperbarui kolom di database Anda dengan nilai tertentu. Ini adalah cara yang paling efisien untuk digunakan bulk_update Sebagai berikut.

Model.objects.filter(name= 'name').update(name='someothername')

RawSQL tidak disarankan karena Django menawarkan mekanisme kueri kelas satu yang menjamin … fungsi apa pun yang dapat Anda pikirkan.

Django ORM dapat melakukan hampir semua fungsi yang diperlukan dalam aplikasi Anda, tetapi kadang-kadang mungkin diperlukan. Melakukan kueri SQL dalam database alih-alih Python menghasilkan kinerja yang lebih cepat. RawSQL harus digunakan sebagai pilihan terakhir.

Kunci eksternal juga dapat digunakan untuk mengambil data dalam database tanpa tekanan tambahan. Misalnya, jika Anda ingin mendapatkan pemilik tweet, cara yang disarankan dan paling efektif adalah:

tweet = Tweet.objects.get(id=1).owner

Memantau operasi database Anda dalam produksi adalah praktik yang baik. Ini memungkinkan Anda untuk melihat kueri yang berjalan terhadap database Anda dan kesalahan yang terjadi. Anda dapat melakukan ini dengan melihat laporan Postgres atau Django Anda. Untuk kenyamanan, Sentry adalah alat yang hebat untuk memantau operasi basis data.

Sentry menyediakan dasbor untuk memantau operasi basis data dalam aplikasi Django. Jika terjadi kesalahan terkait database, Anda dapat melihatnya secara real time dan memperbaikinya sebelum pengguna menyadarinya.

Kesalahan produksi bisa sulit dideteksi karena Anda tidak perlu melakukan debug. Sentry memecahkan masalah ini dengan memungkinkan Anda melihat kesalahan apa pun di database Anda.

Untuk memulai, mulailah membuat akun Sentry di sini. Anda dapat memilih teknologi yang Anda gunakan. Pilih Django dan kemudian klik Buat proyek.

Selanjutnya, instal Sentry melalui pip.

pip install --upgrade sentry-sdk

Langkah terakhir adalah menambahkan kode berikut, yang mengintegrasikan kunci publik Anda ke dalam file settings.py dalam program Django.

https://Gist.github.com/essykings/5fb4630de1a789219b27f143d24ddaae

Sentry kini siap memantau aplikasi Anda.

Mari kita buat kesalahan database dalam database dan lihat apakah Sentry dapat menunjukkan kepada kita penyebabnya. Ini adalah kesalahan khas yang saya miliki di produksi lokal saya yang dihasilkan dari mengambil produk yang tidak ada dalam database.

Kesalahan ini muncul di dasbor Sentry Anda seperti yang ditunjukkan di bawah ini:

Django juga menyediakan alat seperti bilah alat Django Debug yang mengontrol basis data Anda dan memungkinkan Anda untuk melihat proses kueri dan respons dalam waktu nyata. Ini juga memungkinkan Anda melihat berapa lama waktu yang dibutuhkan setiap respons untuk mendapatkan data dari database.

Metode yang disarankan untuk menginstal toolbar debugging Django adalah dengan menggunakan pip:

python -m pip install django-debug-toolbar

Setelah Anda menginstal toolbar debug Django, itu harus dikonfigurasi dalam proyek Django.

Tangkapan layar di bawah ini menunjukkan toolbar Django Debug beraksi:

Bug dalam menggunakan toolbar debug Django ditambahkan saat merender halaman dan karena itu tidak cocok untuk membangun. Sentry lebih disukai karena memungkinkan Anda tetap mengetahui bug, menyediakan pelacakan database yang akurat, dan juga memungkinkan Anda memecahkan masalah.

Tutorial ini mencakup cara-cara di mana Django dapat digunakan untuk meningkatkan kinerja program Django, serta mudah diimplementasikan. Cobalah dan tunggu bagian 2 hingga 4 dari seri ini.

Demikian artikel mengenai Meningkatkan Kinerja Django Bagian 1: Pengoptimalan Basis Data Oleh Esther Watt | Juni 2022

, terimakasih sudah berkunjung di website saya, semoga postingannya ada manfaatnya ya.

[ad_2]

Source link

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan.