<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • nosql索引與優(yōu)化,mysql數(shù)據(jù)庫索引優(yōu)化

            數(shù)據(jù)多的時候為什么要使用redis而不用mysql?

            通常來說,當(dāng)數(shù)據(jù)多、并發(fā)量大的時候,架構(gòu)中可以引入Redis,幫助提升架構(gòu)的整體性能,減少Mysql(或其他數(shù)據(jù)庫)的壓力,但不是使用Redis,就不用MySQL。

            讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:申請域名、虛擬主機(jī)、營銷軟件、網(wǎng)站建設(shè)、黔西南州網(wǎng)站維護(hù)、網(wǎng)站推廣。

            因為Redis的性能十分優(yōu)越,可以支持每秒十幾萬此的讀/寫操作,并且它還支持持久化、集群部署、分布式、主從同步等,Redis在高并發(fā)的場景下數(shù)據(jù)的安全和一致性,所以它經(jīng)常用于兩個場景:

            緩存

            判斷數(shù)據(jù)是否適合緩存到Redis中,可以從幾個方面考慮: 會經(jīng)常查詢么?命中率如何?寫操作多么?數(shù)據(jù)大小?

            我們經(jīng)常采用這樣的方式將數(shù)據(jù)刷到Redis中:查詢的請求過來,現(xiàn)在Redis中查詢,如果查詢不到,就查詢數(shù)據(jù)庫拿到數(shù)據(jù),再放到緩存中,這樣第二次相同的查詢請求過來,就可以直接在Redis中拿到數(shù)據(jù);不過要注意【緩存穿透】的問題。

            緩存的刷新會比較復(fù)雜,通常是修改完數(shù)據(jù)庫之后,還需要對Redis中的數(shù)據(jù)進(jìn)行操作;代碼很簡單,但是需要保證這兩步為同一事務(wù),或最終的事務(wù)一致性。

            高速讀寫

            常見的就是計數(shù)器,比如一篇文章的閱讀量,不可能每一次閱讀就在數(shù)據(jù)庫里面update一次。

            高并發(fā)的場景很適合使用Redis,比如雙11秒殺,庫存一共就一千件,到了秒殺的時間,通常會在極為短暫的時間內(nèi),有數(shù)萬級的請求達(dá)到服務(wù)器,如果使用數(shù)據(jù)庫的話,很可能在這一瞬間造成數(shù)據(jù)庫的崩潰,所以通常會使用Redis(秒殺的場景會比較復(fù)雜,Redis只是其中之一,例如如果請求超過某個數(shù)量的時候,多余的請求就會被限流)。

            這種高并發(fā)的場景,是當(dāng)請求達(dá)到服務(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.存儲擴(kuò)展

            這可能是兩者之間最大的區(qū)別,關(guān)系型數(shù)據(jù)庫是縱向擴(kuò)展,也就是說想要提高處理能力,要使用速度更快的計算機(jī)。因為數(shù)據(jù)存儲在關(guān)系表中,操作的性能瓶頸可能涉及到多個表,需要通過提升計算機(jī)性能來克服。雖然有很大的擴(kuò)展空間,但是最終會達(dá)到縱向擴(kuò)展的上限。而Nosql數(shù)據(jù)庫是橫向擴(kuò)展的,它的存儲天然就是分布式的,可以通過給資源池添加更多的普通數(shù)據(jù)庫服務(wù)器來分擔(dān)負(fù)載。

            5.查詢方式

            關(guān)系型數(shù)據(jù)庫通過結(jié)構(gòu)化查詢語言來操作數(shù)據(jù)庫(就是我們通常說的SQL)。SQL支持?jǐn)?shù)據(jù)庫CURD操作的功能非常強(qiáng)大,是業(yè)界的標(biāo)準(zhǔn)用法。而Nosql查詢以塊為單元操作數(shù)據(jù),使用的是非結(jié)構(gòu)化查詢語言(UnQl),它是沒有標(biāo)準(zhǔn)的。關(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ù)強(qiáng)一致性,所以對事務(wù)的支持很好。關(guān)系型數(shù)據(jù)庫支持對事務(wù)原子性細(xì)粒度控制,并且易于回滾事務(wù)。而Nosql數(shù)據(jù)庫是在CAP(一致性、可用性、分區(qū)容忍度)中任選兩項,因為基于節(jié)點的分布式系統(tǒng)中,很難全部滿足,所以對事務(wù)的支持不是很好,雖然也可以使用事務(wù),但是并不是Nosql的閃光點。

            7.性能

            關(guān)系型數(shù)據(jù)庫為了維護(hù)數(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ù),那可能就會需要用戶表,訂單表,訂單明細(xì)表,商品表等等。

            而在這樣的使用場景中,我們使用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ā)平臺工具。

            如題主所說,當(dāng)數(shù)據(jù)多的時候,MySQL的查詢效率會大打折扣。我們通常默認(rèn)如果查詢的字段包含索引的話,返回是毫秒級別的。但是在實際工作中,我曾經(jīng)遇到過一張包含10個字段的表,1800萬+條數(shù)據(jù),當(dāng)某種場景下,我們不得不根據(jù)一個未加索引的字段進(jìn)行精確查詢的時候,單條sql語句的執(zhí)行時長有時能夠達(dá)到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就要去進(jìn)行數(shù)據(jù)備份/落盤,這對于單線程的它來說,勢必會因“分心”而影響效率,結(jié)果得不償失。

            樓主你好,首先糾正下,數(shù)據(jù)多并不是一定就用Redis,Redis歸屬于NoSQL數(shù)據(jù)庫中,其特點擁有高性能讀寫數(shù)據(jù)速度,主要解決業(yè)務(wù)效率瓶頸。下面就詳細(xì)說下Redis的相比MySQL優(yōu)點。( 關(guān)于Redis詳細(xì)了解參見我近期文章: )

            讀寫異???/p>

            Redis非常快,每秒可執(zhí)行大約10萬次的讀寫速度。

            豐富的數(shù)據(jù)類型

            Redis支持豐富的數(shù)據(jù)類型,有二進(jìn)制字符串、列表、集合、排序集和散列等等。這使得Redis很容易被用來解決各種問題,因為我們知道哪些問題可以更好使用地哪些數(shù)據(jù)類型來處理解決。

            原子性

            Redis的所有操作都是原子操作,這確保如果兩個客戶端并發(fā)訪問,Redis服務(wù)器能接收更新的值。

            豐富實用工具 支持異機(jī)主從復(fù)制

            Redis支持主從復(fù)制的配置,它可以實現(xiàn)主服務(wù)器的完全拷貝。

            以上為開發(fā)者青睞Redis的主要幾個可取之處。但是,請注意實際生產(chǎn)環(huán)境中企業(yè)都是結(jié)合Redis和MySQL的特定進(jìn)行不同應(yīng)用場景的取舍。 如緩存——熱數(shù)據(jù)、計數(shù)器、消息隊列(與ActiveMQ,RocketMQ等工具類似)、位操作(大數(shù)據(jù)處理)、分布式鎖與單線程機(jī)制、最新列表(如新聞列表頁面最新的新聞列表)以及排行榜等等 可以看見Redis大顯身手的場景??墒菍τ趪?yán)謹(jǐn)?shù)臄?shù)據(jù)準(zhǔn)確度和復(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的運行機(jī)制

            mysql作為持久化存儲的關(guān)系型數(shù)據(jù)庫,相對薄弱的地方在于每次請求訪問數(shù)據(jù)庫時,都存在著I/O操作,如果反復(fù)頻繁的訪問數(shù)據(jù)庫。第一:會在反復(fù)鏈接數(shù)據(jù)庫上花費大量時間,從而導(dǎo)致運行效率過慢;第二:反復(fù)地訪問數(shù)據(jù)庫也會導(dǎo)致數(shù)據(jù)庫的負(fù)載過高,那么此時緩存的概念就衍生了出來。

            Redis持久化

            由于Redis的數(shù)據(jù)都存放在內(nèi)存中,如果沒有配置持久化,redis重啟后數(shù)據(jù)就全丟失了,于是需要開啟redis的持久化功能,將數(shù)據(jù)保存到磁盤上,當(dāng)redis重啟后,可以從磁盤中恢復(fù)數(shù)據(jù)。redis提供兩種方式進(jìn)行持久化,一種是RDB持久化(原理是將Reids在內(nèi)存中的數(shù)據(jù)庫記錄定時dump到磁盤上的RDB持久化),另外一種是AOF(append only file)持久化(原理是將Reids的操作日志以追加的方式寫入文件)。

            redis是放在內(nèi)存的~!

            數(shù)據(jù)量多少絕對不是選擇redis和mysql的準(zhǔn)則,因為無論是mysql和redis都可以集群擴(kuò)展,約束它們的只是硬件(即你有沒有那么多錢搭建上千個組成的集群),我個人覺得數(shù)據(jù)讀取的快慢可能是選擇的標(biāo)準(zhǔn)之一,另外工作中往往是兩者同是使用,因為mysql存儲在硬盤,做持久化存儲,而redis存儲在內(nèi)存中做緩存提升效率。

            關(guān)系型數(shù)據(jù)庫是必不可少的,因為只有關(guān)系型數(shù)據(jù)庫才能提供給你各種各樣的查詢方式。如果有一系列的數(shù)據(jù)會頻繁的查詢,那么就用redis進(jìn)行非持久化的存儲,以供查詢使用,是解決并發(fā)性能問題的其中一個手段

            簡述什么是nosql數(shù)據(jù)庫,并列舉兩種常見的nosql數(shù)據(jù)庫名稱及其特點

            NoSQL太火,冒出太多產(chǎn)品了,保守估計也成百上千了。

            互聯(lián)網(wǎng)公司常用的基本集中在以下幾種,每種只舉一個比較常見或者應(yīng)用比較成功的例子吧。

            1. In-Memory KV Store : Redis

            in memory key-value store,同時提供了更加豐富的數(shù)據(jù)結(jié)構(gòu)和運算的能力,成功用法是替代memcached,通過checkpoint和commit log提供了快速的宕機(jī)恢復(fù),同時支持replication提供讀可擴(kuò)展和高可用。

            2. Disk-Based KV Store: Leveldb

            真正基于磁盤的key-value storage, 模型單一簡單,數(shù)據(jù)量不受限于內(nèi)存大小,數(shù)據(jù)落盤高可靠,Google的幾位大神出品的精品,LSM模型天然寫優(yōu)化,順序?qū)懕P的方式對于新硬件ssd再適合不過了,不足是僅提供了一個庫,需要自己封裝server端。

            3. Document Store: Mongodb

            分布式nosql,具備了區(qū)別mysql的最大亮點:可擴(kuò)展性。mongodb 最新引人的莫過于提供了sql接口,是目前nosql里最像mysql的,只是沒有ACID的特性,發(fā)展很快,支持了索引等特性,上手容易,對于數(shù)據(jù)量遠(yuǎn)超內(nèi)存限制的場景來說,還需要慎重。

            4. Column Table Store: HBase

            這個富二代似乎不用贅述了,最大的優(yōu)勢是開源,對于普通的scan和基于行的get等基本查詢,性能完全不是問題,只是只提供裸的api,易用性上是短板,可擴(kuò)展性方面是最強(qiáng)的,其次坐上了Hadoop的快車,社區(qū)發(fā)展很快,各種基于其上的開源產(chǎn)品不少,來解決諸如join、聚集運算等復(fù)雜查詢。

            為什么要使用NoSQL?NOSQL的優(yōu)勢

            這次的NoSQL專欄系列將先整體介紹NoSQL,然后介紹如何把NoSQL運用到自己的項目中合適的場景中,還會適當(dāng)?shù)胤治鲆恍┏晒Π咐?,希望有成功使用NoSQL經(jīng)驗的朋友給我提供一些線索和信息。

            NoSQL概念隨著web2.0的快速發(fā)展,非關(guān)系型、分布式數(shù)據(jù)存儲得到了快速的發(fā)展,它們不保證關(guān)系數(shù)據(jù)的ACID特性。NoSQL概念在2009年被提了出來。NoSQL最常見的解釋是“non-relational”,“Not Only SQL”也被很多人接受。(“NoSQL”一詞最早于1998年被用于一個輕量級的關(guān)系數(shù)據(jù)庫的名字。)

            NoSQL被我們用得最多的當(dāng)數(shù)key-value存儲,當(dāng)然還有其他的文檔型的、列存儲、圖型數(shù)據(jù)庫、xml數(shù)據(jù)庫等。在NoSQL概念提出之前,這些數(shù)據(jù)庫就被用于各種系統(tǒng)當(dāng)中,但是卻很少用于web互聯(lián)網(wǎng)應(yīng)用。比如cdb、qdbm、bdb數(shù)據(jù)庫。

            傳統(tǒng)關(guān)系數(shù)據(jù)庫的瓶頸

            傳統(tǒng)的關(guān)系數(shù)據(jù)庫具有不錯的性能,高穩(wěn)定型,久經(jīng)歷史考驗,而且使用簡單,功能強(qiáng)大,同時也積累了大量的成功案例。在互聯(lián)網(wǎng)領(lǐng)域,MySQL成為了絕對靠前的王者,毫不夸張的說,MySQL為互聯(lián)網(wǎng)的發(fā)展做出了卓越的貢獻(xiàn)。

            在90年代,一個網(wǎng)站的訪問量一般都不大,用單個數(shù)據(jù)庫完全可以輕松應(yīng)付。在那個時候,更多的都是靜態(tài)網(wǎng)頁,動態(tài)交互類型的網(wǎng)站不多。

            到了最近10年,網(wǎng)站開始快速發(fā)展?;鸨恼搲?、博客、sns、微博逐漸引領(lǐng)web領(lǐng)域的潮流。在初期,論壇的流量其實也不大,如果你接觸網(wǎng)絡(luò)比較早,你可能還記得那個時候還有文本型存儲的論壇程序,可以想象一般的論壇的流量有多大。

            Memcached+MySQL

            后來,隨著訪問量的上升,幾乎大部分使用MySQL架構(gòu)的網(wǎng)站在數(shù)據(jù)庫上都開始出現(xiàn)了性能問題,web程序不再僅僅專注在功能上,同時也在追求性能。程序員們開始大量的使用緩存技術(shù)來緩解數(shù)據(jù)庫的壓力,優(yōu)化數(shù)據(jù)庫的結(jié)構(gòu)和索引。開始比較流行的是通過文件緩存來緩解數(shù)據(jù)庫壓力,但是當(dāng)訪問量繼續(xù)增大的時候,多臺web機(jī)器通過文件緩存不能共享,大量的小文件緩存也帶了了比較高的IO壓力。在這個時候,Memcached就自然的成為一個非常時尚的技術(shù)產(chǎn)品。

            Memcached作為一個獨立的分布式的緩存服務(wù)器,為多個web服務(wù)器提供了一個共享的高性能緩存服務(wù),在Memcached服務(wù)器上,又發(fā)展了根據(jù)hash算法來進(jìn)行多臺Memcached緩存服務(wù)的擴(kuò)展,然后又出現(xiàn)了一致性hash來解決增加或減少緩存服務(wù)器導(dǎo)致重新hash帶來的大量緩存失效的弊端。當(dāng)時,如果你去面試,你說你有Memcached經(jīng)驗,肯定會加分的。

            Mysql主從讀寫分離

            由于數(shù)據(jù)庫的寫入壓力增加,Memcached只能緩解數(shù)據(jù)庫的讀取壓力。讀寫集中在一個數(shù)據(jù)庫上讓數(shù)據(jù)庫不堪重負(fù),大部分網(wǎng)站開始使用主從復(fù)制技術(shù)來達(dá)到讀寫分離,以提高讀寫性能和讀庫的可擴(kuò)展性。Mysql的master-slave模式成為這個時候的網(wǎng)站標(biāo)配了。

            分表分庫隨著web2.0的繼續(xù)高速發(fā)展,在Memcached的高速緩存,MySQL的主從復(fù)制,讀寫分離的基礎(chǔ)之上,這時MySQL主庫的寫壓力開始出現(xiàn)瓶頸,而數(shù)據(jù)量的持續(xù)猛增,由于MyISAM使用表鎖,在高并發(fā)下會出現(xiàn)嚴(yán)重的鎖問題,大量的高并發(fā)MySQL應(yīng)用開始使用InnoDB引擎代替MyISAM。同時,開始流行使用分表分庫來緩解寫壓力和數(shù)據(jù)增長的擴(kuò)展問題。這個時候,分表分庫成了一個熱門技術(shù),是面試的熱門問題也是業(yè)界討論的熱門技術(shù)問題。也就在這個時候,MySQL推出了還不太穩(wěn)定的表分區(qū),這也給技術(shù)實力一般的公司帶來了希望。雖然MySQL推出了MySQL Cluster集群,但是由于在互聯(lián)網(wǎng)幾乎沒有成功案例,性能也不能滿足互聯(lián)網(wǎng)的要求,只是在高可靠性上提供了非常大的保證。

            MySQL的擴(kuò)展性瓶頸

            在互聯(lián)網(wǎng),大部分的MySQL都應(yīng)該是IO密集型的,事實上,如果你的MySQL是個CPU密集型的話,那么很可能你的MySQL設(shè)計得有性能問題,需要優(yōu)化了。大數(shù)據(jù)量高并發(fā)環(huán)境下的MySQL應(yīng)用開發(fā)越來越復(fù)雜,也越來越具有技術(shù)挑戰(zhàn)性。分表分庫的規(guī)則把握都是需要經(jīng)驗的。雖然有像淘寶這樣技術(shù)實力強(qiáng)大的公司開發(fā)了透明的中間件層來屏蔽開發(fā)者的復(fù)雜性,但是避免不了整個架構(gòu)的復(fù)雜性。分庫分表的子庫到一定階段又面臨擴(kuò)展問題。還有就是需求的變更,可能又需要一種新的分庫方式。

            MySQL數(shù)據(jù)庫也經(jīng)常存儲一些大文本字段,導(dǎo)致數(shù)據(jù)庫表非常的大,在做數(shù)據(jù)庫恢復(fù)的時候就導(dǎo)致非常的慢,不容易快速恢復(fù)數(shù)據(jù)庫。比如1000萬4KB大小的文本就接近40GB的大小,如果能把這些數(shù)據(jù)從MySQL省去,MySQL將變得非常的小。

            關(guān)系數(shù)據(jù)庫很強(qiáng)大,但是它并不能很好的應(yīng)付所有的應(yīng)用場景。MySQL的擴(kuò)展性差(需要復(fù)雜的技術(shù)來實現(xiàn)),大數(shù)據(jù)下IO壓力大,表結(jié)構(gòu)更改困難,正是當(dāng)前使用MySQL的開發(fā)人員面臨的問題。

            NOSQL的優(yōu)勢易擴(kuò)展NoSQL數(shù)據(jù)庫種類繁多,但是一個共同的特點都是去掉關(guān)系數(shù)據(jù)庫的關(guān)系型特性。數(shù)據(jù)之間無關(guān)系,這樣就非常容易擴(kuò)展。也無形之間,在架構(gòu)的層面上帶來了可擴(kuò)展的能力。

            大數(shù)據(jù)量,高性能

            NoSQL數(shù)據(jù)庫都具有非常高的讀寫性能,尤其在大數(shù)據(jù)量下,同樣表現(xiàn)優(yōu)秀。這得益于它的無關(guān)系性,數(shù)據(jù)庫的結(jié)構(gòu)簡單。一般MySQL使用Query Cache,每次表的更新Cache就失效,是一種大粒度的Cache,在針對web2.0的交互頻繁的應(yīng)用,Cache性能不高。而NoSQL的Cache是記錄級的,是一種細(xì)粒度的Cache,所以NoSQL在這個層面上來說就要性能高很多了。

            靈活的數(shù)據(jù)模型

            NoSQL無需事先為要存儲的數(shù)據(jù)建立字段,隨時可以存儲自定義的數(shù)據(jù)格式。而在關(guān)系數(shù)據(jù)庫里,增刪字段是一件非常麻煩的事情。如果是非常大數(shù)據(jù)量的表,增加字段簡直就是一個噩夢。這點在大數(shù)據(jù)量的web2.0時代尤其明顯。

            高可用NoSQL在不太影響性能的情況,就可以方便的實現(xiàn)高可用的架構(gòu)。比如Cassandra,HBase模型,通過復(fù)制模型也能實現(xiàn)高可用。

            總結(jié)NoSQL數(shù)據(jù)庫的出現(xiàn),彌補(bǔ)了關(guān)系數(shù)據(jù)(比如MySQL)在某些方面的不足,在某些方面能極大的節(jié)省開發(fā)成本和維護(hù)成本。

            MySQL和NoSQL都有各自的特點和使用的應(yīng)用場景,兩者的緊密結(jié)合將會給web2.0的數(shù)據(jù)庫發(fā)展帶來新的思路。

            為什么使用nosql

            因為速度快。你上億級數(shù)據(jù)的情況下NOSQL是比普通SQL效率更高,哪怕有索引。畢竟NOSQL的存儲空間使用是普通SQL三倍多?;径加迷谒饕矫媪?。

            如果是全文搜索關(guān)鍵字,左右模糊等就更甩SQL幾條街了

            文章名稱:nosql索引與優(yōu)化,mysql數(shù)據(jù)庫索引優(yōu)化
            標(biāo)題來源:http://www.jbt999.com/article18/hdcodp.html

            成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、網(wǎng)頁設(shè)計公司、、網(wǎng)站建設(shè)、虛擬主機(jī)、網(wǎng)站策劃

            廣告

            聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

            綿陽服務(wù)器托管

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 日韩欧美国产综合 | 一级A片黄片 | 欧美色色资源 | 无码在线中文字幕 | 色情视频在线免费 |