Despite the temptation of buying new servers and adding CPU and RAM – you need to do what you can with the code first. I am exploring and cataloguing these methods to speed up Django QuerySets before server scaling.
The general idea is simple – use more QuerySet methods instead of Python methods to avoid evaluation.
Just a short note to tell you about the fun I’ve having 😉
upd. I forgot to include the most important line in the Nginx config. Sorry for that. but it does not work for me anymore. I am confused but I am postponing this for a few days to finish top priority tasks.
As it always happens, 4am Sunday it well went to hell – Django create two instances of ‘2021-08-15’.
Eventually every requests that had this line in it just crashed.
Why did this happen? Well, apparently two instances are not supposed to be made.
My friends and I came to a conclusion that with a very high amount of requests Django missed that tiny bit of time between executing get_or_create method and actually writing an instance to PostgreSQL.
Well good thing - I went to bed late, and my team woke me up much earlier than I would wake up.
What is he solution? If the field is meant to be unique, make it unique:
date = DateField(unique=True)
I spent 6 hours today in Nginx configurations and logs, I learnt so much about Nginx and devops process. And in the end it was all because FireFox browser (I use desktop Ubuntu on my laptop) refused to connect to the server and get the sweet HTML pages I tried to serve it.
In particular, when I renounced attempts to serve HTML pages with explicitly stated location tags and launched my good old trusted Django and it STILL didn’t work (I got 499/403 in the access.log and 404 in the browser), I came to thinking something evil is going on here. It was an unexpected, and a bad one.
The moment I opened it in Google Chrome and it worked, dudes, if I was standing, I would fall that moment on my butt.
I immediately wrote to my Python friends "screw web, I will do webcam now". But, it was a rushed thought I soon gave up. Thankfully, I did not write that to my boss.
Following Channels’ docs I encountered yet another error the solution to what was not obvious right off the bat.
This was my original post in October 2020 and I stand by it.
You can make your project work with Google Firebase - it handles signals well enough. Yes it is primarily used by mobile developers, but overall it is fine for web too.
I spent trying to install Django Channels on my local Linux 18.04, and I kind of made it work, but then I had to deploy it... And as a professional backender you don't want to let people down.
I decided to try Channels because my Python-related friends talked about it. But days into the trouble I asked my friend about a certain step and he asked me in return "oh so [you use it because] they fixed Channels since two years ago?". I as like ??????????????????. So that moment I ditched it. Too much time wasted, but I like the result I achieved with Firebase.
What I am saying - Firebase is fast and universal. In a matter of days I managed to make and deploy an internal Customer Support chat service that connected mobile app users and a support from the web.</p>
I will be writing a new series on Django + Firebase, and this post is pretty much a short introduction.