Databases: SQL vs. NoSQL, Replication, and Sharding