一、數據類型與結構
1、MongoDB
{ _id: ObjectId("5f5e9296a7192e4c2c823d94"), name: "John", age: 25, hobbies: ["coding", "reading"] }
2、MySQL
CREATE TABLE persons ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(50) NOT NULL, age int(11) NOT NULL, PRIMARY KEY (id) );
對於數據類型的支持,MongoDB與MySQL都有自己獨特的方式。MongoDB支持JSON文檔,而MySQL則是關係型數據庫。在MongoDB中,JSON文檔可以包含嵌套數據結構和數組。這種結構非常適合文檔庫的建立,因為它可以使得對數據的查詢更加方便。而MySQL則需要很好地設計表結構,才能夠根據需要進行數據查詢和分析。
二、索引
1、MongoDB
db.collection.createIndex({name: 1}) db.collection.createIndex({age: -1})
2、MySQL
CREATE INDEX name_idx ON persons (name); CREATE INDEX age_idx ON persons (age);
索引對於數據庫的查詢性能有着舉足輕重的影響。在MongoDB中,類似於其他文檔型數據庫,使用B-tree索引來提高查詢性能。而在MySQL中,可以使用BTREE和HASH等多種索引類型來支持不同類型的查詢。相比於MongoDB,MySQL在索引方面有更多的靈活性,不過也需要更多的維護各種索引。
三、查詢語句
1、MongoDB
db.collection.find({age: {$gt: 20}}) db.collection.find({$and: [{age: {$gt: 20}}, {hobbies: "coding"}]}) db.collection.aggregate([{$group: {_id: "$name", count: {$sum: 1}}}])
2、MySQL
SELECT * FROM persons WHERE age > 20; SELECT * FROM persons WHERE age > 20 AND hobbies = 'coding'; SELECT name, COUNT(*) FROM persons GROUP BY name;
查詢是數據庫常用的功能之一。在MongoDB中,可以使用豐富的查詢語法,如AND/OR等邏輯操作符,以及比較操作符和聚合函數等。而在MySQL中,雖然查詢功能沒那麼強大,但是在實現基礎查詢時,其性能依然很出色。另外,MySQL還支持JOIN等高級的查詢語法。
四、分布式
1、MongoDB
var config = { _id: "rs0", members: [ { _id: 0, host: "mongodb1.example.net:27017" }, { _id: 1, host: "mongodb2.example.net:27017" }, { _id: 2, host: "mongodb3.example.net:27017" } ] }; rs.initiate(config);
2、MySQL
CREATE TABLE items ( id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, PRIMARY KEY (id) );
MongoDB和MySQL都支持分布式集群,可以通過不同節點實現數據的存儲和查詢。在MongoDB中,採用的是Replica Set機制,可以實現故障恢復和數據備份等功能。而MySQL則可以通過Cluster等方案來實現數據分散存儲和負載均衡。
五、可擴展性
1、MongoDB
sh.addShard("shard01/mongo1.example.net:27017,mongo2.example.net:27017"); sh.addShard("shard02/mongo3.example.net:27017,mongo4.example.net:27017"); sh.enableSharding("mydatabase"); sh.shardCollection("mydatabase.mycollection", { "shardkey": "hashed" });
2、MySQL
ALTER TABLE items ADD COLUMN amount INT NOT NULL DEFAULT 0;
對於需要擴展性的應用,MongoDB是比MySQL優勢更大。MongoDB支持水平擴展,並且自帶分片機制,可以輕鬆地將數據分散到多個機器上。而MySQL則需要手動進行分庫分表等操作,才能夠支持大規模數據存儲和查詢。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/183108.html