I have an iOS app that presents content in a tableView. I’ve added a ‘like/dislike’ feature that interacts with my database (I use Parse.com). Every time someone likes/dislikes a piece of content, the specifics are sent to the Parse database. For each piece of content, I’d like to calculate and display the percentage of ‘likes’ over ‘likes’ + ‘dislikes’. This is pretty simple math, but I can’t wrap my head around the best way of designing my database table and the most efficient way to calculate the ‘liked’ percentage for each piece of content before the tableView physically appears.
As it is, I already have a loop in my tableView’s viewDidLoad which compares the content from another database table to the ‘like/dislike’ table to restore the ‘like/dislike’ button state of the user (if they already liked/disliked a piece of content).
At first, I thought of creating an array in the initial viewDidLoadloop. However, using the whereKey: equalTo: type of query for each piece content to simply find the amount of likes/dislikes takes forever. As predicted, it is very slow in cellForRowAtIndexPath as well.
Worst case, I can make these calculations server-side and just pull the ‘liked’ percentage. However, I’d like to implement this in the app somehow. I’m a complete beginner, so I may be going about this all wrong.
Here is the basis of my database table:

Edit: I’ve managed to build a server-side program that calculates the percentage of users that ‘like’ pieces of content. My app pulls this percentage from the database at runtime. To make the percentage change more responsive when the user ‘likes’ something, I locally calculate an updated percentage. The problem here is when the user exits the app and reopens, the data reloads. If the server-side program had not run recently, the app will display an old ‘liked’ percentage (the most up to date % would not be calculated yet). The two solutions I see to fix this are:
- Run the server-side program every 1-3 min
- Post more data to the database when someone likes content (this would involve additional database queries for every single ‘like’).
I think both of these options are way too expensive for what I’m trying to accomplish.
I’d suggest leaving the calculations to the server side, and responding with the information to utilize in the app. This will save you from processing and parsing the incoming results.
You have greater processing power on a Server than on a device.