MongoDB和MySql是目前最常用的两种数据库。面对一个应用场景,选择Mongodb还是MySql,哪一个更合适?
弄清两者的区别,就是对这个问题最好的回答。从schema、事务支持、关联查询三个方面进行说明。
schema
schema可以理解为约束。MySql的每个数据表都有一个schema,指明了每个字段的类型,这些类型就是对写入数据的约束。例如,一个字段为int型的字段,写入”helloworld”就会因类型不匹配而报错,导致写入失败;一个int unsigned类型的字段,写入-1同样会报错。
schema除了可以约束字段类型,还可以约束索引。例如建立一个唯一索引(userid,classid),假定数据库中已经有一条(userid=100,classid=1)的记录,如果此时再尝试写入一条userid=100,classid=1的数据,就会因为违反了唯一索引的限制而导致写入失败。
MongoDB作为一种schemaless的数据库,对写入的数据是没有类型限制的,这一点也是MongoDB与MySql之间最重要的一个区别。
如果一个应用的数据结构比较固定,需要约束字段类型和索引,则选用MySQL是合适的,反之则应该选用MongoDB。
事务支持
MySQL的InnoDB存储引擎支持事务,这使得MySQL适合那些对一致性要求较高的应用,在代码运行异常或出现业务异常时可以及时回滚。
截至目前最新的3.2版本,MongoDB还不支持事务。
如果一个应用场景需要更新多个表,在发生异常时需回滚数据,未发生异常时提交数据,选用MySQL是合适的。
关联查询
MySQL作为一种关系型数据库,天然支持联表查询。如果一个应用的数据结构需拆分成多个表,且表之间有关联关系,应选用MySQL。
Mongodb(<=3.2)不支持联表查询,这意味着一个查询只能针对一个表。