A. mongodb為什麼比mysql效率高,求詳細
寫操作MongoDB比傳統資料庫快的根本原因是Mongo使用的內存映射技術 - 寫入數據時候只要在內存里完成就可以返回給應用程序,這樣並發量自然就很高。而保存到硬體的操作則在後台非同步完成。注意MongoDB在2.4就已經是默認安全寫了(具體實現在驅動程序里),所以樓上有同學的回答說是」默認不安全「應該是基於2.2或之前版本的。
讀操作MongoDB快的原因是: 1)MongoDB的設計要求你常用的數據(working set)可以在內存里裝下。這樣大部分操作只需要讀內存,自然很快。 2)文檔性模式設計一般會是的你所需要的數據都相對集中在一起(內存或硬碟),大家知道硬碟讀寫耗時最多是隨機讀寫所產生的磁頭定位時間,數據集中在一起則減少了關系性資料庫需要從各個地方去把數據找過來(然後Join)所耗費的隨機讀時間
另外一個就是如@王子亭所提到的Mongo是分布式集群所以可以平行擴展。目前一般的百萬次並發量都是通過幾十上百個節點的集群同時實現。這一點MySQL基本無法做到(或者要花很大定製的代價)
B. 為什麼MongoDB可以替代MySQL
MongoDB是一個面向文檔的資料庫,目前由10gen開發並維護,它的功能豐富,齊全,完全可以替代MySQL。在使用MongoDB做產品原型的過程中,我們總結了MonogDB的一些亮點:使用JSON風格語法,易於掌握和理解:MongoDB使用JSON的變種BSON作為內部存儲的格式和語法。針對MongoDB的操作都使用JSON風格語法,客戶端提交或接收的數據都使用JSON形式來展現。相對於SQL來說,更加直觀,容易理解和掌握。Schema-less,支持嵌入子文檔:MongoDB是一個Schema-free的文檔資料庫。一個資料庫可以有多個Collection,每個Collection是Documents的集合。Collection和Document和傳統資料庫的Table和Row並不對等。無需事先定義Collection,隨時可以創建。Collection中可以包含具有不同schema的文檔記錄。 這意味著,你上一條記錄中的文檔有3個屬性,而下一條記錄的文檔可以有10個屬性,屬性的類型既可以是基本的數據類型(如數字、字元串、日期等),也可以是數組或者散列,甚至還可以是一個子文檔(embed document)。這樣,可以實現逆規范化(denormalizing)的數據模型,提高查詢的速度。圖1 MongoDB是一個Schema-free的文檔資料庫圖2是一個例子,作品和評論可以設計為一個collection,評論作為子文檔內嵌在art的comments屬性中,評論的回復則作為comment子文檔的子文檔內嵌於replies屬性。按照這種設計模式,只需要按照作品id檢索一次,即可獲得所有相關的信息了。在MongoDB中,不強調一定對數據進行Normalize ,很多場合都建議De-normalize,開發人員可以扔掉傳統關系資料庫各種範式的限制,不需要把所有的實體都映射為一個Collection,只需定義最頂級的class。MongoDB的文檔模型可以讓我們很輕松就能將自己的Object映射到collection中實現存儲。圖2 MongoDB支持嵌入子文檔簡單易用的查詢方式:MongoDB中的查詢讓人很舒適,沒有SQL難記的語法,直接使用JSON,相當的直觀。對不同的開發語言,你可以使用它最基本的數組或散列格式進行查詢。配合附加的operator,MongoDB支持范圍查詢,正則表達式查詢,對子文檔內屬性的查詢,可以取代原來大多數任務的SQL查詢。CRUD更加簡單,支持in-place update:只要定義一個數組,然後傳遞給MongoDB的insert/update方法就可自動插入或更新;對於更新模式,MongoDB支持一個upsert選項,即:「如果記錄存在那麼更新,否則插入」。MongoDB的update方法還支持Modifier,通過Modifier可實現在服務端即時更新,省去客戶端和服務端的通訊。這些modifer可以讓MongoDB具有和Redis、Memcached等KV類似的功能:較之MySQL,MonoDB更加簡單快速。
C. 怎麼將mongodb裡面的sql操作記錄下來
准備
在此之前,我們先在我們的資料庫中插入10萬條數據。數據的格式是這樣的:
?
1
2
3
4
5
6
{
"name":"your name",
"age":22,
"gender":"male",
"grade":2
}
explain
explain方法是用來查看db.collecion.find()的一些查詢信息的。例如:
?
1
db.collectionName.find().explain()
explain方法有個可選的參數verbose,是個字元串,他表示的是verbose的模式。一共分為3種模式:
queryPlanner:默認參數,詳細說明查詢優化器選擇的計劃並列出
D. java怎麼防止mongodb nosql 注入
存儲在mongodb中的時間是標准時間UTC +0:00 而咱們中國的失去是+8.00 。 不知道你用的是什麼語言,就我所知道的C#的驅動支持一個特性,將實體的時間屬性上添加上這個特性並指時區就可以了。
E. mongod可以代替sqlserver嗎
可以,並且有這些優勢
1、使用JSON風格語法,易於掌握和理解:MongoDB使用JSON的變種BSON作為內部存儲的格式和語法。針對MongoDB的操作都使用JSON風格語法,客戶端提交或接收的數據都使用JSON形式來展現。相對於SQL來說,更加直觀,容易理解和掌握。這也是根據我自己項目的情況出發,最後選擇了mongodb的一個原因。
2、Schema-less,支持嵌入子文檔:MongoDB是一個Schema-free的文檔資料庫。一個資料庫可以有多個Collection,每個Collection是Documents的集合。Collection和Document和傳統資料庫的Table和Row並不對等。無需事先定義Collection,隨時可以創建。Collection中可以包含具有不同schema的文檔記錄。 這意味著,你上一條記錄中的文檔有3個屬性,而下一條記錄的文檔可以有10個屬性,屬性的類型既可以是基本的數據類型(如數字、字元串、日期等),也可以是數組或者散列,甚至還可以是一個子文檔(embed document)。這樣,可以實現逆規范化(denormalizing)的數據模型,提高查詢的速度。
3、簡單易用的查詢方式:直接使用JSON,支持范圍查詢、正則表達式查詢。
4、CRUD更加簡單,支持in-place update:只要定義一個數組,然後傳遞給MongoDB的insert/update方法就可自動插入或更新;對於更新模式,MongoDB支持一個upsert選項,即:「如果記錄存在那麼更新,否則插入」。MongoDB的update方法還支持Modifier,通過Modifier可實現在服務端即時更新,省去客戶端和服務端的通訊。這些modifer可以讓MongoDB具有和Redis、Memcached等KV類似的功能:較之MySQL,MonoDB更加簡單快速。Modifier也是MongoDB可以作為對用戶行為跟蹤的容器。在實際中使用Modifier來將用戶的交互行為快速保存到MongoDB中以便後期進行統計分析和個性化定製
5、所有的屬性類型都支持索引,甚至數組:這可以讓某些任務實現起來非常的輕松。在MongoDB中,「_id」屬性是主鍵,默認MongoDB會對_id創建一個唯一索引。
6、性能高效,速度快: MongoDB使用c++/boost編寫,在多數場合,其查詢速度對比MySQL要快的多,對於CPU佔用非常小。部署也很簡單,對大多數系統,只需下載後二進制包解壓就可以直接運行,幾乎是零配置。
7、服務端腳本和Map/Rece:MongoDB允許在服務端執行腳本,可以用Javascript編寫某個函數,直接在服務端執行,也可以把函數的定義存儲在服務端,下次直接調用即可。MongoDB不支持事務級別的鎖定,對於某些需要自定義的「原子性」操作,可以使用Server side腳本來實現,此時整個MongoDB處於鎖定狀態。Map/Rece也是MongoDB中比較吸引人的特性。Map/Rece可以對大數據量的表進行統計、分類、合並的工作,完成原先SQL的GroupBy等聚合函數的功能。並且Mapper和Recer的定義都是用Javascript來定義服務端腳本。
F. mongodb 與sql server 哪個更快
可以,並且有這些優勢 1、使用JSON風格語法,易於掌握和理解:MongoDB使用JSON的變種BSON作為內部存儲的格式和語法。針對MongoDB的操作都使用JSON風格語法,客戶端提交或接收的數據都使用JSON形式來展現。相對於SQL來說,更加直觀,容易理解和掌...
G. mongodb成為最好nosql資料庫的原因是什麼
MongoDB和CouchDB都是面向文檔的資料庫。MongoDB和CouchDB都是開源NoSQL資料庫的最典型代表。 除了都以文檔形式存儲外它們沒有其他的共同點。MongoDB和CouchDB在數據模型實現、介面、對象存儲以及復制方法等方面有很多不同。
H. mongodb被sql注入怎麼辦
mongodb被sql注入怎麼辦
那不叫sql,叫查詢語句,也就是javascript代碼,打開命令行,輸入mongo,教程https://docs.mongodb.com/manual/crud/
I. mongodb為什麼比mysql快
mongodb 會比mysql快的多,原因是:
首先是內存映射機制,數據不是持久化到存儲設備中的,而是暫時存儲在內存中,這就提高了在IO上效率以及操作系統對存儲介質之間的性能損耗。(畢竟內存讀取最快)
其次,NoSQL並不是不使用sql,只是不使用關系。沒有關系的存在,就表示每個數據都好比是擁有一個單獨的存儲空間,然後一個聚集索引來指向。搜索性能一定會提高的。
第三,語言。使用javascript語法進行操作更加高效、直接。
這些是MongoDB針對關系型資料庫的效率要高的原因。但是不能僅僅看重效率,這種資料庫的設計帶來的弊端也是有的。例如數據關系的維護會帶來很多冗餘數據、客戶端代碼需要大量針對資料庫進行的IO操作、數據挖掘難以實現等等。