jleach
Registered User.
- Local time
- Yesterday, 22:32
- Joined
- Jan 4, 2012
- Messages
- 307
Great post DocMan. It hits on a few of the many reasons we've decided not to go this route in the past.
Security aside, the maintenance window thing is a big one as well. Then we often have customer "weight" comparisons: does one large customers hog resources for 90% of the system while five small companies suffer the consequences? What if you want to roll out a feature for testing to a particular company prior to rolling out to all? Much more difficult with a shared database. What if one particular client has more stringent protection (or auditing) needs imposed by some regulatory entity that others customers don't need to adhere to?
While all of these scenarios come with some troubles in terms of developing and maintaining a shared codebase, having them all running in the same instances makes the job so much harder.
While it might seem like a bit more work initially to run different instances of your system components (e.g., databases) for each tenant, the long term payoffs are immense. Think of it as "normalizing your architecture" in the same way as how not bothering to normalize a database will put you dead in a corner later. We're not so much different in this either, but on a different scale.
Cheers,
Security aside, the maintenance window thing is a big one as well. Then we often have customer "weight" comparisons: does one large customers hog resources for 90% of the system while five small companies suffer the consequences? What if you want to roll out a feature for testing to a particular company prior to rolling out to all? Much more difficult with a shared database. What if one particular client has more stringent protection (or auditing) needs imposed by some regulatory entity that others customers don't need to adhere to?
While all of these scenarios come with some troubles in terms of developing and maintaining a shared codebase, having them all running in the same instances makes the job so much harder.
While it might seem like a bit more work initially to run different instances of your system components (e.g., databases) for each tenant, the long term payoffs are immense. Think of it as "normalizing your architecture" in the same way as how not bothering to normalize a database will put you dead in a corner later. We're not so much different in this either, but on a different scale.
Cheers,