Membatasi Pencarian Pada Kolom Tertentu di Django

Ini salah satu tips untuk melakukan query secara lebih efisien dan cepat, dalam kasus ini membatasi pencarian hanya pada kolom tertentu yang kita butuhkan. Misal saya ingin mencari nilai kolom id dari model Collection, maka query yang saya lakukan adalah:

from myapp.models import Collection

ids = Collection.objects.filter(done=True).values('id')

Tentang Caching di Django

Sedikit cerita tentang cache backend, saya menggunakan redis sebagai default cache backend di django, ini juga berarti redis saya gunakan untuk:

  • fungsi decorator cache_page
  • cache query database
  • dependensi python-rq
  • dependensi django-cachalot

Kejadian server bolak-balik mati karena service redis gagal terhubung, akhirnya saya ubah redis hanya untuk dependensi python-rq saja, selainnya saya menggunakan memcached. Dan untuk sementara problem error connection di redis teratasi.

[UPDATE]: Sampai saat ini, kurang lebih 12 jam sejak beralih dari redis ke memcached, problem redis error connection ndak muncul, semoga terus anteng si server.

Tentang Query Random

Sebenarnya tema optimasi ini tidak terbatas pada python/django aja sih, bisa bahasa apa pun. Kadangkala dalam sebuah project kita butuh untuk menampilkan data secara random, entah itu random user, random post maupun random-random lainnya. Jika data masih sedikit (< 50k rows) mungkin tidak terlalu masalah, namun akan menjadi masalah kalau data sudah di atas 50.000 baris dengan model relasi yang cukup kompleks. Bagaimana cara yang efisien?

Continue reading “Tentang Query Random”

Pencarian Full-Text di Django

Tambahkan baris berikut di settings.py, pada bagian INSTALLED_APPS

INSTALLED_APPS = [
 ...
 ...
 'django.contrib.postgres',
 ...
]

Kemudian ganti fungsi query yang biasanya menggunakan icontains dengan search, seperti dalam contoh berikut:

>>> Quote.objects.filter(quote_text__search='love')

Ini, contoh sederhana sih, query lebih lanjut silakan explore sesuai kebutuhan.