偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

設(shè)計(jì)實(shí)例對(duì)比:MySQL vs MongoDB

數(shù)據(jù)庫(kù) MySQL 其他數(shù)據(jù)庫(kù) MongoDB
MySQL是關(guān)系型數(shù)據(jù)庫(kù)中的明星,MongoDB是文檔型數(shù)據(jù)庫(kù)中的翹楚。下面通過(guò)一個(gè)設(shè)計(jì)實(shí)例對(duì)比一下二者。

MySQL是關(guān)系型數(shù)據(jù)庫(kù)中的明星,MongoDB是文檔型數(shù)據(jù)庫(kù)中的翹楚。下面通過(guò)一個(gè)設(shè)計(jì)實(shí)例對(duì)比一下二者:假設(shè)我們正在維護(hù)一個(gè)手機(jī)產(chǎn)品庫(kù),里面除了包含手機(jī)的名稱,品牌等基本信息,還包含了待機(jī)時(shí)間,外觀設(shè)計(jì)等參數(shù)信息,應(yīng)該如何存取數(shù)據(jù)呢?

如果使用MySQL的話,應(yīng)該如何存取數(shù)據(jù)呢?

如果使用MySQL話,手機(jī)的基本信息單獨(dú)是一個(gè)表,另外由于不同手機(jī)的參數(shù)信息差異很大,所以還需要一個(gè)參數(shù)表來(lái)單獨(dú)保存。

  1. CREATE TABLE IF NOT EXISTS `mobiles` ( 
  2.     `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
  3.     `nameVARCHAR(100) NOT NULL
  4.     `brand` VARCHAR(100) NOT NULL
  5.     PRIMARY KEY (`id`) 
  6. ); 
  7. CREATE TABLE IF NOT EXISTS `mobile_params` ( 
  8.     `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
  9.     `mobile_id` int(10) unsigned NOT NULL
  10.     `namevarchar(100) NOT NULL
  11.     `value` varchar(100) NOT NULL
  12.     PRIMARY KEY (`id`) 
  13. ); 
  14. INSERT INTO `mobiles` (`id`, `name`, `brand`) VALUES 
  15. (1, 'ME525''摩托羅拉'), 
  16. (2, 'E7'   , '諾基亞'); 
  17. INSERT INTO `mobile_params` (`id`, `mobile_id`, `name`, `value`) VALUES 
  18. (1, 1, '待機(jī)時(shí)間''200'), 
  19. (2, 1, '外觀設(shè)計(jì)''直板'), 
  20. (3, 2, '待機(jī)時(shí)間''500'), 
  21. (4, 2, '外觀設(shè)計(jì)''滑蓋');   

注:為了演示方便,沒(méi)有嚴(yán)格遵守關(guān)系型數(shù)據(jù)庫(kù)的范式設(shè)計(jì)。

如果想查詢待機(jī)時(shí)間大于100小時(shí),并且外觀設(shè)計(jì)是直板的手機(jī),需要按照如下方式查詢:

  1. SELECT * FROM `mobile_params` WHERE name = '待機(jī)時(shí)間' AND value > 100; 
  2. SELECT * FROM `mobile_params` WHERE name = '外觀設(shè)計(jì)' AND value = '直板';  

注:參數(shù)表為了方便,把數(shù)值和字符串統(tǒng)一保存成字符串,實(shí)際使用時(shí),MySQL允許在字符串類型的字段上進(jìn)行數(shù)值類型的查詢,只是需要進(jìn)行類型轉(zhuǎn)換,多少會(huì)影響一點(diǎn)性能。 www.yzyedu.com

兩條SQL的結(jié)果取交集得到想要的MOBILE_ID,再到mobiles表查詢即可:

  1. SELECT * FROM `mobiles` WHERE mobile_id IN (MOBILE_ID)  

如果使用MongoDB的話,應(yīng)該如何存取數(shù)據(jù)呢?

如果使用MongoDB的話,雖然理論上可以采用和MySQL一樣的設(shè)計(jì)方案,但那樣的話就顯得無(wú)趣了,沒(méi)有發(fā)揮出MongoDB作為文檔型數(shù)據(jù)庫(kù)的優(yōu)點(diǎn),實(shí)際上使用MongoDB的話,和MySQL相比,形象一點(diǎn)來(lái)說(shuō),可以合二為一:

  1. db.getCollection("mobiles").ensureIndex({ 
  2.     "params.name": 1, 
  3.     "params.value": 1 
  4. }); 
  5. db.getCollection("mobiles").insert({ 
  6.     "_id": 1, 
  7.     "name""ME525"
  8.     "brand""摩托羅拉"
  9.     "params": [ 
  10.         {"name""待機(jī)時(shí)間""value": 200}, 
  11.         {"name""外觀設(shè)計(jì)""value""直板"
  12.     ] 
  13. }); 
  14. db.getCollection("mobiles").insert({ 
  15.     "_id": 2, 
  16.     "name""E7"
  17.     "brand""諾基亞"
  18.     "params": [ www.yzjxsp.com 
  19.         {"name""待機(jī)時(shí)間""value": 500}, 
  20.         {"name""外觀設(shè)計(jì)""value""滑蓋"
  21.     ] 
  22. });  

如果想查詢待機(jī)時(shí)間大于100小時(shí),并且外觀設(shè)計(jì)是直板的手機(jī),需要按照如下方式查詢:

  1. db.getCollection("mobiles").find({ 
  2.     "params": { 
  3.         $all: [ 
  4.             {$elemMatch: {"name""待機(jī)時(shí)間""value": {$gt: 100}}}, 
  5.             {$elemMatch: {"name""外觀設(shè)計(jì)""value""直板"}} 
  6.         ] 
  7.     } 
  8. }); 

注:查詢中用到的$all,$elemMatch等高級(jí)用法的詳細(xì)介紹請(qǐng)參考官方文檔中相關(guān)說(shuō)明。

MySQL需要多個(gè)表,多次查詢才能搞定的問(wèn)題,MongoDB只需要一個(gè)表,一次查詢就能搞定,對(duì)比完成,相對(duì)MySQL而言,MongoDB顯得更勝一籌。

【編輯推薦】

  1. 教你如何利用MySQL學(xué)習(xí)MongoDB
  2. Craigslist采用MongoDB替代MySQL
  3. MySQL中的NoSQL插件
  4. SQL與NoSQL——MySQL與NoSQL的融合

 

責(zé)任編輯:艾婧 來(lái)源: haosola的博客
相關(guān)推薦

2011-08-02 16:08:52

NoSQLMongoDBCassandra

2021-12-01 10:18:08

MongoDBMySQL數(shù)據(jù)庫(kù)

2012-09-07 10:09:54

MySQLMongoDB云計(jì)算

2014-04-17 10:56:40

優(yōu)化策略MySQL緩存

2019-08-30 08:54:05

TypeScriptJavaScript語(yǔ)言

2021-12-06 20:39:34

AI

2018-01-10 15:03:27

前端TypeScriptJavaScript

2025-01-08 08:30:38

2022-08-27 21:31:04

Tauri框架二進(jìn)制

2012-03-15 00:06:56

Ubuntu Unity GNOME

2009-12-16 15:49:58

VS 2008性能

2009-12-14 17:04:32

VS 2008專業(yè)版

2024-10-09 11:31:51

2023-09-07 14:59:42

物聯(lián)網(wǎng)MQTTCoAP

2023-06-12 08:00:00

聊天機(jī)器人ChatGPT人工智能

2011-03-21 15:08:56

MongoDBCouchDB

2011-06-29 14:01:30

多數(shù)據(jù)庫(kù)實(shí)例效率

2011-08-19 09:06:17

Ubuntu 11.0Windows 7Mac OS X 10

2017-11-14 18:54:43

MySQLMongoDBNoSQL

2013-11-12 15:34:51

Linux桌面UbuntuWindows
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)