歡迎您光臨本站 註冊首頁

· mongodb 入門雜誌閱讀

mongoDB入門需要了解的基本知識

admin @ 2020-04-29 reply:0

mongoDB入門需要了解的基本知識


伺服器君一共花費了161.350 ms進行了5次資料庫查詢,努力地為您提供了這個頁面。


MongoDB是一個開源的,高效能,無模式(或者說是模式自由),使用C++語言編寫的面向文件的資料庫。正因為MongoDB是面向文件的,所以它可以管理類似JSON的文件集合。又因為資料可以被巢狀到複雜的體系中並保持可以查詢可索引,這樣一來,應用程式便可以以一種更加自然的方式來為資料建模。

   

下面介紹MongoDB的特點:

  1. 統一的UTF-8編碼:不是UTF-8編碼集合的資料也可以透過使用一種特殊的二進位資料型別來儲存,查詢。

  2. 跨平臺支援:二進位檔案可以在Windows,Linux,OS X和Solaris平臺上使用。MongoDB可以在大多數小端系統上編譯透過。

  3. 支援豐富的型別:支援 dates, regular expressions, code, binary data 等型別。

  4. 查詢結果支援Cursor操作。

  5. 支援Ad hoc queries(Ad hoc query:即席查詢,資料庫應用最普遍的一種查詢,利用資料倉儲技術,可以讓使用者隨時可以面對資料庫,獲取所希望的資料。在MongoDB中,可以在任何時候查詢任何一個field。它支援 range queries,regular expression searches 和其他特殊的查詢型別。同時查詢也可以包含使用者定義的javascript函式。

  6. 支援巢狀域的查詢:查詢可以深入到巢狀的物件和陣列中,如果下面的物件被插入到users集合。

  7. {

  8. "username" : "bob",

  9. "address" : {

  10. "street" : "123 Main Street",

  11. "city" : "Springfield",

  12. "state" : "NY"

  13. }

  14. }

  15. 我們可以這樣查詢巢狀在裡層的域:db.users.find({「address.state」:"NY」})

    陣列元素則可以被這樣查詢:> db.food.insert({"fruit" : ["peach", "plum", "pear"]})或> db.food.find({"fruit" : "pear"})

  16. 支援索引:支援二級索引包括 single-key, compound, unique, non-unique, geospatial indexes.巢狀的域同樣也可以被索引。如果我們對一個陣列型別進行索引,那么陣列中所有元素也會自動被索引。當一個查詢執行時,MongoDB的查詢最佳化器會嘗試多個不同的query plan,並選擇執行速度最快的。開發者可以透過explain功能看到索引被使用的過程,然後可以透過hint功能來選擇另一個不同的索引。可以在任何時候建立和刪除索引。

  17. aggregation:除了ad hoc queries外,MongoDB還支援一系列工具來支援聚合,例如MapReduce和其他類似於SQL的GROUP BY的函式集合。

  18. 檔案儲存:該軟體實現了一個稱為GridFS的協議,這個協議是用來幫助從資料庫中儲存和獲取檔案的。

  19. 支援伺服器端javascript執行:javaScript是MongoDB的一種通用語言,它可以被用在查詢,聚集函式,直接由資料庫執行。

  20. 下面是一個使用javascript的查詢例子:db.foo.find({$where:function(){return this.x==this.y;}})

    傳送程式碼到資料庫執行:db.eval(function(name){return 「Hello, 」+name;},[「Joe」])

    javaScript的變數可以被儲存在資料庫中並被其他javas作為全域性變數使用。任何合法的javascript型別包括函式和物件,都可以被儲存在MongoDB中,所以javascript可以被用來寫<儲存過程>

  21. capped collection:MongoDB支援被稱為capped collections(定量集合)的定長集合。Capped collections是唯一一種維持插入順序的集合,其中,如果達到容量最大值,那么就會覆蓋第一個元素,也就是說capped collection的行為類似於一個環形佇列。一種特殊的cursor型別,稱為tailable cursor,可以被用在capped collection上,當完成結果返回時,這種cursor不會關閉,而是會繼續等待更多的結果來返回。也就是說如果有新的記錄插入到capped collection的話,cursor會自動返回。

  22. 目前提供多種語言的driver。

  23. 部署:MongoDB使用的是memory-mapped files(記憶體對映檔案),所以在32位機器上限制資料的最大大小為2GB,同時MongoDB伺服器只能在小端系統上執行。

  24. Replication:MongoDB不應被部署到少於兩臺的伺服器上,也就是說至少有一臺作為master,另一臺作為slave。Master可以用來執行讀寫,而slave可以從master上複製資料,但是它只能執行讀操作或備份操作。開發者可以根據情況讓一個operation可以被replicate到多個servers上。

下面的程式碼是啟動一個master伺服器和對應的slave伺服器:

$ mkdir –p ~/dbs/master ~/dbs/slave
$ ./mongod –master –port 10000 –dbpath ~/dbs/master
$ ./mongod –slave  --port10001 –dbpath ~/dbs/slave  -- source localhost:10000

   

補充知識

所謂「面向集合」(Collenction-Orented),意思是資料被分組儲存在資料集中,被稱為一個集合(Collenction)。每個集合在資料庫中都有一個唯一的標識名,並且可以包含無限數目的文件。集合的概念類似關係型資料庫(RDBMS)裡的表(table),不同的是它不需要定義任何模式(schema)。

模式自由(schema-free),意味著對於儲存在mongodb資料庫中的檔案,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的檔案儲存在同一個資料庫裡。

   

儲存在集合中的文件,被儲存為鍵-值對的形式。鍵用於唯一標識一個文件,為字元串型別,而值則可以是各中複雜的檔案型別。我們稱這種儲存形式為BSON(Binary Serialized dOcument Format)。

MongoDB把資料儲存在檔案中(預設路徑為:/data/db),為提高效率使用記憶體對映檔案進行管理。MongoDB的主要目標是在鍵/值儲存方式(提供了高效能和高度伸縮性)以及傳統的RDBMS系統(豐富的功能)架起一座橋樑,集兩者的優勢於一身。

   

根據官方網站的描述,Mongo適合用於以下場景:

  • 網站資料:Mongo非常適合實時的插入,更新與查詢,並具備網站實時資料儲存所需的複製及高度伸縮性。

  • 快取:由於效能很高,Mongo也適合作為資訊基礎設施的快取層。在系統重啟之後,由Mongo搭建的持久化快取層可以避免下層的資料來源過載。

  • 大尺寸,低價值的資料:使用傳統的關係型資料庫儲存一些資料時可能會比較昂貴,在此之前,很多時候程式設計師往往會選擇傳統的檔案進行儲存。

  • 高伸縮性的場景:Mongo非常適合由數十或數百臺伺服器組成的資料庫。Mongo的路線圖中已經包含對MapReduce引擎的內建支援。

  • 用於物件及JSON資料的儲存:Mongo的BSON資料格式非常適合文件化格式的儲存及查詢。

自然,MongoDB的使用也會有一些限制,例如它不適合:

  • 高度事務性的系統:例如銀行或會計系統。傳統的關係型資料庫目前還是更適用於需要大量原子性複雜事務的應用程式。

  • 傳統的商業智慧應用:針對特定問題的BI資料庫會對產生高度最佳化的查詢方式。對於此類應用,資料倉儲可能是更合適的選擇。

  • 需要SQL的問題



[admin via ] mongoDB入門需要了解的基本知識已經有1019次圍觀

http://coctec.com/magazine/show-post-item-140.html