As with most “management” systems, the best advice generally is to keep it simple.
Make sure that your map data includes some information about “spawn points” themselves and use pools to allocate new spawned items so that you are constantly recycling memory rather than allocating / destroying / reallocating.
Also with pools you should have a finite cap on how many there can be, so you will be able to gauge performance based on the size of the pool.
Have as many / few pools as you need for each item type, possibly better to split them up rather than one big spawn pool (depending on your implementation)
As for placement, have a simple function to determine placement based on distance from player and maximum placement count for a spawn point.
Hope this helps.