NoSQLmysql
若殺死進程應使用pkillweb
數據設計模式:分佈式、非關係型、不提供ACIDredis
特性:簡單數據模型、源數據和應用數據分離、弱一致性算法
優點:sql
避免沒必要要的複雜性mongodb
高吞吐量,數據庫
高 水平擴展能力和低端硬件集羣編程
不使用對象-關係映射設計模式
缺點:瀏覽器
不支持ACID
功能過於簡單
沒有統一的數據查詢模型
特色:
處理差大量的數據
運行再便宜的pc服務器集羣上
擊碎了性能瓶頸
使用場景:
一、對數據併發讀寫
二、對海量數據的高效率存儲與訪問
三、對數據的高可擴展性和高可用性(分佈式)
NOSQL的數據存儲模型
鍵值模型
數據模型:key-value存儲
查找速度快
缺點:數據無結構,一般被當作字符串或二進制數據
應用場景:內容緩存
實例:redis、Dynmo
列式模型
數據模型:數據按列存儲,將一列數據存在一塊兒
優勢:查找迅速,可擴展性強、易於實現分佈式
缺點:功能相對於SQL有限
應用場景:分佈式文件系統或分佈式存儲
實例:Bigtables、Cassandra、HBase、Hypertable
文檔模型
數據模型:與鍵值模型類似,value指向結構化數據;
優勢:數據格式不嚴格,無需定義事先定義結構
缺點:查新性能不高,缺少統一查詢語法
應用場景:web應用,
實例:MongoDB、CouchDB
圖式模型
數據模型:圖結構模型
優勢:利用圖結構相關算法提升性能,並是特殊場景應用需求
缺點:難以實現分佈式、功能有限
應用場景:社交網站、推薦系統、關係圖譜
實例:Neo4J
MongoDB
管理端口:28017 服務端口:27017
特性
一、基於文檔數據庫系統(JSON、BSON半結構化數據/)
二、保證其性能
C++研發
支持各類索引
不支持事務,
操做是在內存中進行(延遲寫操做)
三、支持擴展性
支持複製
四、支持基於文檔的查詢
五、支持使用數據的分組集合操做
六、支持網格文件系統(GridFS)
七、支持地理位置空間索引
八、支持動態查詢,查詢的性能剖析
九、基於複製進行故障轉移,經過選舉協議選舉。自動故障轉移
適用場景
一、web網站
二、緩存
三、海量存儲
四、高可擴展性
五、應用程序編程環境中
數據庫模型
面向collection(集合)的數據庫
使用數據庫:但數據庫無需建立
每個文檔至關於一個mysql的行,多個文檔組合起來至關於一個集合,至關於mysql的集合
集合無需事先定義
基於C/S架構:服務器端mongod,客戶端mongo
安裝
一、在官網上能夠下載MongoDB rpm包的yum源:www.mongodb.com
yum安裝: yum install -y mongodb-org
二、建立用戶:mongod,而且建立存放數據文件的文件夾mkdir/mongodb/data,並給這個文件夾更改屬主屬組。
2.一、更改配置文件中的數據文件存放位置(/etc/mongod.conf):dbpath=/mongodb/data
2.二、開啓httpinterface=true這一項,使mongodb開啓28017端口,這是一個管理端口,能夠經過瀏覽器進行訪問。
三、啓動mongod:service mongod start
客戶端命令
mongo 選項 數據庫地址 //登陸數據庫
--host //指定主機
-u/-p //指定帳號密碼
提示:大可能是mongodb默認不認證,因此直接輸入命令:mongo能夠直接連上本地數據庫。
默認打開數據庫爲test
show dbs //查看當前數據庫
show users //顯示用戶
show profile //顯示性能剖析
show logs //顯示日誌文件
show log 日誌名 // 顯示日誌的內容
use 數據庫名 // 設置默認數據庫,mongoDB不用建立數據庫,在不往數據庫中插入數據以前是不會建立數據庫的
show collections //查看集合
db.collection名稱 .insert ({name : "hhj"}) //插入數據
db.collection名稱.find().limit(3) //查看collection中的數據 ,並只顯示前三行
db.collection名稱.stats() //查看collection狀態
db. collection名稱.drop() //刪除collection
db.sun.count() //統計文檔個數
基本操做
查詢:
db.coll名.find (
{age: { $gt: 18} }, -->查詢標準
{ name:1, address:1} -->顯示字段
).limit(5) -->只顯示前5個符合條件的
插入:
db.coll名.insert (
name: "sue",
age: 26,
status: "A",
groups : [ "sd" , "wd" ]
)
修改:
db.coll名.update(
{ age: {$ gt:15 } }, -->查詢條件,字段加值
{ $set: { status: "A"} }, -->要改的字段及其值
{multi: true } -->默認只改變第一個符合條件的行。設爲true,則改變全部符合條件的行。
)
刪除:
db.coll名.remove (
{ status: "D "} -->刪除標準
)
高級操做
定義循環添加內容:
for (i=1;i<=100;i++) db.sun.insert ( { name :"User"+i,age:i,Gender:"M" } )
定義變量i,從1到100 插入數據 +i是字符引用變量i。
find用法
比較運算
$gt:挑選指定字段大於指定值的文檔,格式:{字段:($gt:值}}
$gte:大於等於
$in:等於
$lt:小於
$lte:小於等於
$ne:不等於
$nin:不存在
例: db.sun.find({age: {$lte: 30}},{name:1,age:1}) //顯示年齡小於等於30,只顯示name與age行
邏輯運算
邏輯運算通常用於鏈接多個選擇條件,
$or:或運算,格式:{$or:[{條件1},{條件2}]}
$and:與運算
$not:非運算
$nor:反運算
例:db.sun.find({$and:[{age:{$gt:61}},{age:{$lt:80}}]}) //大於61,小於80
例:db.sun.find({$and:[{age:{$gt:61}},{age:{$lt:80}}]},{name:1}) //只顯示name行,大於61,小於80
元素運算
根據文檔中是否存在某字段等條件來挑選文檔,語法格式:{$exists: boo},boo爲true爲返回存在指定字段的文檔,爲false則返回不存在指定字段的文檔。
$exists:根據指定字段的存在性挑選文檔
$mod:將指定字段的值進行取膜運算
$type:返回指定字段的值類型爲指定類型的文檔