NoSQL(3)

1、什么是MongoDB ?

MongoDB 是由C++語言編寫的,是一個基于分布式文件存儲的開源數據庫系統。

在高負載的情況下,添加更多的節點,可以保證服務器性能。

MongoDB 旨在為WEB應用提供可擴展的高性能數據存儲解決方案。

MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成。

MongoDB 文檔類似于 JSON 對象。字段值可以包含其他文檔,數組及文檔數組。

2、MongoDB特性

MongoDB是一個可擴展、高性能的下一代數據庫,它的特點是高性能、易部署、易使用、存儲數 據方便,主要特性有:

? 面向文檔存儲,json格式的文檔易讀、高效;

? 模式自由,支持動態查詢、完全索引,無模式;

? 高效的數據存儲,效率提高;

? 支持復制和故障恢復;

? 以支持云級別的伸縮性,支持水平數據庫集群,可動態添加額外服務器;

3、MongoDB的工作方式

傳統的關系型數據庫一般有數據庫(database)、表(table)、記錄(record)三級層次構成。

MongoDB同樣是由數據庫(database)、集合(collection)、文檔對象(documen)三個層次組 成。

文檔 類似于json的鍵值對。{"name":"tom","age":23} 集合 一組文檔的集合。

4、MongoDB局限與不足

32位系統上,不支持大于2.5G的數據。

單個文檔大小限制為16M。

鎖粒度太粗,MongoDB使用一把全局讀寫鎖。

不支持join操作和事務機制 對內存要求比較大,至少要保證熱數據(索引,數據及系統其他開銷)都能裝進內存

用戶權限方面較弱 MapReduce在單個實例上無法運行,可用Auto-Sharding實現,是由JS引擎限制造成。

MapReduce的結果無法寫入到一個被Sharding的collection中,待后續版本解決

對于數組型的數據操作不夠豐富

?

1、使用yum在線安裝MongoDB?

配置yum源

[mongodb-enterprise]
name=MongoDB Enterprise Repository
baseurl=https://repo.mongodb.com/yum/redhat/$releasever/mongodb-enterprise/4.2/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc

[root@localhost yum.repos.d]# yum list | grep -i mongodb

重點關注:libmysqlclient.so.18()(64bit)
解決:
缺少Percona-XtraDB-Cluster-shared-55-5.5.37-25.10.756.el6.x86_64.rpm這個包
# wget http://www.percona.com/redir/downloads/Percona-XtraDB-Cluster/5.5.37-25.10/RPM/rhel6/x86_64/Percona-XtraDB-Cluster-shared-55-5.5.37-25.10.756.el6.x86_64.rpm
# rpm -ivh Percona-XtraDB-Cluster-shared-55-5.5.37-25.10.756.el6.x86_64.rpm?

我們下載完后,啟動服務就行了。這也太慢了

?

2、源碼安裝MongoDB并配置服務腳本?

下載軟件包:

鏈接:https://pan.baidu.com/s/1GfDaKYbaKBK5xHln8qspMg?
提取碼:yang?

解壓:

tar xf mongodb-linux-x86_64-rhel70-3.4.7.tgz ?-C /usr/local/

創建數據目錄:

啟動:

echo "export PATH=$PATH:/usr/local/mongodb/bin" > /etc/profile.d/mongo.sh

source /etc/profile.d/mongo.sh

mongod --dbpath /data/db/ &

?ps -ef | grep mongod

netstat -lnupt | grep 27017

lsof -i tcp:27017

以系統服務方式啟動:(服務腳本沒有成功,有待修正)

創建配置文件mongod.conf

vim /usr/local/mongodb/bin/mongod.conf

systemLog:
destination: file?
path: /usr/local/mongodb/log/mongodb.log?
logAppend: true
storage:
dbPath: /usr/local/mongodb/data?
processManagement:
fork: true?

?

按配置文件設置創建日志和數據文件存放目錄:

[root@localhost ~]# mkdir -p /usr/local/mongodb/{data,log}

配置mongodb.service文件

vim /usr/lib/systemd/system/mongodb.service

[Unit]
Description=mongodb service daemon
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/mongodb/bin/mongod -f ?/usr/local/mongodb/bin/mongod.conf
ExecStop=/usr/local/mongodb/bin/mongod --shutdown -f ?/usr/local/mongodb/bin/mongod.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target

?

保存mongodb.service文件后,需要輸入命令進行重新加載.

3、基本操作作業?

1)創建一個數據庫 名字grade?

use grade


2)數據庫中創建一個集合名字 class?

db.createCollection('class')

3)集合中插入若干數據 文檔格式如下 {name:'zhang',age;10,sex:'m',hobby:['a','b','c']} hobby: draw sing dance basketball football pingpong computer?


自行插入數據,后面查詢使用?
4)查詢操作?
查看班級所有人信息?

db.class.find()


查看班級中年齡為8歲的學生信息?

db.class.find({age:8})

查看年齡大于10歲的學生信息?

db.class.find({age:{$gt:10}})

查看年齡在 4---8歲之間的學生信息?

db.class.find({age:{$gt:4,$lt:8}})


找到年齡為6歲且為男生的學生?

db.class.find({age:6,sex:'m'})



找到年齡小于7歲或者大于10歲的學生?

db.class.find({$or:[{age:{$gt:10}},{age:{$lt:7}}]})


找到年齡是8歲或者11歲的學生?

db.class.find({age:{$in:[8,11]}})


找到興趣愛好有兩項的學生?

db.class.find({hobby:{$size:2}})


找到興趣愛好有draw的學生?

db.class.find({hobby:"draw"})



找到既喜歡畫畫又喜歡跳舞的學生?

db.class.find({hobby:{$all:['draw','dance']}})


統計愛好有三項的學生人數?

?db.class.find({hobby:{$size:3}}).count()


找出本班年齡第二大的學生?

db.class.find({}).sort({age:-1}).skip(1).limit(1)


查看學生的興趣范圍?

db.class.distinct('hobby')


將學生按年齡排序找到年齡最大的三個?

db.class.find({}).sort({age:-1}).limit(3)



刪除所有 年級大于12或者小于4歲的學生

db.class.remove({$or:[{age:{$lt:6}},{age:{$gt:12}}]})

?

5)增加、更新、刪除、統計?
將小紅的年齡變為8歲 興趣愛好變為 跳舞 畫畫?
追加小明興趣愛好 唱歌?
小王興趣愛好增加 吹牛 打籃球?
小李增加愛好,跑步和唱歌,但是不要和以前的重復?
該班所有同學年齡加1?
刪除小明的sex屬性?
刪除小李興趣中的第一項?
將小紅興趣中的畫畫愛好刪除?
增加分數域 score:{'chinese':88,'english':78,'math':98}?
1. 按照性別分組統計每組人數?
2. 按照姓名分組,過濾出有重名的同學?
3. 統計每名男生的語文成績?
4. 將女生按照英語分數降序排列

未完待續

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534367.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534367.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534367.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python二級筆記(1)

操作題 1,寬度為30字符,星號字符填充,居中對齊。如果輸入字符串超30位,則全部輸出。 例如:鍵盤輸入字符串q為‘abcd’,屏幕輸出abcd 代碼: s input(請輸入一個字符串:) print({:*^30}.form…

Python二級筆記(2)

知識點: 1,鏈表可以是線性結構也可以是非線性結構 線性表的鏈式存儲結構稱為線性鏈表;鏈表上一種物理存儲單元上非連續,非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的,鏈表可以說…

Python二級筆記(3)

知識點: 1,排序可以在不同的存儲結構上實現,但快速排序法適于順序存儲的線性表,不適用于鏈式存儲的線性表。 堆棧序適用于線性結構,不適用于非線性結構 2,基本路徑測試根據軟件過程性描述中的控制流確定程…

軟件工程學簡述

軟件危機 軟件危機是指計算機軟件的開發和維護過程中所遇到的一系列嚴重問題。(考試中名詞解釋或者選擇題為主) 軟件危機的典型表現 (1)對軟件開發成本和進度的估計常常很不準確。 (2)用戶對“已完成的…

Python二級筆記(4)

知識點&#xff1a; 1&#xff0c;冒泡排序、快速排序、簡單插入排序、簡單選擇排序在最壞情況下比較次數均為n(n-1)/2&#xff0c;堆排序在最壞情況下比較次數為nlog(2↓)n,在最壞情況下希爾排序需要比較的次數是n(↑r)&#xff08;1<r<2&#xff09;。 2&#xff0c;…

Python二級筆記(5)

知識點&#xff1a; 1&#xff0c;樹的度&#xff0c;及樹中存在的最大度數&#xff1b;如樹的度為3&#xff0c;即樹中只存在度為0&#xff0c;1&#xff0c;2&#xff0c;3的結點。 2&#xff0c;設循環隊列的存儲空間為Q&#xff08;1:m&#xff09;,初始狀態為空。在循環…

Qt圖形界面編程入門(1)

一、類和對象 1&#xff0c;面向過程程序設計&#xff08;自頂向下設計&#xff09; 分析出解決問題所需的步驟&#xff0c;然后用函數把這些步驟一一實現&#xff0c;使用的時候一個一個調用 過程式設計對于比較復雜的問題&#xff0c;或是在開發中需求變化比較多的時候&am…

Qt圖形界面編程入門(2)

二&#xff0c;指針和引用 共同點&#xff1a;它們都代表其他變量占據的某一塊內存區&#xff0c;通過指針或引用都可以對他們代表的其他變量進行操作。 以下語句利用指針對變量賦值&#xff1a; int m; int *p; //指針定義 p &m; //將m的內存地址賦給p *p 5;…

Qt圖形界面編程入門(3)

公有成員和私有成員 從訪問權限上分&#xff0c;類的成員又分為&#xff1a;公有成員&#xff08;public&#xff09;、私有成員&#xff08;private&#xff09;和保護成員&#xff08;protected&#xff09;三類。 公有成員用public來說明。這部分成員可以在程序中通過“…

Qt圖形界面編程入門(4)

構造函數和析構函數 構造函數是一個與類同名的特殊的公有成員函數。 創建類對象時構造函數會被調用&#xff0c;且只調用一次/ 構造函數無返回類型。 默認構造函數格式&#xff1a; 類名&#xff08;&#xff09;{.......} Account(){ //無返回類型&#xff0c;無參數I…

Qt圖形界面編程入門(5)

三&#xff0c;繼承和多態 繼承是定義新類的一種機制&#xff0c;使用這種機制創建新類時只需要聲明新類和已創建類之間的差別 對應一個繼承關系&#xff0c;創建的新類稱為子類&#xff0c;被繼承的類稱為父類或基類。子類可以使用父類定義的屬性和方法&#xff0c;也可以…

tensorflow安裝教程

https://note.youdao.com/ynoteshare1/index.html?iddddc63e6a2dfb70605ae9753bcc71a60&typenote 如果失效請下載文件查看&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/15FZETB3rzcpH-LOOpmpjTQ 提取碼&#xff1a;6jfm 如果安裝包找不到請點擊鏈接提取&am…

TensorFlow深度學習應用開發實戰(深度學習簡介和開發環境搭建)

一、深度學習的發展及其應用 1.1 深度學習的發展歷程 1956年&#xff0c;John McCarthy&#xff08;約翰麥卡錫&#xff09;等人在美國達特茅斯學院&#xff08;Dartmounth College&#xff09;開會探討如何使用機器模擬人的智能時&#xff0c;提出了“人工智能”這一概念。 …

路由與交換技術(鋪墊內容)

一、OSI參考模型 層次 結構 功能 數據 地址 設備 7 應用層 用戶接口 原始文件 主機名 主機 6 表示層 壓縮&a…

Python二級筆記(6)

一、知識點 1&#xff0c;continue語句用于中斷本次循環的執行&#xff0c;繼續執行下一輪循環的條件&#xff0c;表示跳出當前循環&#xff1b;Python中的for、while循環都有一個可選的else語句&#xff0c;如果break語句終止循環&#xff0c;那么else語句將不會執行。 2&am…

瀑布模型、快速原型模型、增量模型、螺旋模型、噴泉模型

一、瀑布模型 1、按照傳統的瀑布模型開發軟件&#xff0c;有下述幾個特點。 ①階段間具有順序性和依賴性 階段間具有順序性和依賴性&#xff0c;這個特點有兩重含義&#xff1a; 1&#xff0c;必須等前一階段的工作完成之后&#xff0c;才能開始后一階段的工作&#xff1b;…

Linux基礎命令(1)

1.強大好用的Shell Shell是一個命令工具。Shell&#xff08;也稱終端或殼&#xff09;充當的是人與內核&#xff08;硬件&#xff09;之間的翻譯官&#xff0c;用戶把一些命令“告訴”終端&#xff0c;它會調用相應的程序服務去完成某些工作。 現在紅帽系統在內的許多主流Lin…

Python二級筆記(7)

知識點&#xff1a; 1&#xff0c;鏈式存儲結構既可以針對線性結構也可以針對非線性結構&#xff0c;鏈式存儲結構中每個結點都由數據域與指針域兩部分組成&#xff0c;增加了存儲空間。 2&#xff0c;對象的基本特點&#xff1a;標識唯一性&#xff0c;分類性&#xff0c;多…

Python二級筆記(8)

知識點&#xff1a; 1&#xff0c;棧支持子程序調用。棧上一種只能在一端進行插入或刪除的線性表&#xff0c;在主程序調用子函數時要首先保存主程序當前狀態&#xff0c;然后轉去執行子程序&#xff0c;最終把子程序的執行結果返回到主程序中調用子程序的位置&#xff0c;繼續…

軟件工程(Rational統一過程)

Rational統一過程&#xff08;Rational Unified Process,RUP&#xff09;是由Rational軟件公司推出的一種完整而且完美的軟件過程。 RUP總結了經過多年商業化驗證的六條最有效軟件開發經驗&#xff0c;這些經驗被稱為“最佳實踐”。 1&#xff0c;最佳實踐 &#xff08;1&am…