关于Nodejs搭配数据库的一些疑惑(Mongodb vs mysql)

关于Nodejs搭配数据库的一些疑惑(Mongodb vs mysql)

刚看完一个用nodejs+Mongodb建立博客的例子。 在低访问量和低存储量的情况下,Mongodb并不比mysql占多少优势,为什么这么多人选用Mongodb而不是mysql呢?

11 回复

关于Nodejs搭配数据库的一些疑惑(Mongodb vs mysql)

引言

最近我在学习如何使用Node.js与数据库进行交互,尤其关注MongoDB和MySQL这两种流行的数据库。我发现尽管在低访问量和低存储量的情况下,MongoDB并不比MySQL表现出显著的优势,但仍然有很多人选择MongoDB。那么,究竟是什么因素使得MongoDB如此受欢迎呢?

MongoDB vs MySQL

1. 数据模型

  • MongoDB: 是一种NoSQL数据库,采用文档模型。数据以JSON格式存储,非常适合处理半结构化或非结构化的数据。
  • MySQL: 是一种关系型数据库,采用表结构。每一行数据都严格遵循定义的模式。

2. 扩展性

  • MongoDB: 设计之初就考虑了横向扩展,通过分片技术可以轻松地将数据分布在多个服务器上。
  • MySQL: 虽然可以通过主从复制和分区来提高性能,但在处理大规模数据时可能会遇到瓶颈。

3. 灵活性

  • MongoDB: 提供了丰富的查询功能,支持嵌套查询、聚合操作等。
  • MySQL: 功能强大,但相对复杂,对于一些复杂的查询需要编写更多的SQL语句。

4. 性能

  • MongoDB: 在处理大量数据时表现优异,尤其是在读写速度方面。
  • MySQL: 对于小规模的数据集,性能表现稳定且可靠。

示例代码

使用MongoDB连接和插入数据

const { MongoClient } = require('mongodb');

async function main() {
    const uri = "mongodb+srv://<username>:<password>@cluster0.mongodb.net/test?retryWrites=true&w=majority";
    const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

    try {
        await client.connect();
        console.log("Connected to MongoDB");

        const db = client.db('mydb');
        const collection = db.collection('users');

        const user = { name: 'John Doe', email: 'john@example.com' };
        const result = await collection.insertOne(user);
        console.log(`Inserted document with id: ${result.insertedId}`);
    } finally {
        await client.close();
    }
}

main().catch(console.error);

使用MySQL连接和插入数据

const mysql = require('mysql');

const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'mydb'
});

connection.connect((err) => {
    if (err) throw err;
    console.log("Connected to MySQL");

    const query = 'INSERT INTO users (name, email) VALUES (?, ?)';
    const values = ['John Doe', 'john@example.com'];

    connection.query(query, values, (err, result) => {
        if (err) throw err;
        console.log(`Inserted document with id: ${result.insert_id}`);
    });
});

connection.end();

结论

虽然在低访问量和低存储量的情况下,MongoDB和MySQL之间的差异可能不明显,但MongoDB在扩展性、灵活性和处理大规模数据的能力上具有显著优势。因此,在设计应用程序时,应根据具体需求选择合适的数据库。


mongo的原生查询语言是js,用my你还要学SQL。。。

入门门槛mongo比RDBMS要低很多

有Mongodb的教程吗,学习学习!!

我本人对于Mongodb也不是很熟悉,我看的帖子是这个http://eyecm.com/node-js-tutorial-chapter-1-express-mongodb-build-multiplayer-blog/

Mongodb简单,方便。 mysql复杂,麻烦。

可以去看那个mongodb权威指南。个人感觉那个讲的比较清楚。另外还推荐7周7数据库,里面也讲了mongo,顺带讲了其他现在常见的数据库。

如果之前对 mysql 有一定了解的话。并不建议因为使用的是 node 而去使用 mongo,坑深着呢

mysql有了解,有E-R。mongo就没了解过了,只知道一堆json串。对这个也挺纠结的,不清楚为什么mongo坑深呢?

不用写sql真是一件幸福的事情。我现在的项目里面不少地方就是因为sql效率问题,天天在改。

sql入门容易,精通难。同样的结果,不同的写法,执行起来区别可大了。还有那er图,存同样的数据,不同的画法,对空间,对效率区别可大了。mongodb应该不存在这个问题。只要集合划分的合理即可。

还有第一范式,第二范式,需要自己根据实际需求来权衡,没有最好的概念。在sql的世界里,都是相对的。这需要极有经验的人来处理。1G的数据和100G的数据,在sql里面优化的办法就不一样,总之就是随着业务量的增长,总是在改sql,改er图。

mongodb还没深入了解

在低访问量和低存储量的情况下,选择使用MongoDB还是MySQL主要取决于具体的应用需求、数据模型以及开发者的偏好。以下是一些关于MongoDB和MySQL特性的对比,帮助你理解为什么有些人更倾向于选择MongoDB。

数据模型

  • MySQL 是一种关系型数据库,采用结构化的表格形式存储数据。它支持ACID事务,适合处理复杂的查询和多表关联操作。

  • MongoDB 是一种文档型数据库,以JSON格式存储数据。它提供了更灵活的数据模式,支持动态变化的字段和嵌套文档,适用于处理非结构化或半结构化数据。

性能

  • 对于低访问量的情况,两者的性能差异可能不明显。但在高并发场景下,MongoDB由于其无锁设计可以提供更高的吞吐量。

灵活性

  • MongoDB的灵活性使得它非常适合快速迭代开发,尤其是在早期阶段,业务逻辑可能会频繁变更。

示例代码

使用MongoDB

const { MongoClient } = require('mongodb');

async function main() {
    const uri = "your_mongodb_connection_string";
    const client = new MongoClient(uri);

    try {
        await client.connect();
        console.log("Connected successfully to server");
        
        const database = client.db('blog');
        const collection = database.collection('posts');
        
        // 插入一条记录
        const post = { title: 'Hello World', content: 'This is my first post' };
        const result = await collection.insertOne(post);
        console.log(`A document was inserted with the _id: ${result.insertedId}`);
        
        // 查询所有记录
        const allPosts = await collection.find({}).toArray();
        console.log(allPosts);
    } finally {
        await client.close();
    }
}

main().catch(console.error);

使用MySQL

const mysql = require('mysql');

const connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'password',
    database: 'blog'
});

connection.connect((err) => {
    if (err) throw err;
    console.log("Connected!");
    
    // 插入一条记录
    const post = { title: 'Hello World', content: 'This is my first post' };
    connection.query(
        'INSERT INTO posts SET ?', post,
        (error, results, fields) => {
            if (error) throw error;
            console.log('The record was inserted with ID: ' + results.insertId);
        }
    );
    
    // 查询所有记录
    connection.query('SELECT * FROM posts', (error, results, fields) => {
        if (error) throw error;
        console.log(results);
    });
});

总结

尽管在低访问量情况下两者可能没有显著区别,但MongoDB因其灵活的数据模型和无锁设计,在处理大量数据或需要快速迭代时可能更具优势。选择哪种数据库还需根据项目具体需求来决定。

回到顶部