关于Nodejs搭配数据库的一些疑惑(Mongodb vs mysql)
关于Nodejs搭配数据库的一些疑惑(Mongodb vs mysql)
刚看完一个用nodejs+Mongodb建立博客的例子。 在低访问量和低存储量的情况下,Mongodb并不比mysql占多少优势,为什么这么多人选用Mongodb而不是mysql呢?
关于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因其灵活的数据模型和无锁设计,在处理大量数据或需要快速迭代时可能更具优势。选择哪种数据库还需根据项目具体需求来决定。