NoSQL薄弱的安全性會給企業(yè)帶來負(fù)面影響 。Imperva公司創(chuàng)始人兼CTO Amichai Shulman如是說。在新的一年中,無疑會有更多企業(yè)開始或籌劃部署NoSQL。方案落實(shí)后就會逐漸發(fā)現(xiàn)種種安全問題,因此早做準(zhǔn)備才是正確的選擇。 作為傳統(tǒng)關(guān)系型數(shù)據(jù)庫的替代方案,NoSQL在查詢中并不使用SQL語言,而且允許用戶隨時變更數(shù)據(jù)屬性。此類數(shù)據(jù)庫以擴(kuò)展性良好著稱,并能夠在需要大量應(yīng)用程序與數(shù)據(jù)庫本身進(jìn)行實(shí)時交互的交易處理任務(wù)中發(fā)揮性能優(yōu)勢,Couchbase創(chuàng)始人兼產(chǎn)品部門高級副總裁James Phillips解釋稱:NoSQL以交易業(yè)務(wù)為核心。它更注重實(shí)時處理能力并且擅長直接對數(shù)據(jù)進(jìn)行操作,大幅度促進(jìn)了交互型軟件系統(tǒng)的發(fā)展。Phillips指出。其中最大的優(yōu)勢之一是能夠隨時改變(在屬性方面),由于結(jié)構(gòu)性的弱化,修改過程非常便捷。 NoSQL最大優(yōu)勢影響其安全性 NoSQL的關(guān)鍵性特色之一是其動態(tài)的數(shù)據(jù)模型,Shulman解釋道。我可以在其運(yùn)作過程中加入新的屬性記錄。因此與這種結(jié)構(gòu)相匹配的安全模型必須具備一定的前瞻性規(guī)劃。也就是說,它必須能夠了解數(shù)據(jù)庫引入的新屬性將引發(fā)哪些改變,以及新加入的屬性擁有哪些權(quán)限。然而這個層面上的安全概念目前尚不存在,根本沒有這樣的解決方案。 根據(jù)Phillips的說法,某些NoSQL開發(fā)商已經(jīng)開始著手研發(fā)安全機(jī)制,至少在嘗試保護(hù)數(shù)據(jù)的完整性。在關(guān)系型數(shù)據(jù)庫領(lǐng)域,如果我們的數(shù)據(jù)組成不正確,那么它將無法與結(jié)構(gòu)并行運(yùn)作,換言之?dāng)?shù)據(jù)插入操作整體將宣告失敗。目前各種驗(yàn)證規(guī)則與完整性檢查已經(jīng)比較完善,而事實(shí)證明這些驗(yàn)證機(jī)制都能在NoSQL中發(fā)揮作用。我們與其他人所推出的解決方案類似,都會在插入一條新記錄或是文檔型規(guī)則時觸發(fā),并在執(zhí)行過程中確保插入數(shù)據(jù)的正確性。 Shulman預(yù)計(jì)新用戶很快將在配置方面捅出大婁子,這并非因?yàn)镮T工作人員的玩忽職守,實(shí)際上主要原因是NoSQL作為一項(xiàng)新技術(shù)導(dǎo)致大多數(shù)人對其缺乏足夠的知識基礎(chǔ)。Application Security研發(fā)部門TeamSHATTER的經(jīng)理Alex Rothacker對上述觀點(diǎn)表示贊同。他指出,培訓(xùn)的一大問題在于,大多數(shù)NoSQL的從業(yè)者往往屬于新生代IT人士,他們對于技術(shù)了解較多,但往往缺乏足夠的安全管理經(jīng)驗(yàn)。 如果他們從傳統(tǒng)關(guān)系型數(shù)據(jù)庫入手,那么由于強(qiáng)制性安全機(jī)制的完備,他們可以在使用中學(xué)習(xí)。但NoSQL,只有行家才能通過觀察得出正確結(jié)論,并在大量研究工作后找到一套完備的安全解決方案。因此可能有90%的從業(yè)者由于知識儲備、安全經(jīng)驗(yàn)或是工作時間的局限而無法做到這一點(diǎn)。 NoSQL需在安全性方面進(jìn)行優(yōu)化 盡管Phillips認(rèn)同新技術(shù)與舊經(jīng)驗(yàn)之間存在差異,但企業(yè)在推廣NoSQL時加大對安全性的關(guān)注會起到很大程度的積極作用。他認(rèn)為此類數(shù)據(jù)存儲機(jī)制與傳統(tǒng)關(guān)系類數(shù)據(jù)庫相比,其中包含著的敏感類信息更少,而且與企業(yè)網(wǎng)絡(luò)內(nèi)部其它應(yīng)用程序的接觸機(jī)會也小得多。 他們并不把這項(xiàng)新技術(shù)完全當(dāng)成數(shù)據(jù)庫使用,正如我們在收集整理大量來自其它應(yīng)用程序的業(yè)務(wù)類數(shù)據(jù)時,往往也會考慮將其作為企業(yè)數(shù)據(jù)存儲機(jī)制一樣,他補(bǔ)充道。當(dāng)然,如果我打算研發(fā)一套具備某種特定功能的社交網(wǎng)絡(luò)、社交游戲或是某種特殊web應(yīng)用程序,也很可能會將其部署于防火墻之下。這樣一來它不僅與應(yīng)用程序緊密結(jié)合,也不會被企業(yè)中的其它部門所觸及。 但Rothacker同時表示,這種過度依賴周邊安全機(jī)制的數(shù)據(jù)庫系統(tǒng)也存在著極其危險的漏洞。一旦系統(tǒng)完全依附于周邊安全模型,那么驗(yàn)證機(jī)制就必須相對薄弱,而且缺乏多用戶管理及數(shù)據(jù)訪問方面的安全保護(hù)。只要擁有高權(quán)限賬戶,我們幾乎能訪問存儲機(jī)制中的一切數(shù)據(jù)。舉例來說,Brian Sullivan就在去年的黑帽大會上演示了如何在完全不清楚數(shù)據(jù)具體內(nèi)容的情況下,將其信息羅列出來甚至導(dǎo)出。 而根據(jù)nCircle公司CTO Tim ‘TK’ Keanini的觀點(diǎn),即使是與有限的應(yīng)用程序相關(guān)聯(lián),NoSQL也很有可能被暴露在互聯(lián)網(wǎng)上。在缺少嚴(yán)密網(wǎng)絡(luò)劃分的情況下,它可能成為攻擊者窺探存儲數(shù)據(jù)的薄弱環(huán)節(jié)。因?yàn)镹oSQL在設(shè)計(jì)上主要用于互聯(lián)網(wǎng)規(guī)模的部署,所以它很可能被直接連接到互聯(lián)網(wǎng)中,進(jìn)而面臨大量攻擊行為。 其中發(fā)生機(jī)率最高的攻擊行為就是注入式攻擊,這也是一直以來肆虐于關(guān)系類數(shù)據(jù)庫領(lǐng)域的頭號公敵。盡管NoSQL沒有將SQL作為查詢語言,也并不代表它能夠免受注入式攻擊的威脅。雖然不少人宣稱SQL注入在NoSQL這邊不起作用,但其中的原理是完全一致的。攻擊者需要做的只是改變自己注入內(nèi)容的語法形式,Rothacker解釋稱。也就是說雖然SQL注入不會出現(xiàn),但JavaScript注入或者JSON注入同樣能威脅安全。 此外,攻擊者在籌劃對這類數(shù)據(jù)庫展開侵襲時,也很可能進(jìn)一步優(yōu)化自己的工具。不成熟的安全技術(shù)往往帶來這樣的窘境:需要花費(fèi)大量時間學(xué)習(xí)如何保障其安全,但幾乎每個IT人士都能迅速掌握攻擊活動的組織方法。因此我認(rèn)為攻擊者將會始終走在安全部署的前面,Shulman說道。遺憾的是搞破壞總比防范工作更容易,而我們已經(jīng)看到不少NoSQL技術(shù)方面的公開漏洞,尤其是目前引起熱議的、以JSON注入為載體的攻擊方式。 NoSQL安全性并非其阻礙 然而,這一切都不應(yīng)該成為企業(yè)使用NoSQL的阻礙,他總結(jié)道。我認(rèn)為歸根結(jié)底,這應(yīng)該算是企業(yè)的一種商業(yè)決策。只要這種選擇能夠帶來吸引力巨大的商業(yè)機(jī)遇,就要承擔(dān)一定風(fēng)險,Shulman解釋道。但應(yīng)該采取一定措施以盡量弱化這種風(fēng)險。 舉例來說,鑒于數(shù)據(jù)庫對外部安全機(jī)制的依賴性,Rothacker建議企業(yè)積極考慮引入加密方案。他警告稱,企業(yè)必須對與NoSQL相對接的應(yīng)用程序代碼仔細(xì)檢查。換言之,企業(yè)必須嚴(yán)格挑選負(fù)責(zé)此類項(xiàng)目部署的人選,確保將最好的人才用于這方面事務(wù),Shulman表示。當(dāng)大家以NoSQL為基礎(chǔ)編寫應(yīng)用程序時,必須啟用有經(jīng)驗(yàn)的編程人員,因?yàn)榭蛻舳塑浖堑謸醢踩珕栴}的第一道屏障。切實(shí)為額外緩沖區(qū)的部署留出時間與預(yù)算,這能夠讓員工有閑暇反思自己的工作內(nèi)容并盡量多顧及安全考量多想一點(diǎn)就是進(jìn)步。綜上所述,這可能與部署傳統(tǒng)的關(guān)系類數(shù)據(jù)庫也沒什么不同。 具有諷刺意味的是,近年來數(shù)據(jù)庫應(yīng)用程序在安全性方面的提升基本都跟數(shù)據(jù)庫本身沒什么關(guān)系,nCircle公司安全研究及開發(fā)部門總監(jiān)Oliver Lavery如是說。

十余年專注成都網(wǎng)站制作,成都定制網(wǎng)站,個人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于成都定制網(wǎng)站,高端網(wǎng)頁制作,對陽光房等多個領(lǐng)域,擁有豐富的網(wǎng)站建設(shè)經(jīng)驗(yàn)。
緩存:這應(yīng)該是 Redis 最主要的功能了,也是大型網(wǎng)站必備機(jī)制,合理地使用緩存不僅可以加 快數(shù)據(jù)的訪問速度,而且能夠有效地降低后端數(shù)據(jù)源的壓力。
共享Session:對于一些依賴 session 功能的服務(wù)來說,如果需要從單機(jī)變成集群的話,可以選擇 redis 來統(tǒng)一管理 session。消息隊(duì)列系統(tǒng):消息隊(duì)列系統(tǒng)可以說是一個大型網(wǎng)站的必備基礎(chǔ)組件,因?yàn)槠渚哂袠I(yè)務(wù) 解耦、非實(shí)時業(yè)務(wù)削峰等特性。Redis提供了發(fā)布訂閱功能和阻塞隊(duì)列的功 能,雖然和專業(yè)的消息隊(duì)列比還不夠足夠強(qiáng)大,但是對于一般的消息隊(duì)列功能基本可以滿足。比如在分布式爬蟲系統(tǒng)中,使用 redis 來統(tǒng)一管理 url隊(duì)列。
分布式鎖:在分布式服務(wù)中。可以利用Redis的setnx功能來編寫分布式的鎖,雖然這個可能不是太常用。 當(dāng)然還有諸如排行榜、點(diǎn)贊功能都可以使用 Redis 來實(shí)現(xiàn),但是 Redis 也不是什么都可以做,比如數(shù)據(jù)量特別大時,不適合 Redis,我們知道 Redis 是基于內(nèi)存的,雖然內(nèi)存很便宜,但是如果你每天的數(shù)據(jù)量特別大,比如幾億條的用戶行為日志數(shù)據(jù),用 Redis 來存儲的話,成本相當(dāng)?shù)母摺?/p>
NoSQL,泛指非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在處理web2.0網(wǎng)站,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,出現(xiàn)了很多難以克服的問題,而非關(guān)系型的數(shù)據(jù)庫則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展。
常見的Nosql數(shù)據(jù)庫有:
一、Redis數(shù)據(jù)庫
Redis(RemoteDictionaryServer),即遠(yuǎn)程字典服務(wù),是一個開源的使用ANSIC語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。從2010年3月15日起,Redis的開發(fā)工作由VMware主持。從2013年5月開始,Redis的開發(fā)由Pivotal贊助。
二、MongoDB數(shù)據(jù)庫
MongoDB是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。它支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bson格式,因此可以存儲比較復(fù)雜的數(shù)據(jù)類型。
Mongo最大的特點(diǎn)是它支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫單表查詢的絕大部分功能,而且還支持對數(shù)據(jù)建立索引。
擴(kuò)展資料:
對于NoSQL并沒有一個明確的范圍和定義,但是他們都普遍存在下面一些共同特征:
一、易擴(kuò)展
NoSQL數(shù)據(jù)庫種類繁多,但是一個共同的特點(diǎn)都是去掉關(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。NoSQL的Cache是記錄級的,是一種細(xì)粒度的Cache,所以NoSQL在這個層面上來說性能就要高很多。
三、靈活的數(shù)據(jù)模型
NoSQL無須事先為要存儲的數(shù)據(jù)建立字段,隨時可以存儲自定義的數(shù)據(jù)格式。而在關(guān)系數(shù)據(jù)庫里,增刪字段是一件非常麻煩的事情。如果是非常大數(shù)據(jù)量的表,增加字段簡直就是——個噩夢。這點(diǎn)在大數(shù)據(jù)量的Web2.0時代尤其明顯。
四、高可用
NoSQL在不太影響性能的情況,就可以方便地實(shí)現(xiàn)高可用的架構(gòu)。比如Cassandra、HBase模型,通過復(fù)制模型也能實(shí)現(xiàn)高可用。
參考資料來源:百度百科-NoSQL
對此,前Google工程師,Milo(本地商店搜索引擎)創(chuàng)始人Ted Dziuba最近發(fā)表標(biāo)題驚人的博客“I Can't Wait for NoSQL to Die”,對NoSQL的適用范圍進(jìn)行了分析。他認(rèn)為, NoSQL也會帶來一連串的新問題,并不會成為主流,無法取代關(guān)系型數(shù)據(jù)庫。 他的理由是:Cassandra等NoSQL數(shù)據(jù)庫在使用上并不方便,比如,修改column family定義時就需要重啟。而且NoSQL更適合Google那樣的規(guī)模,而一般的互聯(lián)網(wǎng)公司都不是Google,早早地去考慮Google那樣的規(guī)模的可擴(kuò)展性,純粹是浪費(fèi)時間,存在巨大的商業(yè)風(fēng)險。 他還透露,即使在Google,AdWords這樣的關(guān)鍵產(chǎn)品也是基于MySQL實(shí)現(xiàn)的。 他在文中最后表示,NoSQL當(dāng)然死不了,但是 它最終會被邊緣化,就像Rails被NoSQL邊緣化一樣 Dziuba的文章因?yàn)檠赞o激烈,在社區(qū)里引起了強(qiáng)烈反應(yīng)。 SQL數(shù)據(jù)庫陣營贊同者大有人在。craigslist工程師、著名的MySQL專家Jeremy Zawodny表示,在讀此文的時候,不時會心一笑。他說, NoSQL運(yùn)動只是軟件不斷進(jìn)化進(jìn)程中的正常現(xiàn)象 。關(guān)系型數(shù)據(jù)庫也會繼續(xù)發(fā)展,MySQL社區(qū)不斷推出的XtraDB或InnoDB插件, PBXT, Drizzle都是證據(jù)。各種技術(shù)競爭的結(jié)果是,我們獲得了更多解決問題的選擇。 drizzle項(xiàng)目開發(fā)者Eric Day也表示,NoSQL有很多值得學(xué)習(xí)的,但是目前大部分實(shí)際項(xiàng)目的最佳選擇還是關(guān)系型數(shù)據(jù)庫。 NoSQL陣營當(dāng)然不會坐視不理,Cassandra項(xiàng)目組的Eric Evans表示,Dziuba提到Cassandra修改column family定義的問題其實(shí)很容易解決。而且,NoSQL并不是要取代MySQL,事實(shí)上Twitter仍然在用MySQL。如果關(guān)系型數(shù)據(jù)庫能夠承擔(dān)負(fù)荷,那就用好了;如果不行,請考慮NoSQL。 而德國知名博客Code Monkeyism則嘲笑Dziuba看起來并沒有用MySQL做過真實(shí)項(xiàng)目,因?yàn)镸ySQL如果沒有memcache,基本上無法應(yīng)付網(wǎng)站項(xiàng)目。他認(rèn)為,NoSQL將使SQL數(shù)據(jù)庫邊緣化,而且一個重要理由恰恰是可以節(jié)省DBA的開銷。 digg的前任首席架構(gòu)師現(xiàn)在也在創(chuàng)業(yè)的Joe Stump說,自己現(xiàn)在的創(chuàng)業(yè)項(xiàng)目就是用NoSQL,而且列舉了一系列問題挑戰(zhàn)SQL陣營。
Redis是當(dāng)前比較熱門的NOSQL系統(tǒng)之一,它是一個開源的使用ANSI c語言編寫的key-value存儲系統(tǒng)(區(qū)別于MySQL的二維表格的形式存儲。),Redis數(shù)據(jù)都是緩存在計(jì)算機(jī)內(nèi)存中并且它會周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,實(shí)現(xiàn)數(shù)據(jù)的持久化。談到存儲數(shù)據(jù),那么必然要涉及到相關(guān)的數(shù)據(jù)類型,redis主要有以下數(shù)據(jù)類型:
描述:string 是 redis 最基本的類型,你可以理解成與 Memcached 一模一樣的類型,一個 key 對應(yīng)一個 value。value其實(shí)不僅是String,也可以是數(shù)字。string 類型是二進(jìn)制安全的。意思是 redis 的 string 可以包含任何數(shù)據(jù)。比如jpg圖片或者序列化的對象。string 類型是 Redis 最基本的數(shù)據(jù)類型,string 類型的值最大能存儲 512MB。
常用命令:get、set、incr、decr、mget等。
應(yīng)用場景:規(guī)key-value緩存應(yīng)用。常規(guī)計(jì)數(shù): 點(diǎn)贊數(shù), 粉絲數(shù)。
描述: hash 是一個鍵值(key = value)對集合。Redis hash 是一個 string 類型的 field 和 value 的映射表,hash 特別適合用于存儲對象。
常用命令:hget,hset,hgetall 等。
應(yīng)用場景:存儲部分變更數(shù)據(jù),如商品信息等。
描述:list 列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。列表最多可存儲 232 - 1 元素 (4294967295, 每個列表可存儲40多億)。
常用命令:lpush(添加左邊元素),rpush,lpop(移除左邊第一個元素),rpop,lrange(獲取列表片段,LRANGE key start stop)等。
應(yīng)用場景:消息隊(duì)列,關(guān)注列表,粉絲列表等都可以用Redis的list結(jié)構(gòu)來實(shí)現(xiàn)。
描述: set是string類型的無序集合。集合是通過hashtable實(shí)現(xiàn)的,概念和數(shù)學(xué)中個的集合基本類似,可以交集,并集,差集等等,set中的元素是沒有順序的。所以添加,刪除,查找的復(fù)雜度都是O(1)。
常用命令:sadd,spop,smembers,sunion 等。
應(yīng)用場景:交集,并集,差集(微博中,可以將一個用戶所有的關(guān)注人存在一個集合中,將其所有粉絲存在一個集合。Redis還為集合提供了求交集、并集、差集等操作,可以非常方便的實(shí)現(xiàn)如共同關(guān)注、共同喜好、二度好友等功能,對上面的所有集合操作,你還可以使用不同的命令選擇將結(jié)果返回給客戶端還是存集到一個新的集合中)
描述:zset 和 set 一樣也是string類型元素的集合,且不允許重復(fù)的成員。不同是可以打分(排序)
常用命令:zadd,zrange,zrem,zcard等
應(yīng)用場景:排行榜,帶權(quán)重的消息隊(duì)列
描述:Bitmaps這個“數(shù)據(jù)結(jié)構(gòu)”可以實(shí)現(xiàn)對位的操作。 把數(shù)據(jù)結(jié)構(gòu)加上引號主要因?yàn)椋?/p>
Bitmaps本身不是一種數(shù)據(jù)結(jié)構(gòu), 實(shí)際上它就是字符串 , 但是它可以對字符串的位進(jìn)行操作。
Bitmaps單獨(dú)提供了一套命令, 所以在Redis中使用Bitmaps和使用字符串的方法不太相同。 可以把Bitmaps想象成一個以位為單位的數(shù)組, 數(shù)組的每個單元只能存儲0和1, 數(shù)組的下標(biāo)在Bitmaps中叫做偏移量。其實(shí)大多數(shù)Bitmaps的應(yīng)用場景可以用其他數(shù)據(jù)類型來實(shí)現(xiàn),用Bitmaps主要是存儲空間占用特別少
常用命令:getbit key offset;setbit key offset value
應(yīng)用場景:統(tǒng)計(jì)用戶訪問,統(tǒng)計(jì)電影某天的的播放量
描述:Redis 在 2.8.9 版本添加了 HyperLogLog 結(jié)構(gòu)。Redis HyperLogLog 是用來做基數(shù)統(tǒng)計(jì)的算法,HyperLogLog 的優(yōu)點(diǎn)是,在輸入元素的數(shù)量或者體積非常非常大時,計(jì)算基數(shù)所需的空間總是固定 的、并且是很小的。在 Redis 里面,每個 HyperLogLog 鍵只需要花費(fèi) 12 KB 內(nèi)存,就可以計(jì)算接近 2^64 個不同元素的基 數(shù)。這和計(jì)算基數(shù)時,元素越多耗費(fèi)內(nèi)存就越多的集合形成鮮明對比。但是,因?yàn)?HyperLogLog 只會根據(jù)輸入元素來計(jì)算基數(shù),而不會儲存輸入元素本身,所以 HyperLogLog 不能像集合那樣,返回輸入的各個元素。這類數(shù)據(jù)結(jié)構(gòu)的基本大的思路就是使用統(tǒng)計(jì)概率上的算法,犧牲數(shù)據(jù)的精準(zhǔn)性來節(jié)省內(nèi)存的占用空間及提升相關(guān)操作的性能
常用命令:pfadd, pfcount,pfmerge
應(yīng)用場景:統(tǒng)計(jì)網(wǎng)站的每日UV
描述:GEO功能在Redis3.2版本提供,支持存儲地理位置信息用來實(shí)現(xiàn)諸如附近位置、搖一搖這類依賴于地理位置信息的功能.geo的數(shù)據(jù)類型為zset.
常用命令:geoadd,geopos, geodist
應(yīng)用場景:附近位置、搖一搖
參考列表:
Redis五種數(shù)據(jù)類型及應(yīng)用場景
對于第一個問題,設(shè)計(jì)一個schema-(messageID,likedCount),記錄每條微博的點(diǎn)贊數(shù)。messageID是微博的編號,likedCount是該微博的點(diǎn)贊人數(shù)。但是這里有兩個問題需要解決,第一是并發(fā),第二是數(shù)據(jù)量。
每條微博都有可能有很多人同時點(diǎn)贊,為了保證點(diǎn)贊人數(shù)精確就需要保證likedCount++是原子操作,這個可以由應(yīng)用程序來實(shí)現(xiàn),也可以用redis的事務(wù)來實(shí)現(xiàn)(如果redis有事務(wù)機(jī)制或者自增功能的話),但是我覺得為了性能考慮,也可以不用實(shí)現(xiàn)原子操作,具體原因就不展開了。
每天都上億可能更多的微博內(nèi)容產(chǎn)生,這樣就會有上億個新的(messageID,likedCount)生成,這樣的數(shù)據(jù)量是比較大的,單機(jī)數(shù)據(jù)庫比較難提供高效的服務(wù),所以需要采取sharding的功能(有時候也叫分表分庫),可能根據(jù)messageID把這些schema分散到十個或者更多的shards上(據(jù)說,sina微博有600個節(jié)點(diǎn),如何三個節(jié)點(diǎn)組成一個shard,就有200個shards),這樣每個shard處理的請求就只有原來的十分之一,從而就能提高服務(wù)的性能。
關(guān)于點(diǎn)贊人列表的設(shè)計(jì),一般來說,可能想到的schema是(messageID,userID),但是這樣的設(shè)計(jì)有一個小問題,就是有些大發(fā)的微博可能會得到幾十萬的點(diǎn)贊,這樣就會產(chǎn)生幾十萬個條數(shù)據(jù),這樣數(shù)據(jù)有點(diǎn)多,讀取起來可能也慢。所以可以用這樣一個schema(messageID,partID,userIDs),讓一個messageID對于多個userID,同時比對應(yīng)太多的userID,所以加入一個新的partID,一個part存1000個userID,這樣幾十萬個點(diǎn)贊,只需要存幾百條數(shù)據(jù)。這樣做還有一個好處,用戶點(diǎn)擊查看點(diǎn)贊人時的,一般都不是完全顯示所有點(diǎn)贊人,而是一批一批顯示,這樣可以一次只讀一條數(shù)據(jù),就可顯示一批點(diǎn)贊用戶信息。
當(dāng)前題目:點(diǎn)贊nosql,點(diǎn)贊達(dá)人秀
當(dāng)前鏈接:http://chinadenli.net/article18/dsgoigp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站策劃、商城網(wǎng)站、網(wǎng)站內(nèi)鏈、營銷型網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)