MongoDB是文檔存儲型數(shù)據(jù)庫。它的存儲是給予操作系統(tǒng)中的文件存儲系統(tǒng)的。所以只要是文件系統(tǒng)可以存的,mongodb都可以存。
目前成都創(chuàng)新互聯(lián)已為成百上千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管運營、企業(yè)網(wǎng)站設(shè)計、相山網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
如果要保存一些二進制的大數(shù)據(jù)文件,可以用GridFS數(shù)據(jù)結(jié)構(gòu)。
一般將NoSQL數(shù)據(jù)庫分為四大類:鍵值(Key-Value)存儲數(shù)據(jù)庫、列存儲數(shù)據(jù)庫、文檔型數(shù)據(jù)庫和圖形(Graph)數(shù)據(jù)庫。它們的數(shù)據(jù)模型、優(yōu)缺點、典型應(yīng)用場景。
鍵值(Key-Value)存儲數(shù)據(jù)庫Key指向Value的鍵值對,通常用hash表來實現(xiàn)查找速度快數(shù)據(jù)無結(jié)構(gòu)化(通常只被當作字符串或者二進制數(shù)據(jù))內(nèi)容緩存,主要用于處理大量數(shù)據(jù)的高訪問負載,也用于一些日志系統(tǒng)等。
列存儲數(shù)據(jù)庫,以列簇式存儲,將同一列數(shù)據(jù)存在一起查找速度快,可擴展性強,更容易進行分布式擴展功能相對局限分布式的文件系統(tǒng)。
文檔型數(shù)據(jù)庫,Key-Value對應(yīng)的鍵值對,Value為結(jié)構(gòu)化數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)要求不嚴格,表結(jié)構(gòu)可變(不需要像關(guān)系型數(shù)據(jù)庫一樣需預(yù)先定義表結(jié)構(gòu)),查詢性能不高,而且缺乏統(tǒng)一的查詢語法,Web應(yīng)用。
圖形(Graph)數(shù)據(jù)庫,圖結(jié)構(gòu),利用圖結(jié)構(gòu)相關(guān)算法(如最短路徑尋址,N度關(guān)系查找等),很多時候需要對整個圖做計算才能得出需要的信息,而且這種結(jié)構(gòu)不太好做分布式的集群方案,社交網(wǎng)絡(luò),推薦系統(tǒng)等。
Membase Membase 是 NoSQL 家族的一個新的重量級的成員。Membase是開源項目,源代碼采用了Apache2.0的使用許可。該項目托管在GitHub.Source tarballs上,可以下載beta版本的Linux二進制包。該產(chǎn)品主要是由North Scale的memcached核心團隊成員開發(fā)完成,其中還包括Zynga和NHN這兩個主要貢獻者的工程師,這兩個組織都是很大的在線游戲和社區(qū)網(wǎng)絡(luò)空間的供應(yīng)商。 Membase容易安裝、操作,可以從單節(jié)點方便的擴展到集群,而且為memcached(有線協(xié)議的兼容性)實現(xiàn)了即插即用功能,在應(yīng)用方面為開發(fā)者和經(jīng)營者提供了一個比較低的門檻。做為緩存解決方案,Memcached已經(jīng)在不同類型的領(lǐng)域(特別是大容量的Web應(yīng)用)有了廣泛的使用,其中 Memcached的部分基礎(chǔ)代碼被直接應(yīng)用到了Membase服務(wù)器的前端。 通過兼容多種編程語言和框架,Membase具備了很好的復(fù)用性。在安裝和配置方面,Membase提供了有效的圖形化界面和編程接口,包括可配置 的告警信息。 Membase的目標是提供對外的線性擴展能力,包括為了增加集群容量,可以針對統(tǒng)一的節(jié)點進行復(fù)制。 另外,對存儲的數(shù)據(jù)進行再分配仍然是必要的。 這方面的一個有趣的特性是NoSQL解決方案所承諾的可預(yù)測的性能,類準確性的延遲和吞吐量。通過如下方式可以獲得上面提到的特性: ◆ 自動將在線數(shù)據(jù)遷移到低延遲的存儲介質(zhì)的技術(shù)(內(nèi)存,固態(tài)硬盤,磁盤) ◆ 可選的寫操作一一異步,同步(基于復(fù)制,持久化) ◆ 反向通道再平衡[未來考慮支持] ◆ 多線程低鎖爭用 ◆ 盡可能使用異步處理 ◆ 自動實現(xiàn)重復(fù)數(shù)據(jù)刪除 ◆ 動態(tài)再平衡現(xiàn)有集群 ◆ 通過把數(shù)據(jù)復(fù)制到多個集群單元和支持快速失敗轉(zhuǎn)移來提供系統(tǒng)的高可用性。 MongoDB MongoDB是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。他支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bjson格式,因此可以存儲比較復(fù)雜的數(shù)據(jù)類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引。它的特點是高性能、易部署、易使用,存儲數(shù)據(jù)非常方便。 主要功能特性: ◆ 面向集合存儲,易存儲對象類型的數(shù)據(jù) “面向集合”(Collenction-Oriented),意思是數(shù)據(jù)被分組存儲在數(shù)據(jù)集中,被稱為一個集合(Collenction)。每個 集合在數(shù)據(jù)庫中都有一個唯一的標識名,并且可以包含無限數(shù)目的文檔。集合的概念類似關(guān)系型數(shù)據(jù)庫(RDBMS)里的表(table),不同的是它不需要定 義任何模式(schema)。 ◆ 模式自由 模式自由(schema-free),意味著對于存儲在mongodb數(shù)據(jù)庫中的文件,我們不需要知道它的任何結(jié)構(gòu)定義。如果需要的話,你完全可以把不同結(jié)構(gòu)的文件存儲在同一個數(shù)據(jù)庫里。 ◆支持動態(tài)查詢 ◆支持完全索引,包含內(nèi)部對象 ◆支持查詢 ◆支持復(fù)制和故障恢復(fù) ◆使用高效的二進制數(shù)據(jù)存儲,包括大型對象(如視頻等) ◆自動處理碎片,以支持云計算層次的擴展性 ◆支持RUBY,PYTHON,JAVA,C++,PHP等多種語言 ◆文件存儲格式為BSON(一種JSON的擴展) BSON(Binary Serialized document Format)存儲形式是指:存儲在集合中的文檔,被存儲為鍵-值對的形式。鍵用于唯一標識一個文檔,為字符串類型,而值則可以是各種復(fù)雜的文件類型。 ◆可通過網(wǎng)絡(luò)訪問 MongoDB服務(wù)端可運行在Linux、Windows或OS X平臺,支持32位和64位應(yīng)用,默認端口為27017。推薦運行在64位平臺,因為MongoDB在32位模式運行時支持的最大文件尺寸為2GB。 MongoDB把數(shù)據(jù)存儲在文件中(默認路徑為:/data/db),為提高效率使用內(nèi)存映射文件進行管理。 Hypertable Hypertable是一個開源、高性能、可伸縮的數(shù)據(jù)庫,它采用與Google的Bigtable相似的模型。在過去數(shù)年中,Google為在PC集群 上運行的可伸縮計算基礎(chǔ)設(shè)施設(shè)計建造了三個關(guān)鍵部分。第一個關(guān)鍵的基礎(chǔ)設(shè)施是Google File System(GFS),這是一個高可用的文件系統(tǒng),提供了一個全局的命名空間。它通過跨機器(和跨機架)的文件數(shù)據(jù)復(fù)制來達到高可用性,并因此免受傳統(tǒng) 文件存儲系統(tǒng)無法避免的許多失敗的影響,比如電源、內(nèi)存和網(wǎng)絡(luò)端口等失敗。第二個基礎(chǔ)設(shè)施是名為Map-Reduce的計算框架,它與GFS緊密協(xié)作,幫 助處理收集到的海量數(shù)據(jù)。第三個基礎(chǔ)設(shè)施是Bigtable,它是傳統(tǒng)數(shù)據(jù)庫的替代。Bigtable讓你可以通過一些主鍵來組織海量數(shù)據(jù),并實現(xiàn)高效的 查詢。Hypertable是Bigtable的一個開源實現(xiàn),并且根據(jù)我們的想法進行了一些改進。 Apache Cassandra Apache Cassandra是一套開源分布式Key-Value存儲系統(tǒng)。它最初由Facebook開發(fā),用于儲存特別大的數(shù)據(jù)。Facebook在使用此系統(tǒng)。 主要特性: ◆ 分布式 ◆ 基于column的結(jié)構(gòu)化 ◆ 高伸展性 Cassandra的主要特點就是它不是一個數(shù)據(jù)庫,而是由一堆數(shù)據(jù)庫節(jié)點共同構(gòu)成的一個分布式網(wǎng)絡(luò)服務(wù),對Cassandra 的一個寫操作,會被復(fù)制到其他節(jié)點上去,對Cassandra的讀操作,也會被路由到某個節(jié)點上面去讀取。對于一個Cassandra群集來說,擴展性能 是比較簡單的事情,只管在群集里面添加節(jié)點就可以了。 Cassandra是一個混合型的非關(guān)系的數(shù)據(jù)庫,類似于Google的BigTable。其主要功能比 Dynomite(分布式的Key-Value存 儲系統(tǒng))更豐富,但支持度卻不如文檔存儲MongoDB(介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的開源產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當中功能最豐富,最像關(guān)系數(shù)據(jù)庫 的。Cassandra最初由Facebook開發(fā),后轉(zhuǎn)變成了開源項目。它是一個網(wǎng)絡(luò)社交云計算方面理想的數(shù)據(jù)庫。以Amazon專有的完全分布式的Dynamo為基礎(chǔ),結(jié)合了Google BigTable基于列族(Column Family)的數(shù)據(jù)模型。P2P去中心化的存儲。很多方面都可以稱之為Dynamo 2.0。 CouchDB 所用語言: Erlang 特點:DB一致性,易于使用 使用許可: Apache 協(xié)議: HTTP/REST 雙向數(shù)據(jù)復(fù)制,持續(xù)進行或臨時處理,處理時帶沖突檢查,因此,采用的是master-master復(fù)制 MVCC – 寫操作不阻塞讀操作 可保存文件之前的版本 Crash-only(可靠的)設(shè)計 需要不時地進行數(shù)據(jù)壓縮 視圖:嵌入式 映射/減少 格式化視圖:列表顯示 支持進行服務(wù)器端文檔驗證 支持認證 根據(jù)變化實時更新 支持附件處理 因此, CouchApps(獨立的 js應(yīng)用程序) 需要 jQuery程序庫 最佳應(yīng)用場景:適用于數(shù)據(jù)變化較少,執(zhí)行預(yù)定義查詢,進行數(shù)據(jù)統(tǒng)計的應(yīng)用程序。適用于需要提供數(shù)據(jù)版本支持的應(yīng)用程序。 例如:CRM、CMS系統(tǒng)。 master-master復(fù)制對于多站點部署是非常有用的。 和其他數(shù)據(jù)庫比較,其突出特點是: ◆ 模式靈活 :使用Cassandra,像文檔存儲,你不必提前解決記錄中的字段。你可以在系統(tǒng)運行時隨意的添加或移除字段。這是一個驚人的效率提升,特別是在大型部 署上。 ◆ 真正的可擴展性 :Cassandra是純粹意義上的水平擴展。為給集群添加更多容量,可以指向另一臺電腦。你不必重啟任何進程,改變應(yīng)用查詢,或手動遷移任何數(shù)據(jù)。 ◆ 多數(shù)據(jù)中心識別 :你可以調(diào)整你的節(jié)點布局來避免某一個數(shù)據(jù)中心起火,一個備用的數(shù)據(jù)中心將至少有每條記錄的完全復(fù)制。 ◆ 范圍查詢 :如果你不喜歡全部的鍵值查詢,則可以設(shè)置鍵的范圍來查詢。 ◆ 列表數(shù)據(jù)結(jié)構(gòu) :在混合模式可以將超級列添加到5維。對于每個用戶的索引,這是非常方便的。 ◆ 分布式寫操作 :有可以在任何地方任何時間集中讀或?qū)懭魏螖?shù)據(jù)。并且不會有任何單點失敗。 問度娘,啥都有。
通常來說,當數(shù)據(jù)多、并發(fā)量大的時候,架構(gòu)中可以引入Redis,幫助提升架構(gòu)的整體性能,減少Mysql(或其他數(shù)據(jù)庫)的壓力,但不是使用Redis,就不用MySQL。
因為Redis的性能十分優(yōu)越,可以支持每秒十幾萬此的讀/寫操作,并且它還支持持久化、集群部署、分布式、主從同步等,Redis在高并發(fā)的場景下數(shù)據(jù)的安全和一致性,所以它經(jīng)常用于兩個場景:
緩存
判斷數(shù)據(jù)是否適合緩存到Redis中,可以從幾個方面考慮: 會經(jīng)常查詢么?命中率如何?寫操作多么?數(shù)據(jù)大?。?/p>
我們經(jīng)常采用這樣的方式將數(shù)據(jù)刷到Redis中:查詢的請求過來,現(xiàn)在Redis中查詢,如果查詢不到,就查詢數(shù)據(jù)庫拿到數(shù)據(jù),再放到緩存中,這樣第二次相同的查詢請求過來,就可以直接在Redis中拿到數(shù)據(jù);不過要注意【緩存穿透】的問題。
緩存的刷新會比較復(fù)雜,通常是修改完數(shù)據(jù)庫之后,還需要對Redis中的數(shù)據(jù)進行操作;代碼很簡單,但是需要保證這兩步為同一事務(wù),或最終的事務(wù)一致性。
高速讀寫
常見的就是計數(shù)器,比如一篇文章的閱讀量,不可能每一次閱讀就在數(shù)據(jù)庫里面update一次。
高并發(fā)的場景很適合使用Redis,比如雙11秒殺,庫存一共就一千件,到了秒殺的時間,通常會在極為短暫的時間內(nèi),有數(shù)萬級的請求達到服務(wù)器,如果使用數(shù)據(jù)庫的話,很可能在這一瞬間造成數(shù)據(jù)庫的崩潰,所以通常會使用Redis(秒殺的場景會比較復(fù)雜,Redis只是其中之一,例如如果請求超過某個數(shù)量的時候,多余的請求就會被限流)。
這種高并發(fā)的場景,是當請求達到服務(wù)器的時候,直接在Redis上讀寫,請求不會訪問到數(shù)據(jù)庫;程序會在合適的時間,比如一千件庫存都被秒殺,再將數(shù)據(jù)批量寫到數(shù)據(jù)庫中。
所以通常來說,在必要的時候引入Redis,可以減少MySQL(或其他)數(shù)據(jù)庫的壓力,兩者不是替代的關(guān)系 。
我將持續(xù)分享Java開發(fā)、架構(gòu)設(shè)計、程序員職業(yè)發(fā)展等方面的見解,希望能得到你的關(guān)注。
Redis和MySQL的應(yīng)用場景是不同的。
通常來說,沒有說用Redis就不用MySQL的這種情況。
因為Redis是一種非關(guān)系型數(shù)據(jù)庫(NoSQL),而MySQL是一種關(guān)系型數(shù)據(jù)庫。
和Redis同類的數(shù)據(jù)庫還有MongoDB和Memchache(其實并沒有持久化數(shù)據(jù))
那關(guān)系型數(shù)據(jù)庫現(xiàn)在常用的一般有MySQL,SQL Server,Oracle。
我們先來了解一下關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫的區(qū)別吧。
1.存儲方式
關(guān)系型數(shù)據(jù)庫是表格式的,因此存儲在表的行和列中。他們之間很容易關(guān)聯(lián)協(xié)作存儲,提取數(shù)據(jù)很方便。而Nosql數(shù)據(jù)庫則與其相反,他是大塊的組合在一起。通常存儲在數(shù)據(jù)集中,就像文檔、鍵值對或者圖結(jié)構(gòu)。
2.存儲結(jié)構(gòu)
關(guān)系型數(shù)據(jù)庫對應(yīng)的是結(jié)構(gòu)化數(shù)據(jù),數(shù)據(jù)表都預(yù)先定義了結(jié)構(gòu)(列的定義),結(jié)構(gòu)描述了數(shù)據(jù)的形式和內(nèi)容。這一點對數(shù)據(jù)建模至關(guān)重要,雖然預(yù)定義結(jié)構(gòu)帶來了可靠性和穩(wěn)定性,但是修改這些數(shù)據(jù)比較困難。而Nosql數(shù)據(jù)庫基于動態(tài)結(jié)構(gòu),使用與非結(jié)構(gòu)化數(shù)據(jù)。因為Nosql數(shù)據(jù)庫是動態(tài)結(jié)構(gòu),可以很容易適應(yīng)數(shù)據(jù)類型和結(jié)構(gòu)的變化。
3.存儲規(guī)范
關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)存儲為了更高的規(guī)范性,把數(shù)據(jù)分割為最小的關(guān)系表以避免重復(fù),獲得精簡的空間利用。雖然管理起來很清晰,但是單個操作設(shè)計到多張表的時候,數(shù)據(jù)管理就顯得有點麻煩。而Nosql數(shù)據(jù)存儲在平面數(shù)據(jù)集中,數(shù)據(jù)經(jīng)常可能會重復(fù)。單個數(shù)據(jù)庫很少被分隔開,而是存儲成了一個整體,這樣整塊數(shù)據(jù)更加便于讀寫
4.存儲擴展
這可能是兩者之間最大的區(qū)別,關(guān)系型數(shù)據(jù)庫是縱向擴展,也就是說想要提高處理能力,要使用速度更快的計算機。因為數(shù)據(jù)存儲在關(guān)系表中,操作的性能瓶頸可能涉及到多個表,需要通過提升計算機性能來克服。雖然有很大的擴展空間,但是最終會達到縱向擴展的上限。而Nosql數(shù)據(jù)庫是橫向擴展的,它的存儲天然就是分布式的,可以通過給資源池添加更多的普通數(shù)據(jù)庫服務(wù)器來分擔負載。
5.查詢方式
關(guān)系型數(shù)據(jù)庫通過結(jié)構(gòu)化查詢語言來操作數(shù)據(jù)庫(就是我們通常說的SQL)。SQL支持數(shù)據(jù)庫CURD操作的功能非常強大,是業(yè)界的標準用法。而Nosql查詢以塊為單元操作數(shù)據(jù),使用的是非結(jié)構(gòu)化查詢語言(UnQl),它是沒有標準的。關(guān)系型數(shù)據(jù)庫表中主鍵的概念對應(yīng)Nosql中存儲文檔的ID。關(guān)系型數(shù)據(jù)庫使用預(yù)定義優(yōu)化方式(比如索引)來加快查詢操作,而Nosql更簡單更精確的數(shù)據(jù)訪問模式。
6.事務(wù)
關(guān)系型數(shù)據(jù)庫遵循ACID規(guī)則(原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)),而Nosql數(shù)據(jù)庫遵循BASE原則(基本可用(Basically Availble)、軟/柔性事務(wù)(Soft-state )、最終一致性(Eventual Consistency))。由于關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)強一致性,所以對事務(wù)的支持很好。關(guān)系型數(shù)據(jù)庫支持對事務(wù)原子性細粒度控制,并且易于回滾事務(wù)。而Nosql數(shù)據(jù)庫是在CAP(一致性、可用性、分區(qū)容忍度)中任選兩項,因為基于節(jié)點的分布式系統(tǒng)中,很難全部滿足,所以對事務(wù)的支持不是很好,雖然也可以使用事務(wù),但是并不是Nosql的閃光點。
7.性能
關(guān)系型數(shù)據(jù)庫為了維護數(shù)據(jù)的一致性付出了巨大的代價,讀寫性能比較差。在面對高并發(fā)讀寫性能非常差,面對海量數(shù)據(jù)的時候效率非常低。而Nosql存儲的格式都是key-value類型的,并且存儲在內(nèi)存中,非常容易存儲,而且對于數(shù)據(jù)的 一致性是 弱要求。Nosql無需sql的解析,提高了讀寫性能。
8.授權(quán)方式
大多數(shù)的關(guān)系型數(shù)據(jù)庫都是付費的并且價格昂貴,成本較大(MySQL是開源的,所以應(yīng)用的場景最多),而Nosql數(shù)據(jù)庫通常都是開源的。
所以,在實際的應(yīng)用環(huán)境中,我們一般會使用MySQL存儲我們的業(yè)務(wù)過程中的數(shù)據(jù),因為這些數(shù)據(jù)之間的關(guān)系比較復(fù)雜,我們常常會需要在查詢一個表的數(shù)據(jù)時候,將其他關(guān)系表的數(shù)據(jù)查詢出來,例如,查詢某個用戶的訂單,那至少是需要用戶表和訂單表的數(shù)據(jù)。
查詢某個商品的銷售數(shù)據(jù),那可能就會需要用戶表,訂單表,訂單明細表,商品表等等。
而在這樣的使用場景中,我們使用Redis來存儲的話,也就是KeyValue形式存儲的話,其實并不能滿足我們的需要。
即使Redis的讀取效率再高,我們也沒法用。
但,對于某些沒有關(guān)聯(lián)少,且需要高頻率讀寫,我們使用Redis就能夠很好的提高整個體統(tǒng)的并發(fā)能力。
例如商品的庫存信息,我們雖然在MySQL中會有這樣的字段,但是我們并不想MySQL的數(shù)據(jù)庫被高頻的讀寫,因為使用這樣會導(dǎo)致我的商品表或者庫存表IO非常高,從而影響整個體統(tǒng)的效率。
所以,對于這樣的數(shù)據(jù),且有沒有什么復(fù)雜邏輯關(guān)系(就只是隸屬于SKU)的數(shù)據(jù),我們就可以放在Redis里面,下單直接在Redis中減掉庫存,這樣,我們的訂單的并發(fā)能力就能夠提高了。
個人覺得應(yīng)該站出來更正一下,相反的數(shù)據(jù)量大,更不應(yīng)該用redis。
為什么?
因為redis是內(nèi)存型數(shù)據(jù)庫啊,是放在內(nèi)存里的。
設(shè)想一下,假如你的電腦100G的資料,都用redis來存儲,那么你需要100G以上的內(nèi)存!
使用場景
Redis最明顯的用例之一是將其用作緩存。只是保存熱數(shù)據(jù),或者具有過期的cache。
例如facebook,使用Memcached來作為其會話緩存。
總之,沒有見過哪個大公司數(shù)據(jù)量大了,換掉mysql用redis的。
題主你錯了,不是用redis代替MySQL,而是引入redis來優(yōu)化。
BAT里越來越多的項目組已經(jīng)采用了redis+MySQL的架構(gòu)來開發(fā)平臺工具。
如題主所說,當數(shù)據(jù)多的時候,MySQL的查詢效率會大打折扣。我們通常默認如果查詢的字段包含索引的話,返回是毫秒級別的。但是在實際工作中,我曾經(jīng)遇到過一張包含10個字段的表,1800萬+條數(shù)據(jù),當某種場景下,我們不得不根據(jù)一個未加索引的字段進行精確查詢的時候,單條sql語句的執(zhí)行時長有時能夠達到2min以上,就更別提如果用like這種模糊查詢的話,其效率將會多么低下。
我們最開始是希望能夠通過增加索引的方式解決,但是面對千萬級別的數(shù)據(jù)量,我們也不敢貿(mào)然加索引,因為一旦數(shù)據(jù)庫hang住,期間的所有數(shù)據(jù)庫寫入請求都會被放到等待隊列中,如果請求是通過http請求發(fā)過來的,很有可能導(dǎo)致服務(wù)發(fā)生分鐘級別的超時不響應(yīng)。
經(jīng)過一番調(diào)研,最終敲定的解決方案是引入redis作為緩存。redis具有運行效率高,數(shù)據(jù)查詢速度快,支持多種存儲類型以及事務(wù)等優(yōu)勢,我們把經(jīng)常讀取,而不經(jīng)常改動的數(shù)據(jù)放入redis中,服務(wù)器讀取這類數(shù)據(jù)的時候時候,直接與redis通信,極大的緩解了MySQL的壓力。
然而,我在上面也說了,是redis+MySQL結(jié)合的方式,而不是替代。原因就是redis雖然讀寫很快,但是不適合做數(shù)據(jù)持久層,主要原因是使用redis做數(shù)據(jù)落盤是要以效率作為代價的,即每隔制定的時間,redis就要去進行數(shù)據(jù)備份/落盤,這對于單線程的它來說,勢必會因“分心”而影響效率,結(jié)果得不償失。
樓主你好,首先糾正下,數(shù)據(jù)多并不是一定就用Redis,Redis歸屬于NoSQL數(shù)據(jù)庫中,其特點擁有高性能讀寫數(shù)據(jù)速度,主要解決業(yè)務(wù)效率瓶頸。下面就詳細說下Redis的相比MySQL優(yōu)點。( 關(guān)于Redis詳細了解參見我近期文章: )
讀寫異???/p>
Redis非常快,每秒可執(zhí)行大約10萬次的讀寫速度。
豐富的數(shù)據(jù)類型
Redis支持豐富的數(shù)據(jù)類型,有二進制字符串、列表、集合、排序集和散列等等。這使得Redis很容易被用來解決各種問題,因為我們知道哪些問題可以更好使用地哪些數(shù)據(jù)類型來處理解決。
原子性
Redis的所有操作都是原子操作,這確保如果兩個客戶端并發(fā)訪問,Redis服務(wù)器能接收更新的值。
豐富實用工具 支持異機主從復(fù)制
Redis支持主從復(fù)制的配置,它可以實現(xiàn)主服務(wù)器的完全拷貝。
以上為開發(fā)者青睞Redis的主要幾個可取之處。但是,請注意實際生產(chǎn)環(huán)境中企業(yè)都是結(jié)合Redis和MySQL的特定進行不同應(yīng)用場景的取舍。 如緩存——熱數(shù)據(jù)、計數(shù)器、消息隊列(與ActiveMQ,RocketMQ等工具類似)、位操作(大數(shù)據(jù)處理)、分布式鎖與單線程機制、最新列表(如新聞列表頁面最新的新聞列表)以及排行榜等等 可以看見Redis大顯身手的場景??墒菍τ趪乐?shù)臄?shù)據(jù)準確度和復(fù)雜的關(guān)系型應(yīng)用MySQL等關(guān)系型數(shù)據(jù)庫依然不可替。
web應(yīng)用中一般采用MySQL+Redis的方式,web應(yīng)用每次先訪問Redis,如果沒有找到數(shù)據(jù),才去訪問MySQL。
本質(zhì)區(qū)別
1、mysql:數(shù)據(jù)放在磁盤 redis:數(shù)據(jù)放在內(nèi)存。
首先要知道m(xù)ysql存儲在磁盤里,redis存儲在內(nèi)存里,redis既可以用來做持久存儲,也可以做緩存,而目前大多數(shù)公司的存儲都是mysql + redis,mysql作為主存儲,redis作為輔助存儲被用作緩存,加快訪問讀取的速度,提高性能。
使用場景區(qū)別
1、mysql支持sql查詢,可以實現(xiàn)一些關(guān)聯(lián)的查詢以及統(tǒng)計;
2、redis對內(nèi)存要求比較高,在有限的條件下不能把所有數(shù)據(jù)都放在redis;
3、mysql偏向于存數(shù)據(jù),redis偏向于快速取數(shù)據(jù),但redis查詢復(fù)雜的表關(guān)系時不如mysql,所以可以把熱門的數(shù)據(jù)放redis,mysql存基本數(shù)據(jù)。
mysql的運行機制
mysql作為持久化存儲的關(guān)系型數(shù)據(jù)庫,相對薄弱的地方在于每次請求訪問數(shù)據(jù)庫時,都存在著I/O操作,如果反復(fù)頻繁的訪問數(shù)據(jù)庫。第一:會在反復(fù)鏈接數(shù)據(jù)庫上花費大量時間,從而導(dǎo)致運行效率過慢;第二:反復(fù)地訪問數(shù)據(jù)庫也會導(dǎo)致數(shù)據(jù)庫的負載過高,那么此時緩存的概念就衍生了出來。
Redis持久化
由于Redis的數(shù)據(jù)都存放在內(nèi)存中,如果沒有配置持久化,redis重啟后數(shù)據(jù)就全丟失了,于是需要開啟redis的持久化功能,將數(shù)據(jù)保存到磁盤上,當redis重啟后,可以從磁盤中恢復(fù)數(shù)據(jù)。redis提供兩種方式進行持久化,一種是RDB持久化(原理是將Reids在內(nèi)存中的數(shù)據(jù)庫記錄定時dump到磁盤上的RDB持久化),另外一種是AOF(append only file)持久化(原理是將Reids的操作日志以追加的方式寫入文件)。
redis是放在內(nèi)存的~!
數(shù)據(jù)量多少絕對不是選擇redis和mysql的準則,因為無論是mysql和redis都可以集群擴展,約束它們的只是硬件(即你有沒有那么多錢搭建上千個組成的集群),我個人覺得數(shù)據(jù)讀取的快慢可能是選擇的標準之一,另外工作中往往是兩者同是使用,因為mysql存儲在硬盤,做持久化存儲,而redis存儲在內(nèi)存中做緩存提升效率。
關(guān)系型數(shù)據(jù)庫是必不可少的,因為只有關(guān)系型數(shù)據(jù)庫才能提供給你各種各樣的查詢方式。如果有一系列的數(shù)據(jù)會頻繁的查詢,那么就用redis進行非持久化的存儲,以供查詢使用,是解決并發(fā)性能問題的其中一個手段
“NoSQL,指的是非關(guān)系型的數(shù)據(jù)庫。NoSQL有時也稱作Not Only SQL的縮寫,是對不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)的統(tǒng)稱。NoSQL用于超大規(guī)模數(shù)據(jù)的存儲。這些類型的數(shù)據(jù)存儲不需要固定的模式,無需多余操作就可以橫向擴展。”
文章標題:nosql存二進制,nosql 列存儲
網(wǎng)址分享:http://jinyejixie.com/article26/hopdcg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、云服務(wù)器、域名注冊、企業(yè)建站、做網(wǎng)站、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)