入坑数据库之mongodb和mysql比对

刚入坑数据库不久,各位数据库大牛轻喷。

本篇文章主要是对mysql和mongodb的简单比对和概念梳理。

数据库主流分类

  • Nosql database 非关系型数据库

  • RDBMS (Relational Database Management System)关系型数据库

mysql概述

mysql采用table和结构化的sql语句来处理数据,在mysql中需要预先定义数据结构schema,并定义table中数据字段的关系。

在mysql中,相关信息可以保存在不同的表中,通过join的形式来保持彼此关联。

mongodb概述

mongoDB采用类JSON的documents来存储数据。

在mongoDB的查询语句中,相关信息由于可以采用灵活的数据结构存储在一块,所以查询速率非常快。

mongoDB采用动态数据模型schema,这意味着不需要预先定义表的数据类型和字段名。

当mongoDB需要更新文档documents的时候,可以轻松增加新的字段名或者删除旧的字段。

mongo让数据结构更加层级化,因而存储数组等复杂数据结构。 在同一个集合collection中,文档document对字段也没有强约束,因此更容易设计差异化的数据结构。

mongoDB具备高扩展性和延展性和自动分片机制(auto-sharding)。

mongodb和mysql术语和概念比对

MySQLMongoDBTable CollectionRow DocumentColumn FieldJoins Embedded documents, linking

mongodb和mysql特性对比

MySQLMongoDBRich Data ModelNoYesDynamic SchemaNoYesTyped DataYesYesData LocalityNoYesField UpdatesYesYesEasy for Programmers NoYesComplex TransactionsYesNoAuditingYesYesAuto-ShardingNoYes

mongodb和mysql查询语句对比

    # MySQL
    INSERT INTO users (user_id, age, status)
    VALUES ('bcd001', 45, 'A')

    # MongoDB
    db.users.insert({
        user_id: 'bcd001',
        age: 45,
        status: 'A'
    })
    # MySQL
    SELECT * FROM users

    # MongoDB
    db.users.find()
    # MySQL
    UPDATE users SET status = 'C'
    WHERE age > 25

    # MongoDB
    db.users.update(
        { age: { $gt: 25 } },
        { $set: { status: 'C' } },
        { multi: true }
    )

为什么选择MongoDB而不是MySQL

大部分具备一定体量的公司都逐渐选择了mongodb以处理更多的数据类型和数据库扩展。

在MongoDB的开发下,documents的映射关系更加贴合了 OOP的编程语言,这样就减少了orm给应用带来的复杂性。

同时,MongoDB的数据类型灵活性让schema的扩展可以轻松的适应业务逻辑。

MongoDB可以轻松实现分布式数据中心和高延展性。

这在mysql时代是一件巨大的工程问题。

当你的数据体量达到海量级别的时候,Mysql需要严谨和个性化的工程工作 才能完成较好的数据扩展和迁移工作。

结语

本文大部分的内容翻译自mongodb官方,语句措辞比较粗糙。

如有技术术语不到位请在评论区指出。

本文首发于作者的github blog

    原文作者:slashhuang
    原文地址: https://zhuanlan.zhihu.com/p/26483750
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞