I think the main problem here is with the spots component. Since updating entries with components takes a longer time.
I would recommend to omit the component and create 3 new fields:
- spots__free
- spots__freeText
- spots__capacity
This will cost you less time to update the entry.
Components are good for static data, like blog articles, static websites and etc. But if you want to update them periodically(in your case every minute) then you should avoid using them.
To display them in API properly as an object, you can write a custom controller with a function that modified the results:
Example code:
const _ = require('lodash');
let entry = {
title: 'my super title',
spots__free: 'free here',
spots__freeText: 'freetext here',
spots__capacity: 'capacity here',
id: 1
};
entry.spots = {};
_.map(_.pickBy(entry , (value,key)=>_.startsWith(key,'spots__')), function(value, key) {
entry.spots[_.replace(key, 'spots__', '')] = value;
_.unset(entry , key);
});
Result:

P.S. I update more than 100k entries every 5-10minutes, without any performance issues.