與關聯式資料庫相比,MongoDB的優點:
①弱一致性(最終一致),更能保證使用者的存取速度:
舉例來說,在傳統的關聯式資料庫中,一個COUNT類型的操作會鎖定資料集,這樣可以確保得到「目前」情況下的精確值。這在某些情況下,例如透過ATM查看帳戶資訊的時候很重要,但對於Wordnik來說,數據是不斷更新和增長的,這種「精確」的保證幾乎沒有任何意義,反而會產生很大的延遲。他們需要的是一個「大約」的數字以及更快的處理速度。 但在某些情況下MongoDB會鎖定資料庫。如果此時正有數百個請求,則它們會堆積起來,造成許多問題。我們使用了下面的最佳化方式來避免鎖定:
每次更新前,我們會先查詢記錄。查詢操作會將物件放入內存,於是更新則會盡可能的迅速。在主/從部署方案中,從節點可以使用“-pretouch”參數運行,這也可以獲得相同的效果。 使用多個mongod流程。我們根據存取模式將資料庫拆分成多個進程。 ②文檔結構的儲存方式,能夠更方便的取得資料。 對於一個層級式的資料結構來說,如果要將這樣的資料使用扁平式的,表狀的結構來保存數據,這無論是在查詢或取得資料時都十分困難。 舉例1:
就拿一個「字典項」來說,雖然不十分複雜,但還是會關係到「定義」、「詞性」、「發音」或是「引用」等內容。大部分工程師會將這種模型使用關係型資料庫 中的主鍵和外鍵表現出來,但把它看作一個「文件」而不是「一系列有關係的表」豈不更好?使用 “dictionary.definition.partOfSpeech='noun'”來查詢也比表之間一系列複雜(往往代價也很高)的連接查詢方便 且快速。 舉例2:
在一個資料關係型資料庫中,一篇部落格(包含文章內容、評論、評論的投票)會被打散在多重資料表中。在MongoDB中,能用一個文檔來表示一篇博客, 評論與投票作為文檔數組,放在正文主文檔中。這樣資料更易於管理,消除了傳統關係型資料庫中影響效能和水平擴展性的「JOIN」操作。
CODE↓
> db.blogposts.save({ title : "My First Post", author: {name : "Jane", id :1},
comments : [{ by: "Abe", text: "First" }, { by : "Ada", text : "Good post" }] }) > db.blogposts.find( { "author.name" : "Jane" } )
> db.blogposts. findOne({ title : "My First Post", "author.name": "Jane",
comments : [{ by: "Abe", text: "First" }, { by : "Ada", text : "Good post" } ] }) > db.blogposts.find( { "comments.by" : "Ada" } ) > db.blogposts.ensureIndex( { "comments.by" : 1 } );
舉例3: 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)的資料模型,提高查詢的速度。 ③內建GridFS,支援大容量的儲存。
GridFS是一個優秀的分散式檔案系統,可支援大量的資料儲存。 內建了GridFS了MongoDB,能夠滿足對大資料集的快速範圍查詢。 ④內建Sharding。 提供基於Range的Auto Sharding機制:一個collection可依照記錄的範圍,分成若干個段,切分到不同的Shard上。 Shards可以和複製結合,配合Replica sets能夠實現Sharding fail-over,不同的Shard之間可以負載平衡。查詢是對 客戶端是透明的。客戶端執行查詢,統計,MapReduce等操作,這些會被MongoDB自動路由到後端的資料節點。這讓我們專注於自己的業務,適當的 時間可以無痛的升級。 MongoDB的Sharding設計能力最大可支援約20 petabytes,足以支撐一般應用。 這可以確保MongoDB運作在便宜的PC伺服器叢集上。 PC集群擴充起來非常方便且成本很低,避免了「sharding」操作的複雜性和成本。 ⑤第三方支援豐富。 (這是與其他的NoSQL相比,MongoDB也具有的優勢)
現在網路上的許多NoSQL開源資料庫完全屬於社群型的,沒有官方支持,為使用者帶來了極大的風險。
而開源文件資料庫MongoDB背後有商業公司10gen為其提供供商業訓練與支援。 且MongoDB社群非常活躍,許多開發架構都迅速提供了對MongDB的支援。不少知名大公司和網站也在生產環境中使用MongoDB,越來越多的創新企業轉而使用MongoDB作為和Django,RoR來搭配的技術方案。 ⑥性能優越: 在使用場合下,千萬級別的文檔對象,近10G的數據,對有索引的ID的查詢不會比mysql慢,而對非索引字段的查詢,則是全面勝出。 mysql實際上無法勝任大數據量下任意欄位的查詢,而mongodb的查詢效能實在讓我驚訝。寫入效能同樣很令人滿意,同樣寫入百萬等級的數 據,mongodb比我以前試用過的couchdb要快得多,基本上10分鐘以下可以解決。補上一句,觀察過程中mongodb都遠不算是CPU殺手。 與關聯式資料庫相比,MongoDB的缺點: ①mongodb不支援事務操作。 所以事務要求嚴格的系統(如果銀行系統)肯定不能用它。 (這點和優點①是對應的) ②mongodb佔用空間過大。 關於其原因,在官方的FAQ中,提到有以下幾個面向: 1.空間的預先分配:為避免形成過多的硬碟碎片,mongodb每次空間不足時都會申請產生一大塊的硬碟空間,而且申請的量從64M、128M、256M那樣的指數遞增,直到2G為單一文件的最大體積。隨著資料量的增加,你可以在其資料目錄中看到這些整塊產生容量不斷遞增的檔案。 2、字段名所佔用的空間:為了保持每個記錄內的結構資訊用於查詢,mongodb需要把每個字段的key-value都以BSON的形式存儲,如果value域相對於key域並不大,例如存放數值型的數據,則數據的overhead是最大的。一種減少空間佔用的方法是把字段名盡量取短一些,這樣佔用 空間就小了,但這就要求在易讀性與空間佔用上作為權衡了。我曾建議作者把字段名作個index,每個字段名用一個字節表示,這樣就不用擔心字段名取多長 了。但作者的擔憂也不無道理,這種索引方式需要每次查詢得到結果後把索引值跟原值作一個替換,再發送到客戶端,這個替換也是挺耗費時間的。現在的實現算是 拿空間來換取時間吧。
3、刪除記錄不釋放空間:這很容易理解,為避免記錄刪除後的資料的大規模挪動,原記錄空間不刪除,只標記「已刪除」即可,以後還可以重複利用。
4、可以定期執行db.repairDatabase()來整理記錄,但這個過程會比較緩慢。
③MongoDB沒有如MySQL那樣成熟的維護工具,這對開發和IT營運都是值得注意的地方。
由於上傳附件及文字限制,有時部分圖片、文字可能顯示不了,詳情請見:http://mp.weixin.qq.com/s?__biz=MzI5ODI3NzY2MA==&mid=100000725&idx=3&sn=1e135403774b200 rd
歡迎大家一起交流。 掃描以下二維碼,獲取更多更精美文章! (掃碼關注有意不到的驚喜的哦!!) ![]() 關注我們微信訂閱號碼( uniguytech100) 與服務號碼(uniguytech),獲取更多更精美文章! 也歡迎加入【大家技術網討論QQ群】,群號:256175955,請備註你個人的介紹!讓我們一起聊聊it的那些事吧! |

phpsessionstrackuserdataacrossmultiplepagerequestsusingauniqueIdStoredInAcookie.here'showtomanageThemeffectionaly:1)startAsessionWithSessionWwithSession_start()和stordoredAtain $ _session.2)

在PHP中,遍歷會話數據可以通過以下步驟實現:1.使用session_start()啟動會話。 2.通過foreach循環遍歷$_SESSION數組中的所有鍵值對。 3.處理複雜數據結構時,使用is_array()或is_object()函數,並用print_r()輸出詳細信息。 4.優化遍歷時,可採用分頁處理,避免一次性處理大量數據。這將幫助你在實際項目中更有效地管理和使用PHP會話數據。

會話通過服務器端的狀態管理機制實現用戶認證。 1)會話創建並生成唯一ID,2)ID通過cookies傳遞,3)服務器存儲並通過ID訪問會話數據,4)實現用戶認證和狀態管理,提升應用安全性和用戶體驗。

Tostoreauser'snameinaPHPsession,startthesessionwithsession_start(),thenassignthenameto$_SESSION['username'].1)Usesession_start()toinitializethesession.2)Assigntheuser'snameto$_SESSION['username'].Thisallowsyoutoaccessthenameacrossmultiplepages,enhanc

PHPSession失效的原因包括配置錯誤、Cookie問題和Session過期。 1.配置錯誤:檢查並設置正確的session.save_path。 2.Cookie問題:確保Cookie設置正確。 3.Session過期:調整session.gc_maxlifetime值以延長會話時間。

在PHP中調試會話問題的方法包括:1.檢查會話是否正確啟動;2.驗證會話ID的傳遞;3.檢查會話數據的存儲和讀取;4.查看服務器配置。通過輸出會話ID和數據、查看會話文件內容等方法,可以有效診斷和解決會話相關的問題。

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

在PHP中配置會話生命週期可以通過設置session.gc_maxlifetime和session.cookie_lifetime來實現。 1)session.gc_maxlifetime控制服務器端會話數據的存活時間,2)session.cookie_lifetime控制客戶端cookie的生命週期,設置為0時cookie在瀏覽器關閉時過期。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版
好用的JavaScript開發工具

Dreamweaver CS6
視覺化網頁開發工具