欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

好友關(guān)系nosql,好友關(guān)系圖

什么是非關(guān)系數(shù)據(jù)庫?非關(guān)系數(shù)據(jù)庫如何關(guān)聯(lián)呀?

這個與物理學無關(guān),是數(shù)據(jù)庫的一種類型。

創(chuàng)新互聯(lián)建站是少有的網(wǎng)站制作、網(wǎng)站建設(shè)、營銷型企業(yè)網(wǎng)站、成都微信小程序、手機APP,開發(fā)、制作、設(shè)計、賣鏈接、推廣優(yōu)化一站式服務(wù)網(wǎng)絡(luò)公司,從2013年成立,堅持透明化,價格低,無套路經(jīng)營理念。讓網(wǎng)頁驚喜每一位訪客多年來深受用戶好評

關(guān)系數(shù)據(jù)庫 - relational database,是一種通過建立索引來儲存數(shù)據(jù)類型和他們之間的關(guān)聯(lián)的技術(shù)。隨著互聯(lián)網(wǎng)的發(fā)展,有很多數(shù)據(jù)訪問類型不再需要這種大型的關(guān)聯(lián)邏輯,而是需要儲存和讀取大量的數(shù)據(jù)。比如Facebook,人人之類的網(wǎng)站,他們的數(shù)據(jù)類型如果用關(guān)系數(shù)據(jù)庫來表示,則又慢又占地方。

所以最近幾年興起的非關(guān)系數(shù)據(jù)庫(NOSQL - No Only SQL),包括鍵值查詢表數(shù)據(jù)庫,圖數(shù)據(jù)庫等,就是針對這種不需要關(guān)聯(lián),不需要多個表JOIN,但是需要儲存和讀些大量數(shù)據(jù)的情況而設(shè)計的。比如Graph Database,圖數(shù)據(jù)庫,儲存的是一個Graph上的Node和Edge。這樣比如查詢你和我之間有多少個共同好友,或者像Linked-In那種查詢兩個用戶之間隔著幾個人的查詢,只需要做一個Graph Walk就可以。

非關(guān)系數(shù)據(jù)庫的并沒有關(guān)聯(lián)的概念,它的前提條件就是數(shù)據(jù)不需要關(guān)聯(lián)。當然,你可以通過Id和索引來讀取多個表中的數(shù)據(jù),然后手動將他們關(guān)聯(lián)在一起。總的來說,非關(guān)系數(shù)據(jù)庫沒有為這個情況做任何優(yōu)化,也不適用于需要大量關(guān)聯(lián)的數(shù)據(jù)。

Redis詳解——概述/下載安裝

互聯(lián)網(wǎng)需求的3高: 高并發(fā),高可擴,高性能。

Redis 是一種運行速度很快,并發(fā)性能很強,并且運行在內(nèi)存上的NoSql(not only sql)數(shù)據(jù)庫

NoSQL數(shù)據(jù)庫 和 傳統(tǒng)數(shù)據(jù)庫 相比的優(yōu)勢:

NoSQL數(shù)據(jù)庫無需事先為要存儲的數(shù)據(jù)建立字段,隨時可以存儲自定義的數(shù)據(jù)格式。

而在關(guān)系數(shù)據(jù)庫里,增刪字段是一件非常麻煩的事情。如果是非常大數(shù)據(jù)量的表,增加字段 簡直就是一個噩夢。

Redis的常用使用場景:

緩存 ,毫無疑問這是Redis當今最為人熟知的使用場景。在提升服務(wù)器性能方面非常有效;一 些頻繁被訪問的數(shù)據(jù),經(jīng)常被訪問的數(shù)據(jù)如果放在關(guān)系型數(shù)據(jù)庫,每次查詢的開銷都會很 大,而放在redis中,因為redis 是放在內(nèi)存中的可以很高效的訪問

排行榜 ,在使用傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(mysql oracle 等)來做這個事兒,非常的麻煩,而利 用Redis的SortSet(有序集合)數(shù)據(jù)結(jié)構(gòu)能夠簡單的搞定;

好友關(guān)系 ,利用集合的一些命令,比如求交集、并集、差集等。可以方便搞定一些共同好 友、共同愛好之類的功能;

Session共享 ,以jsp為例,默認Session是保存在服務(wù)器的文件中,如果是集群服務(wù),同一個 用戶過來可能落在不同機器上,這就會導致用戶頻繁登陸;采用Redis保存Session后,無論 用戶落在那臺機器上都能夠獲取到對應(yīng)的Session信息。

下載: redis: 圖形工具:

安裝(Linux)

上傳tar.gz包,并解壓:tar -zxvf redis-5.0.4.tar.gz

安裝gcc:yum -y install gcc (忘記是否安裝過,可以使用 gcc -v 命令查看gcc版本,如果沒有安裝過,會提示命令不存在)

進入redis目錄,進行編譯:make

編譯之后,開始安裝:make install

后臺運行方式—— redis默認不會使用后臺運行,如果你需要,修改配置文件daemonize=yes,當你后臺服務(wù)啟動的 時候,會寫成一個進程文件運行

vim /opt/redis-5.0.4/redis.conf

以配置文件的方式啟動:

cd /usr/local/bin

redis-server /opt/redis-5.0.4/redis.conf

關(guān)閉數(shù)據(jù)庫:

單實例關(guān)閉 ——redis-cli shutdown

多實例關(guān)閉 ——dis-cli -p 6379 shutdown 默認的端口6379,如改過,更換端口

用戶的好友關(guān)系,在數(shù)據(jù)庫里怎么存儲

1、使用冗余,每個人的好友信息都在數(shù)據(jù)庫中有存儲,就是你說的記錄一對一關(guān)系

2、數(shù)據(jù)緩存到內(nèi)存,數(shù)據(jù)訪問很快

3、狀態(tài)信息修改異步,比如一個人登陸了,他的好友不是馬上就知道,中間間隔幾秒也沒有關(guān)系

4、數(shù)據(jù)可能不放在關(guān)系數(shù)據(jù)庫中,可能使用nosql數(shù)據(jù)庫,比如mongodb,bigtable,cassandra等

5、facebook,twitter就是用類似的思想

如何用消息系統(tǒng)避免分布式事務(wù)

這兩年來,隨著NoSQL系統(tǒng)、CAP理論和Eventual Consistency的大熱,關(guān)于分布式操作要保證強一致還是弱一致性的討論絡(luò)驛不絕。雙方各執(zhí)一詞,傾向?qū)崿F(xiàn)強一致性的一方認為弱一致性滿足不了應(yīng)用開發(fā)的需要,傾向?qū)崿F(xiàn)弱一致性的一方則認為保證強一致性將導致系統(tǒng)性能與可伸縮性難以接受。弱一致性能否滿足應(yīng)用開發(fā)的需求這一點由應(yīng)用特征決定,難以一概而論,但強一致性對系統(tǒng)性能、可伸縮性和可用性的影響則是可以作技術(shù)分析的。奇怪的是,找了很久,也沒找到對這一問題的深入分析,決定自己來做一個。

對于分布式操作,一般來說有以下兩種實現(xiàn)選擇:

1、 在每個節(jié)點上使用單獨的事務(wù),只實現(xiàn)弱一致性。

2、 使用2PC保證強一致性。即分布式事務(wù)協(xié)調(diào)者先要求所有參與節(jié)點PREPARE,大家都說PREPARE成功后,再要求所有節(jié)點COMMIT。只要有一個節(jié)點PREPARE不成功,大家都要回滾。這樣參與者要強制寫兩次日志,協(xié)調(diào)者在決定要COMMIT時也要強制寫一次日志。

首先,假設(shè)用戶發(fā)起分布式操作的速率為TpS(Transactions per Second),每個分布式操作平均會操作K個節(jié)點。在每個節(jié)點上,平均要操作RpT(Rows per Transaction)條記錄,而操作每條記錄平均要用時TpR(Time per Row),這樣在每個節(jié)點上事務(wù)操作的執(zhí)行時間為:

TExec=RpT×TpR

另外,設(shè)定以下參數(shù):

- N:數(shù)據(jù)庫中所有節(jié)點上的總記錄數(shù)

- TCommit:在每個節(jié)點上PREPARE或COMMIT的時間,PREPARE和COMMIT的主要工作都是寫相應(yīng)的日志,執(zhí)行時間接近

對分布式操作性能方面一種常見的認識是若使用2PC,將導致事務(wù)執(zhí)行時間大為延長,從而導致過高的事務(wù)并發(fā)沖突和死鎖。當然,從趨勢上使用2PC自然會導致并發(fā)沖突和死鎖增長,但是否能滿足應(yīng)用需求,需要定量的來分析。由于死鎖的概率完全取決于沖突概率,以下只分析沖突概率。

對選擇1,即每個節(jié)點用獨立事務(wù)時,用戶發(fā)起的每個事務(wù)都會被分成K個小事務(wù),這時系統(tǒng)中的并發(fā)事務(wù)數(shù)是事務(wù)速率與事務(wù)持續(xù)時間之積,即:

CT_1=TpS×K×(RpT×TpR+TCommit)

當某事務(wù)要鎖定并操作某條記錄時,系統(tǒng)中被其它事務(wù)所鎖定的記錄數(shù)是(CT_1-1)×RpT≈CT_1×RpT。假設(shè)事務(wù)操作的記錄是純隨機的,則該事務(wù)要鎖定的記錄與其它事務(wù)沖突的概率是(CT_1×RpT)/N。而這個事務(wù)總共要鎖定RpT條記錄,則該事務(wù)與其它事務(wù)沖突的概率是:

TWait_1=1-(1-(CT_1×RpT)/N )^RpT≈CT_1×RpT^2/N

對選擇2,即使用2PC保證強一致性時,每個節(jié)點上需要強制寫兩次日志,在事務(wù)協(xié)調(diào)者上還要強制寫一次PREPARE日志(事務(wù)協(xié)調(diào)者上的COMMIT日志不需要強制寫,這一時間可以忽略)。系統(tǒng)中的并發(fā)事務(wù)數(shù)是:

CT_2=TpS×((RpT×TpR+2×TCommit)×K+TCommit)

但此時系統(tǒng)中被其它事務(wù)所鎖定的記錄數(shù)是選擇1的K倍,且事務(wù)要鎖定的記錄數(shù)也是選擇1的K倍,這時事務(wù)的沖突概率是:

TWait_2≈CT_2×RpT^2×K^2/N

這個公式比較復雜,我們先簡化一下,假設(shè)TCommit和TPrepare時間相對于TExec來說可以忽略,則可以得到有:

TWait_2=TWait_1×K^2

也就是說事務(wù)沖突的概率將會隨著分布式操作涉及的節(jié)點數(shù)K的平方數(shù)增長。平方數(shù)增長聽起來比較厲害,但實際上在真實應(yīng)用中K通常是很小的,絕大多數(shù)情況下等于2。如經(jīng)典的轉(zhuǎn)賬問題,就只涉及兩個節(jié)點,還有比如建立好友關(guān)系時也只涉及兩個節(jié)點。在使用我們分布式數(shù)據(jù)庫的大量應(yīng)用中(總共包含約500張表,上千個索引,幾千種SQL模式),絕大多數(shù)情況下K為2,很少有3,超過3的更是絕無僅有。因此,如果我們忽略2PC PREPARE和提交的時間,則使用2PC時會導致事務(wù)沖突概率4~9倍的增長。

換一種情況,如果執(zhí)行很快但提交寫日志很慢,即TExec相對于TCommit來說可以忽略,則可以得到:

TWait_2=TWait_1×(2×K+1)/K×K^2

這時的情況比只考慮執(zhí)行時間時差一些,但還是隨著分布式操作涉及的節(jié)點數(shù)K的平方數(shù)增長,只不過從4~9倍變成10~21倍。

真實的情況一般在這兩者之間,作為估算,可以大致認為采用2PC保證強一致性時將導致事務(wù)沖突概率增加8倍左右。

性能方面還涉及到吞吐率和響應(yīng)時間。類似的進行分析,可以發(fā)現(xiàn)如果TCommit相對于TExec可以忽略,則響應(yīng)時間不受2PC影響,反之,則2PC會導致響應(yīng)時間增加為原來的3倍,平均的估計可以取增加1倍。對大多數(shù)應(yīng)用,日志提交的吞吐率完全足夠,則事務(wù)吞吐率不受2PC影響,反之,事務(wù)吞吐率會下降一半。

對大多數(shù)WEB應(yīng)用沖突概率非常低,分布式操作只涉及2~3個節(jié)點,日志提交的吞吐率完全足夠,則使用2PC可能帶來的影響是事務(wù)沖突與死鎖增加8倍左右,響應(yīng)時間延長1倍,吞吐率不受影響。這些性能影響應(yīng)該說是完全可以接受的,此時2PC帶來的強一致性優(yōu)點可以說遠遠超過其對性能的影響。

當然,以上分析中忽略了很多因素,比如網(wǎng)絡(luò)延時,比如客戶端在發(fā)起事務(wù)的多個操作之間還可能休息一會。加入這些因素后的性能分析會更復雜,但這些因素,本質(zhì)上是使事務(wù)的持續(xù)時間增加,跟是否使用2PC無關(guān)。使用2PC與不使用2PC之間的性能差異比例,與這些因素關(guān)系不大。

但有一個問題需要注意。如果讓客戶端直接充當分布式事務(wù)的協(xié)調(diào)者,由于客戶端上通常不像數(shù)據(jù)庫服務(wù)器那樣配置帶電池的寫緩存,fsync的性能很差,2PC將導致簡單分布式事務(wù)的響應(yīng)時間增加一個數(shù)量級,沖突概率更是可能增加兩個數(shù)量級,事務(wù)提交的吞吐率也可能受到影響。解決方法是部署專職的高性能分布式事務(wù)協(xié)調(diào)者集群,配置高性能的日志存儲設(shè)備如SSD。

基于這一基本的性能分析,還有一些變種:

1、如果分布式操作在各節(jié)點上并行執(zhí)行,可以計算出沖突概率將是不并行的1/K。這仍比不用2PC串行高K倍,但不再是K的平方倍。比如BigTable中對二級索引和主記錄的修改,就可以并行。

2、如果分布式操作是否沖突只取決于其中一個節(jié)點,可以計算出2PC并不會導致沖突概率顯著增加。符合這一特征的應(yīng)用模式還是BigTable中對主記錄及其所有二級索引的修改,沖不沖突,完全取決于是否更新同一條記錄,跟索引無關(guān)。

根據(jù)這兩點也可以看出,如果用并行的2PC來保證主記錄及其二級索引之間的一致性,其所帶來的性能影響弱于2PC對一般分布式事務(wù)的影響,是完全可以實用的方案。

對使用2PC分布式事務(wù)的另外一個比較大的擔心是如果2PC在PREPARE之后事務(wù)協(xié)調(diào)者崩潰,則參與分布式事務(wù)的各個節(jié)點只能長時間的鎖定資源,等待協(xié)調(diào)者復活后告訴它事務(wù)應(yīng)該提交還是回滾。如果直接讓客戶端直接充當分布式事務(wù)的協(xié)調(diào)者,這一問題可能很嚴重,因為客戶端多而雜,崩潰概率高。但如果部署了專職的高性能分布式事務(wù)協(xié)調(diào)者集群,則這一問題基本可以避免。

文章名稱:好友關(guān)系nosql,好友關(guān)系圖
URL分享:http://chinadenli.net/article1/dsgccid.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計電子商務(wù)網(wǎng)站設(shè)計公司品牌網(wǎng)站制作網(wǎng)站建設(shè)微信公眾號

廣告

聲明:本網(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)

外貿(mào)網(wǎng)站制作