The Quest
We are working on a project that has a large data set. Normally we don’t have the privilege of knowing the size of the data in advance when we build a new system. Usually it’s created over time so this was a nice challenge.
For the back end we use Django Rest Framework – it’s kinda like a Database API that allows our Vue front end to Create/Read/Update and Delete Data (CRUD) but in this case the speed was too slow so I went looking for answers and here is what I found.
I tried a few solutions.
pRest
I liked the idea of a Golang server for speed and I have been looking into GoLang as a possible backend language myself as I like the idea of it.
It seemed to work pretty well and the speed was much improved on Django Rest Framework.
But there are some short comings.
- It appears to be Dead. Last commit was 2018 and that was a commit looking for funding.
- My Go lang skills are NOT up to the task of doing any fixes yet
- There are somethings missing. Things PostgREST has.
PostgREST
I was hesitant to look at this because of the Haskell thing. I have not used Haskell and I have no interest in learning it. (unlike Go I was prepared to get my hands dirty)
The Speed was not as good as pRest but much better than Django Rest Framework so it is a contenter.
Hasura
Hasura has also been on my radar for awhile. Once again the Haskell thing sort of put me off but I decided to give it a try.
I must say I was impressed with the console. And it worked well with my existing Django Rest data model. Including many to many fields.
I have reservations about Graphql. I am not sure why its not a JSON format but I also know JSON is NOT very good for this sort of thing.
Results
TLDR – Spoiler Alert – I went with Hasura
So I ran a test of my dataset that has 9.975 records. Here are the results
Speed (ms) | Improvement | |
---|---|---|
Django Rest Framework | 1232 | (baseline) |
pREST | 163 | 87% |
PostgREST | 260 | 79% |
Hasura | 230 | 86% |
Fetching 10,000 records in one go
As you can see Hasura was faster than PostgREST. I like the idea of a powerful query from the Front end so I am going to go with Hasura. I also like the look of the integrations that may make it easier to develop the apps. I also found the queries run quicker over time. When compiling this post I ran the query and got data in 140ms but then I thought I will restart the server and see if it’s the same result and it was slower (as above). Subsequent running of the same query gave quicker results.