We are starting rewritting our apps (Internet portal, millions of unique users and few CRM/ERP systems, few hundred users) and we have a huge decision to make now. We are going to write them mostly (90-95%) in Symfony2 with Doctrine, and some background services (e.g. mailing) in Java. Database - MySql/MariaDb. also lot of additional technologies (redis/memcached, load balancing, varnish, replication and so on). Most important (in this case) are - symfony2, mysql/maria and doctrine.
The thing is - it will be best for few systems to work on same tables. For example: internet portal with job offers + CRM system for managing clients that pay for posting those offers (there are many similar cases). Also having functionality of one login for our users between every system is important.
I see two approaches here:
- We have one big database, having few hundred of tables. I used to work with 200+ tables, but not with that high amount of traffic. So if traffic goes up, sharding/partitioning will be involved.
- We have many databases, each for one app. If there is need for one app to communicate with another
DB, we will write special services to deliver that functionality.
Now, what I'm worried about: 1. ease of development - it's easier to just have one database 2. ease of configuration/assuring redudancy 3. performance
One thing I know now that database will be hosted on three machines with master-slave replication, which is supported nicely by Doctrine.
What are your thoughts? What are your pro's and con's? Thanks!