社會性網(wǎng)絡(luò)服務(wù)后臺數(shù)據(jù)的存儲方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種社會性網(wǎng)絡(luò)服務(wù)后臺數(shù)據(jù)的存儲方法和系統(tǒng)。該方法包括:當(dāng)用戶發(fā)布動態(tài)消息時,將該動態(tài)消息的實體內(nèi)容保存到實體內(nèi)容數(shù)據(jù)庫中,并保存到實體內(nèi)容緩存中一份,將該動態(tài)消息的索引保存到索引數(shù)據(jù)庫中的三類索引表中,并保存到索引緩存中一份。本發(fā)明的技術(shù)方案緩解了海量的社會性網(wǎng)絡(luò)服務(wù)后臺數(shù)據(jù)的賭賽和延時問題。
【專利說明】社會性網(wǎng)絡(luò)服務(wù)后臺數(shù)據(jù)的存儲方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)【技術(shù)領(lǐng)域】,特別涉及社會性網(wǎng)絡(luò)服務(wù)后臺數(shù)據(jù)的存儲方法和系統(tǒng)。
【背景技術(shù)】
[0002]社會性網(wǎng)絡(luò)服務(wù)(SNS, Social Networking Services)專指旨在幫助人們建立社會性網(wǎng)絡(luò)的互聯(lián)網(wǎng)應(yīng)用服務(wù)。如當(dāng)下流行的多種社交網(wǎng)站,以及其他門戶網(wǎng)站提供的人與人之間的關(guān)系網(wǎng)絡(luò)服務(wù),如微博、即時通信系統(tǒng)提供的好友關(guān)系服務(wù)等。
[0003]為了提供這種人際關(guān)系服務(wù),需要在后臺保存SNS用戶所發(fā)布的動態(tài)消息(一般稱為feed),以供用戶自己或其好友相互查詢動態(tài)消息。
[0004]由于SNS得到了廣大用戶的喜愛,其后臺數(shù)據(jù)也呈數(shù)量級暴增,容易出現(xiàn)數(shù)據(jù)堵塞和訪問延時等現(xiàn)象,這對SNS后臺數(shù)據(jù)的存儲提出了挑戰(zhàn)。
[0005]現(xiàn)有的一種SNS后臺數(shù)據(jù)存儲方式如下:分為feed實體存儲和newsfeed存儲,feed表中所存內(nèi)容與newsfeed表中的feedid為對應(yīng)關(guān)系。newsfeed表為一個db(database)索引,里面存有當(dāng)前feed的id和發(fā)feed用戶的好友id,如有η個好友的話,就會有η條記錄,好友id與useid是對應(yīng)關(guān)系。這個方案雖然只有兩個表,使用簡單方便,但是存在如下缺陷:在取好友feed時,要先去查詢相關(guān)用戶好友信息,這樣就會導(dǎo)致多做一步查詢,如果數(shù)據(jù)量大,會有數(shù)據(jù)堵塞和延時等現(xiàn)象,會產(chǎn)生相應(yīng)的數(shù)據(jù)庫瓶頸。
【發(fā)明內(nèi)容】
[0006]有鑒于此,本發(fā)明提供了一種社會性網(wǎng)絡(luò)服務(wù)后臺數(shù)據(jù)的存儲方法和系統(tǒng),以緩解海量的社會性網(wǎng)絡(luò)服務(wù)后臺數(shù)據(jù)的賭賽和延時問題。
[0007]為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實現(xiàn)的:
[0008]本發(fā)明公開了一種社會性網(wǎng)絡(luò)服務(wù)后臺數(shù)據(jù)的存儲方法,該方法包括:
[0009]當(dāng)用戶發(fā)布動態(tài)消息時,將該動態(tài)消息的實體內(nèi)容保存到實體內(nèi)容數(shù)據(jù)庫中,并保存到實體內(nèi)容緩存中一份,將該動態(tài)消息的索引保存到索引數(shù)據(jù)庫中的三類索引表中,并保存到索引緩存中一份;
[0010]其中,將該動態(tài)消息的索引保存到索引數(shù)據(jù)庫中的三類索引表中包括:
[0011]將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到動態(tài)消息索引表中;
[0012]和,將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到時間軸索引表中;
[0013]和,對于發(fā)布動態(tài)消息的用戶的每個好友,將該動態(tài)消息的索引與該好友的用戶標(biāo)識一起保存到分發(fā)索引表中。
[0014]在上述方法中,所述索引數(shù)據(jù)庫由多個子庫組成,各子庫對應(yīng)的用戶標(biāo)識取值范圍不同,且每個子庫都包括動態(tài)消息索引表、時間軸索引表中和分發(fā)索引表;[0015]所述將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到動態(tài)消息索引表中包括:根據(jù)發(fā)布動態(tài)消息的用戶的標(biāo)識找到對應(yīng)的子庫,將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的動態(tài)消息索引表中;
[0016]所述將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到時間軸索引表中包括:根據(jù)發(fā)布動態(tài)消息的用戶的標(biāo)識找到對應(yīng)的子庫,將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的時間軸索引表中;
[0017]所述將該動態(tài)消息的索引與該好友的用戶標(biāo)識一起保存到分發(fā)索引表中包括:根據(jù)該好友的用戶標(biāo)識找到對應(yīng)的子庫,將該動態(tài)消息的索引與該好友的用戶標(biāo)識一起保存到所找到子庫的分發(fā)索引表中。
[0018]在上述方法中,每個子庫中包括對應(yīng)于不同的日期范圍的多個動態(tài)消息索引表/時間軸索引表/分發(fā)索引表;
[0019]所述將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的動態(tài)消息索引表中為:保存到所找到子庫的與當(dāng)前日期對應(yīng)的動態(tài)消息索引表中;
[0020]所述將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的時間軸索引表中為:保存到所找到子庫的與當(dāng)前日期對應(yīng)的時間軸索引表中;
[0021]所述將該動態(tài)消息的索引與該好友的用戶標(biāo)識一起保存到所找到子庫的分發(fā)索引表中為:保存到所找到子庫的與當(dāng)前日期對應(yīng)的分發(fā)索引表中。
[0022]在上述方法中,所述實體內(nèi)容數(shù)據(jù)庫包括:本站內(nèi)容數(shù)據(jù)庫和外站內(nèi)容數(shù)據(jù)庫;
[0023]所述將該動態(tài)消息的實體內(nèi)容保存到實體內(nèi)容數(shù)據(jù)庫中包括:如果該動態(tài)消息為在本社會性網(wǎng)絡(luò)服務(wù)中發(fā)布的消息,則將其實體內(nèi)容保存到本站內(nèi)容數(shù)據(jù)庫中,如果該動態(tài)消息為其他社會性網(wǎng)絡(luò)服務(wù)中發(fā)布的消息,則將其實體內(nèi)容保存到外站內(nèi)容數(shù)據(jù)庫中。
[0024]在上述方法中,如果該動態(tài)消息為其他社會性網(wǎng)絡(luò)服務(wù)中發(fā)布的消息,則將其實體內(nèi)容保存到外站內(nèi)容數(shù)據(jù)庫中包括:按照時間將該動態(tài)消息的實體內(nèi)容保存到外站內(nèi)容數(shù)據(jù)庫中的不同表中;
[0025]該方法進(jìn)一步包括:對于外站內(nèi)容數(shù)據(jù)庫中的超過預(yù)設(shè)時間沒有被后續(xù)處理過的動態(tài)消息實體內(nèi)容進(jìn)行刪除,而對于在預(yù)設(shè)時間內(nèi)被后續(xù)處理過的動態(tài)消息實體內(nèi)容,將其轉(zhuǎn)移到本站內(nèi)容數(shù)據(jù)庫中的指定表中;
[0026]該方法進(jìn)一步包括:將本站內(nèi)容數(shù)據(jù)庫中的數(shù)據(jù)定期備份到一個歸檔庫中。
[0027]該方法進(jìn)一步包括:
[0028]為索引數(shù)據(jù)庫設(shè)置延時隊列,索引數(shù)據(jù)先放入延時列隊中;
[0029]掃描延時隊列,如果延時隊列中有數(shù)據(jù),從延時隊里中取數(shù)據(jù)放入索引數(shù)據(jù)庫中。
[0030]本發(fā)明還公開了一種社會性網(wǎng)絡(luò)服務(wù)后臺數(shù)據(jù)的存儲系統(tǒng),該系統(tǒng)包括:實體內(nèi)容數(shù)據(jù)庫、實體內(nèi)容緩存、索引數(shù)據(jù)庫、索引緩存和主控制器,其中,
[0031 ] 主控制器,用于在用戶發(fā)布動態(tài)消息時,將該動態(tài)消息的實體內(nèi)容保存到實體內(nèi)容數(shù)據(jù)庫中,并保存到實體內(nèi)容緩存中一份,將該動態(tài)消息的索引保存到索引數(shù)據(jù)庫中的三類索引表中,并保存到索引緩存中一份;
[0032]其中,索引數(shù)據(jù)庫中的三類索引表分別為:動態(tài)消息索引表中、時間軸索引表和分發(fā)索引表;
[0033]所述主控制器,具體用于將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到動態(tài)消息索引表中;和,用于將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到時間軸索引表中;和,對于發(fā)布動態(tài)消息的用戶的每個好友,用于將該動態(tài)消息的索引與該好友的用戶標(biāo)識一起保存到分發(fā)索引表中。
[0034]在上述系統(tǒng)中,所述索引數(shù)據(jù)庫中包括多個子庫,各子庫對應(yīng)的用戶標(biāo)識取值范圍不同,且每個子庫都包括動態(tài)消息索引表、時間軸索引表中和分發(fā)索引表;
[0035]所述主控制器,具體用于根據(jù)發(fā)布動態(tài)消息的用戶的標(biāo)識找到索引數(shù)據(jù)庫中的對應(yīng)的子庫,將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的動態(tài)消息索引表中;和,用于根據(jù)發(fā)布動態(tài)消息的用戶的標(biāo)識找到索引數(shù)據(jù)庫中的對應(yīng)的子庫,將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的時間軸索引表中;和,對于發(fā)布動態(tài)消息的用戶的每個好友,用于根據(jù)該好友的用戶標(biāo)識找到索引數(shù)據(jù)庫中的對應(yīng)的子庫,將該動態(tài)消息的索引與該好友的用戶標(biāo)識一起保存到所找到子庫的分發(fā)索引表中。
[0036]在上述系統(tǒng)中,所述實體內(nèi)容數(shù)據(jù)庫包括:本站內(nèi)容數(shù)據(jù)庫和外站內(nèi)容數(shù)據(jù)庫;
[0037]則所述主控制器,還用于在該動態(tài)消息為在本社會性網(wǎng)絡(luò)服務(wù)中發(fā)布的消息時,將其實體內(nèi)容保存到本站內(nèi)容數(shù)據(jù)庫中,在該動態(tài)消息為其他社會性網(wǎng)絡(luò)服務(wù)中發(fā)布的消息時,將其實體內(nèi)容保存到外站內(nèi)容數(shù)據(jù)庫中。
[0038]在上述系統(tǒng)中,所述主控制器,還用于按照時間將該動態(tài)消息的實體內(nèi)容保存到外站內(nèi)容數(shù)據(jù)庫中的不同表中;和進(jìn)一步用于將外站內(nèi)容數(shù)據(jù)庫中的超過預(yù)設(shè)時間沒有被后續(xù)處理過的動態(tài)消息實體內(nèi)容刪除,而對于在預(yù)設(shè)時間內(nèi)被后續(xù)處理過的動態(tài)消息實體內(nèi)容,將其轉(zhuǎn)移到本站內(nèi)容數(shù)據(jù)庫中的指定表中;和,進(jìn)一步用于將本站內(nèi)容數(shù)據(jù)庫中的數(shù)據(jù)定期備份到一個歸檔庫中。
[0039]由上述可見,本發(fā)明這種當(dāng)用戶發(fā)布動態(tài)消息時,將該動態(tài)消息的實體內(nèi)容保存到實體內(nèi)容數(shù)據(jù)庫中,并保存到實體內(nèi)容緩存中一份,將該動態(tài)消息的索引保存到索引數(shù)據(jù)庫中的三類索引表中,并保存到索引緩存中一份;其中,將該動態(tài)消息的索引保存到索引數(shù)據(jù)庫中的三類索引表中具體為:將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到動態(tài)消息索引表中;和,將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到時間軸索引表中;和,對于發(fā)布動態(tài)消息的用戶的每個好友,將該動態(tài)消息的索引與該好友的用戶標(biāo)識一起保存到分發(fā)索引表中的技術(shù)方案,由于對于實體內(nèi)容和索引都采用了緩存加數(shù)據(jù)庫的方式,因此大大提高了讀取速度,并且由于采用三類索引表實現(xiàn)了動態(tài)消息對好友的分發(fā),因此好友登錄后可以直接拿到索引,取到實體內(nèi)容,而不再需要先去查詢用戶好友信息,因此提高了訪問速度。
【專利附圖】
【附圖說明】
[0040]圖1是本發(fā)明實施例中的SNS后臺數(shù)據(jù)的存儲示意圖;
[0041]圖2是在圖1所述存儲結(jié)構(gòu)下用戶發(fā)布動態(tài)消息時的數(shù)據(jù)走向示意圖;
[0042]圖3是本發(fā)明中的一種社會性網(wǎng)絡(luò)服務(wù)后臺數(shù)據(jù)的存儲系統(tǒng)的結(jié)構(gòu)圖。
【具體實施方式】
[0043]本發(fā)明提供了一種社會性網(wǎng)絡(luò)服務(wù)后臺數(shù)據(jù)的存儲方法,該方法包括:[0044]當(dāng)用戶發(fā)布動態(tài)消息時,將該動態(tài)消息的實體內(nèi)容保存到實體內(nèi)容數(shù)據(jù)庫中,并保存到實體內(nèi)容緩存中一份,將該動態(tài)消息的索引保存到索引數(shù)據(jù)庫中的三類索引表中,并保存到索引緩存中一份;即采用索引+實體內(nèi)容,以及緩存+數(shù)據(jù)庫的方式進(jìn)行數(shù)據(jù)的存儲,其中,將該動態(tài)消息的索引保存到索引數(shù)據(jù)庫中的三類索引表中具體為:
[0045]將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到動態(tài)消息索引表(newsfeed)中;
[0046]和,將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到時間軸索引表(Timelines)中;
[0047]和,對于發(fā)布動態(tài)消息的用戶的每個好友,將該動態(tài)消息的索引與該好友的用戶標(biāo)識一起保存到分發(fā)索引表(DispatchBuddy)中。
[0048]這種實體內(nèi)容和索引都采用了緩存加數(shù)據(jù)庫的存儲方式,大大提高了讀取速度,并且由于采用三類索引表實現(xiàn)了動態(tài)消息對好友的分發(fā),因此好友登錄后可以直接拿到索弓丨,取到實體內(nèi)容,而不再需要先去查詢用戶好友信息,因此提高了訪問速度。
[0049]在本發(fā)明中對于索引進(jìn)行分庫分表進(jìn)行存儲,具體來說:索引數(shù)據(jù)庫由多個子庫組成,各子庫對應(yīng)的用戶標(biāo)識取值范圍不同(例如根據(jù)用戶標(biāo)識的后2位的取值范圍進(jìn)行劃分),且每個子庫都包括動態(tài)消息索引表、時間軸索引表中和分發(fā)索引表;
[0050]這樣,在將索引保存到索引數(shù)據(jù)庫時,根據(jù)發(fā)布動態(tài)消息的用戶的標(biāo)識找到對應(yīng)的子庫,將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的動態(tài)消息索引表中;根據(jù)發(fā)布動態(tài)消息的用戶的標(biāo)識找到對應(yīng)的子庫,將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的時間軸索引表中;對于發(fā)布動態(tài)消息的用戶的每個好友,根據(jù)該好友的用戶標(biāo)識找到對應(yīng)的子庫,將該動態(tài)消息的索引與該好友的用戶標(biāo)識一起保存到所找到子庫的分發(fā)索引表中。
[0051]此外,如果索引數(shù)據(jù)過多,還可以在子庫中分表進(jìn)行存儲,具體來說:設(shè)置每個子庫中包括對應(yīng)于不同的日期范圍的多個動態(tài)消息索引表/時間軸索引表/分發(fā)索引表;
[0052]將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的動態(tài)消息索引表中為:保存到所找到子庫的與當(dāng)前日期對應(yīng)的動態(tài)消息索引表中;
[0053]將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的時間軸索引表中為:保存到所找到子庫的與當(dāng)前日期對應(yīng)的時間軸索引表中;
[0054]將該動態(tài)消息的索引與該好友的用戶標(biāo)識一起保存到所找到子庫的分發(fā)索引表中為:保存到所找到子庫的與當(dāng)前日期對應(yīng)的分發(fā)索引表中。
[0055]在本發(fā)明中,對于實體內(nèi)容按照其來源進(jìn)行分庫分表存儲,具體來說:設(shè)置實體內(nèi)容數(shù)據(jù)庫包括:本站內(nèi)容數(shù)據(jù)庫和外站內(nèi)容數(shù)據(jù)庫;則將該動態(tài)消息的實體內(nèi)容保存到實體內(nèi)容數(shù)據(jù)庫中具體為:
[0056]如果該動態(tài)消息為在本社會性網(wǎng)絡(luò)服務(wù)中發(fā)布的消息,則將其實體內(nèi)容保存到本站內(nèi)容數(shù)據(jù)庫中,如果該動態(tài)消息為其他社會性網(wǎng)絡(luò)服務(wù)中發(fā)布的消息,則將其實體內(nèi)容保存到外站內(nèi)容數(shù)據(jù)庫中。
[0057]對于其他社會性網(wǎng)絡(luò)服務(wù)中發(fā)布的動態(tài)消息,按照時間將該動態(tài)消息的實體內(nèi)容保存到外站內(nèi)容數(shù)據(jù)庫中的不同表中;例如,每天用一張表。
[0058]進(jìn)一步地,對于外站內(nèi)容數(shù)據(jù)庫中的超過預(yù)設(shè)時間(如15天)沒有被后續(xù)處理過(未被評論、轉(zhuǎn)發(fā)或O過)的動態(tài)消息實體內(nèi)容進(jìn)行刪除,而對于在預(yù)設(shè)時間內(nèi)被后續(xù)處理過的動態(tài)消息實體內(nèi)容,將其轉(zhuǎn)移到本站內(nèi)容數(shù)據(jù)庫中的指定表中;
[0059]進(jìn)一步地,將本站內(nèi)容數(shù)據(jù)庫中的數(shù)據(jù)定期備份到一個歸檔庫中。
[0060]為使上述技術(shù)方案更加清楚,下面將結(jié)合附圖進(jìn)行舉例說明。
[0061]圖1是本發(fā)明實施例中的SNS后臺數(shù)據(jù)的存儲示意圖。如圖1所示,索引數(shù)據(jù)庫由4組子庫組成,分別為:索引子庫一、索引子庫二、索引子庫三和索引子庫四。每個索引子庫都由兩臺設(shè)備組成,一主一從,做主從備份。
[0062]在圖1所示實施例中,將索引信息按10進(jìn)制的用戶標(biāo)識(UserID)后2位進(jìn)行分子庫存儲,例如用戶標(biāo)識后2位的取值范圍0-24、25~49、50-74和75、9,分別對應(yīng)索引子庫
一至四。[0063]每個索引子庫中均存儲newsfeed、Timelines和DispatchBuddy三類索引表。
[0064]在圖1所示實施例中,Timelines和DispatchBuddy,按日期再分成后綴為O和 I 兩套表,如:DispatchBuddy_0006_0, DispatchBuddy_0006_l, Timelines_0006_0,Timelines_0006_l命名,用來存放一個月內(nèi)的日期在f9、9~17、17~25,25^31四個時間段內(nèi)的信息。即將一個月中的廣9日和17~25日所產(chǎn)生的消息的索引保存到后綴為O的Timelines和DispatchBuddy表中,將一個月中的9~17日25~31日所產(chǎn)生的消息的索引保存到后綴為I的Timelines和DispatchBuddy表中。
[0065]在圖1所示實施例中,索引的緩存采用兩臺服務(wù)器。
[0066]在圖1所示實施例中,本站的動態(tài)消息的實體內(nèi)容,存入本站內(nèi)容數(shù)據(jù)庫,并將內(nèi)容緩存到實體內(nèi)容緩存中。向?qū)嶓w內(nèi)容數(shù)據(jù)庫和實體內(nèi)容緩存中保存動態(tài)消息的實體內(nèi)容時,實際存入的數(shù)據(jù)包括:動態(tài)消息標(biāo)識,動態(tài)消息實體內(nèi)容以及發(fā)布時間、發(fā)布人、評論數(shù)、轉(zhuǎn)發(fā)數(shù)等信息。
[0067]從外站抓過來的動態(tài)消息,會按時間存入外站內(nèi)容數(shù)據(jù)庫中的不同的表中,每天一張表,系統(tǒng)會在每天的O點(diǎn)自動切換。如果沒有被評論,轉(zhuǎn)發(fā)或O過的動態(tài)消息實體內(nèi)容則保留15天。如果在15天內(nèi)有被評論、轉(zhuǎn)發(fā)或@等操作,則將此動態(tài)消息轉(zhuǎn)存到本站實體內(nèi)容數(shù)據(jù)庫的DupFeedContent表中,15天后,讀取到被評論過、@過、或轉(zhuǎn)發(fā)過的外站動態(tài)消息,會自動到DupFeedContent表中查詢。
[0068]在圖1所示實施例中,定期(如每個月初),會將上個月本站實體內(nèi)容數(shù)據(jù)庫中的內(nèi)容轉(zhuǎn)存到歸檔數(shù)據(jù)庫中。
[0069]在圖1所示實施例中,實體內(nèi)容的緩存采用兩臺服務(wù)器的8個redis實例。
[0070]圖2是在圖1所述存儲結(jié)構(gòu)下用戶發(fā)布動態(tài)消息時的數(shù)據(jù)走向示意圖。參見圖2,用戶發(fā)布動態(tài)時的進(jìn)行如下操作:
[0071]I,用戶發(fā)布feed (動態(tài)消息)后,如果是本站發(fā)布,會將feed實體內(nèi)容存入到本站實體內(nèi)容數(shù)據(jù)庫中,并存到實體內(nèi)容緩存中一份;如果是外站發(fā)布,會路由到外站實體內(nèi)容數(shù)據(jù)庫,再根據(jù)日期路由到對應(yīng)年月日的表中,將內(nèi)容存入,并存到實體內(nèi)容緩存中一份。
[0072]2,存動態(tài)消息索引表中,存放的是動態(tài)消息標(biāo)識(feedid)、用戶標(biāo)識(userid)、feed類型和創(chuàng)建時間等內(nèi)容。按用戶標(biāo)識路由到索引子庫一至四的其中一個子庫,再按用戶標(biāo)識的后兩位路由到子庫中的相應(yīng)的表中。例如,索引子庫一中有編號為NewsFeed_0000~NewsFeed_0024的25張newsfeed表,索引子庫二中有編號為NewsFeed_0025?NewsFeed_0049的25張newsfeed表,索引子庫三中有編號為NewsFeed_0050?NewsFeed_0074的25張newsfeed表,索引子庫四中有編號為NewsFeed_0075?NewsFeed_0099的25張newsfeed表。這里之所以以4位數(shù)字做為后綴,是為了今后擴(kuò)展用。存入索引數(shù)據(jù)庫后,再存入到索引緩存一份。
[0073]3,存時間軸索引,索引表中,存放的是feedid、userid、feed類型和創(chuàng)建時間等內(nèi)容,主要是用于索引feed實體內(nèi)容,便于查詢。按用戶userid路由到索引子庫一至四的其中一個子庫,再按userid后兩位和當(dāng)前日期路由到相應(yīng)的表TimelinesOOxx x表中,其中,前兩個XX代表userid后兩位,最后一位X是按日期,按每月的I日、日、9日?17日、17日?25日,25日?31日四個時間段,分為0,1,0, I四個表段。存入數(shù)據(jù)庫后,再存入到緩存一份。
[0074]4,存分發(fā)索引,按用戶好友的userid路由到索引子庫一至四的其中一個子庫的其中一個庫,再按該userid后兩位和當(dāng)前日期路由到相應(yīng)的表DispatchBuddy_00xx_x表中,其中,前兩個XX代表userid后兩位,最后一位是按日期I?9、9?17、17?25,25?31,分為
O,1,0, I四個段。存入數(shù)據(jù)庫后,再存入到緩存一份。
[0075]5,其中索引子庫一至四是按userid的后2位區(qū)分,具體分區(qū)是userid的后2位的范圍0?24,25?49,50?74,75?99,分別對應(yīng)索引子庫一、二、三和四。
[0076]6,由于外站內(nèi)容只保留15天,如果評論、轉(zhuǎn)發(fā)、收藏或O外站抓取過來的feed,會首先將這條feed轉(zhuǎn)存到本站內(nèi)容數(shù)據(jù)庫中的DupFeedContent表,以防15天后查詢不到相關(guān)評論等操作。
[0077]7,為索引數(shù)據(jù)庫設(shè)置延時隊列,索引數(shù)據(jù)先放入延時列隊中;掃描延時隊列,如果延時隊列中有數(shù)據(jù),從延時隊里中取數(shù)據(jù)放入索引數(shù)據(jù)庫中。
[0078]即索引內(nèi)容持久化時,采用了延時隊列批量存儲。所謂延時隊列存儲,即在java虛擬機(jī)內(nèi)存中建立一個隊列結(jié)構(gòu),過來的索引數(shù)據(jù),先不入庫,而是先進(jìn)入隊列。服務(wù)啟動后,會同時啟用一個線程,不停的掃描隊列,如果隊列中的值大于零,則會從隊列取數(shù)據(jù),插入到數(shù)據(jù)庫中。此功能,是為了當(dāng)數(shù)據(jù)量過大時,緩解數(shù)據(jù)庫的數(shù)據(jù)插入壓力的。當(dāng)大量數(shù)據(jù)涌入的時候,會由隊列來承載大量數(shù)據(jù),防止將數(shù)據(jù)庫被壓垮,達(dá)到以空間換時間的目的
[0079]舉例:用戶A的好友用戶B在2012年5月24日16:16發(fā)布了一條動態(tài),具體流程為:
[0080]a)向本站內(nèi)容數(shù)據(jù)庫中插入一條feed內(nèi)容記錄,同時存入實體內(nèi)容緩存中一份。
[0081]b)根據(jù)用戶B的userid的10進(jìn)制數(shù)的后兩位路由到相關(guān)的索引數(shù)據(jù)庫。如果用戶B的userid=90098743,則根據(jù)后兩位43,會路由到索引子庫二,再根據(jù)43,將索引內(nèi)容插入到NewsFeed_0043表中,并同時存入索引緩存中。
[0082]c)同時,在索引子庫二,根據(jù)當(dāng)前日期,路由到相關(guān)timelines表。如今天是24號,則會在Timelines_00430表插入一條索引記錄,同時存一份到索引緩存中。
[0083]d)同樣方法操作dispatchbuddy表,由于此表是分發(fā)給好友的索引表,要根據(jù)好友A的user id進(jìn)行路由,如果A的userid=100092357,則會路由到索引子庫三,根據(jù)userid和當(dāng)前日期25號,在DiSpatchBuddy_0057_0表插入一條索引記錄,同時在索引緩存中保存一份。對用戶B的其他好友依次方法執(zhí)行相應(yīng)的操作。
[0084]這樣當(dāng)用戶B的好友,如用戶A登錄后,可直接在dispatchbuddy表中查找到好友的發(fā)布。
[0085]圖3是本發(fā)明中的一種社會性網(wǎng)絡(luò)服務(wù)后臺數(shù)據(jù)的存儲系統(tǒng)的結(jié)構(gòu)圖。如圖3所示,該系統(tǒng)包括:實體內(nèi)容數(shù)據(jù)庫31、實體內(nèi)容緩存32、索引數(shù)據(jù)庫33、索引緩存34和主控制器35,其中,
[0086]主控制器35,用于在用戶發(fā)布動態(tài)消息時,將該動態(tài)消息的實體內(nèi)容保存到實體內(nèi)容數(shù)據(jù)庫31中,并保存到實體內(nèi)容緩存32中一份,將該動態(tài)消息的索引保存到索引數(shù)據(jù)庫33中的三類索引表中,并保存到索引緩存34中一份;
[0087]其中,索引數(shù)據(jù)庫33中的三類索引表分別為:動態(tài)消息索引表中、時間軸索引表和分發(fā)索引表;
[0088]所述主控制器35,用于將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到動態(tài)消息索引表中;和,將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到時間軸索引表中;和,對于發(fā)布動態(tài)消息的用戶的每個好友,將該動態(tài)消息的索引與該好友的用戶標(biāo)識一起保存到分發(fā)索引表中。
[0089]在上述系統(tǒng)中,索引數(shù)據(jù)庫33中包括多個子庫,各子庫對應(yīng)的用戶標(biāo)識取值范圍不同,且每個子庫都包括動態(tài)消息索引表、時間軸索引表中和分發(fā)索引表;
[0090]所述主控制器35,用于根據(jù)發(fā)布動態(tài)消息的用戶的標(biāo)識找到索引數(shù)據(jù)庫33中的對應(yīng)的子庫,將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的動態(tài)消息索引表中;和,用于根據(jù)發(fā)布動態(tài)消息的用戶的標(biāo)識找到索引數(shù)據(jù)庫中的對應(yīng)的子庫,將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的時間軸索引表中;和,對于發(fā)布動態(tài)消息的用戶的每個好友,用于根據(jù)該好友的用戶標(biāo)識找到索引數(shù)據(jù)庫中的對應(yīng)的子庫,將該動態(tài)消息的索引與該好友的用戶標(biāo)識一起保存到所找到子庫的分發(fā)索引表中。
[0091]在上述系統(tǒng)中,實體內(nèi)容數(shù)據(jù)庫31包括:本站內(nèi)容數(shù)據(jù)庫和外站內(nèi)容數(shù)據(jù)庫;
[0092]主控制器35,用于在該動態(tài)消息為在本社會性網(wǎng)絡(luò)服務(wù)中發(fā)布的消息時,將其實體內(nèi)容保存到本站內(nèi)容數(shù)據(jù)庫中,在該動態(tài)消息為其他社會性網(wǎng)絡(luò)服務(wù)中發(fā)布的消息時,將其實體內(nèi)容保存到外站內(nèi)容數(shù)據(jù)庫中。
[0093]主控制器35,用于按照時間將該動態(tài)消息的實體內(nèi)容保存到外站內(nèi)容數(shù)據(jù)庫中的不同表中;和進(jìn)一步用于將外站內(nèi)容數(shù)據(jù)庫中的超過預(yù)設(shè)時間沒有被后續(xù)處理過的動態(tài)消息實體內(nèi)容刪除,而對于在預(yù)設(shè)時間內(nèi)被后續(xù)處理過的動態(tài)消息實體內(nèi)容,將其轉(zhuǎn)移到本站內(nèi)容數(shù)據(jù)庫中的指定表中;和,進(jìn)一步用于將本站內(nèi)容數(shù)據(jù)庫中的數(shù)據(jù)定期備份到一個歸檔庫中。
[0094]由上述可見,本發(fā)明的技術(shù)方案,由于對于實體內(nèi)容和索引都采用了緩存加數(shù)據(jù)庫的方式,因此大大提高了讀取速度,并且由于采用三類索引表實現(xiàn)了動態(tài)消息對好友的分發(fā),因此好友登錄后可以直接拿到索引,取到實體內(nèi)容,而不再需要先去查詢用戶好友信息,因此提高了訪問速度。并且,所有feed實體內(nèi)容只存儲I份,大量節(jié)省了空間,延時隊列批量存儲的方式緩解了數(shù)據(jù)庫的壓力。
[0095]以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。
【權(quán)利要求】
1.一種社會性網(wǎng)絡(luò)服務(wù)后臺數(shù)據(jù)的存儲方法,其特征在于,該方法包括: 當(dāng)用戶發(fā)布動態(tài)消息時,將該動態(tài)消息的實體內(nèi)容保存到實體內(nèi)容數(shù)據(jù)庫中,并保存到實體內(nèi)容緩存中一份,將該動態(tài)消息的索引保存到索引數(shù)據(jù)庫中的三類索引表中,并保存到索引緩存中一份; 其中,將該動態(tài)消息的索引保存到索引數(shù)據(jù)庫中的三類索引表中包括: 將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到動態(tài)消息索引表中; 和,將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到時間軸索引表中;和,對于發(fā)布動態(tài)消息的用戶的每個好友,將該動態(tài)消息的索引與該好友的用戶標(biāo)識一起保存到分發(fā)索引表中。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述索引數(shù)據(jù)庫由多個子庫組成,各子庫對應(yīng)的用戶標(biāo)識取值范圍不同,且每個子庫都包括動態(tài)消息索引表、時間軸索引表中和分發(fā)索引表; 所述將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到動態(tài)消息索引表中包括:根據(jù)發(fā)布動態(tài)消息的用戶的標(biāo)識找到對應(yīng)的子庫,將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的動態(tài)消息索引表中; 所述將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到時間軸索引表中包括:根據(jù)發(fā)布動態(tài)消息的用戶的標(biāo)識找到對應(yīng)的子庫,將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的時間軸索引表中; 所述將該動態(tài)消息的索引與該好友的用戶 標(biāo)識一起保存到分發(fā)索引表中包括:根據(jù)該好友的用戶標(biāo)識找到對應(yīng)的子庫,將該動態(tài)消息的索引與該好友的用戶標(biāo)識一起保存到所找到子庫的分發(fā)索引表中。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,每個子庫中包括對應(yīng)于不同的日期范圍的多個動態(tài)消息索引表/時間軸索引表/分發(fā)索引表; 所述將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的動態(tài)消息索引表中為:保存到所找到子庫的與當(dāng)前日期對應(yīng)的動態(tài)消息索引表中; 所述將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的時間軸索引表中為:保存到所找到子庫的與當(dāng)前日期對應(yīng)的時間軸索引表中; 所述將該動態(tài)消息的索引與該好友的用戶標(biāo)識一起保存到所找到子庫的分發(fā)索引表中為:保存到所找到子庫的與當(dāng)前日期對應(yīng)的分發(fā)索引表中。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述實體內(nèi)容數(shù)據(jù)庫包括:本站內(nèi)容數(shù)據(jù)庫和外站內(nèi)容數(shù)據(jù)庫; 所述將該動態(tài)消息的實體內(nèi)容保存到實體內(nèi)容數(shù)據(jù)庫中包括:如果該動態(tài)消息為在本社會性網(wǎng)絡(luò)服務(wù)中發(fā)布的消息,則將其實體內(nèi)容保存到本站內(nèi)容數(shù)據(jù)庫中,如果該動態(tài)消息為其他社會性網(wǎng)絡(luò)服務(wù)中發(fā)布的消息,則將其實體內(nèi)容保存到外站內(nèi)容數(shù)據(jù)庫中。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,如果該動態(tài)消息為其他社會性網(wǎng)絡(luò)服務(wù)中發(fā)布的消息,則將其實體內(nèi)容保存到外站內(nèi)容數(shù)據(jù)庫中包括:按照時間將該動態(tài)消息的實體內(nèi)容保存到外站內(nèi)容數(shù)據(jù)庫中的不同表中; 該方法進(jìn)一步包括:對于外站內(nèi)容數(shù)據(jù)庫中的超過預(yù)設(shè)時間沒有被后續(xù)處理過的動態(tài)消息實體內(nèi)容進(jìn)行刪除,而對于在預(yù)設(shè)時間內(nèi)被后續(xù)處理過的動態(tài)消息實體內(nèi)容,將其轉(zhuǎn)移到本站內(nèi)容數(shù)據(jù)庫中的指定表中; 該方法進(jìn)一步包括:將本站內(nèi)容數(shù)據(jù)庫中的數(shù)據(jù)定期備份到一個歸檔庫中。
6.根據(jù)權(quán)利要求1-5中任一項所述的方法,其特征在于,該方法進(jìn)一步包括: 為索引數(shù)據(jù)庫設(shè)置延時隊列,索引數(shù)據(jù)先放入延時列隊中; 掃描延時隊列,如果延時隊列中有數(shù)據(jù),從延時隊里中取數(shù)據(jù)放入索引數(shù)據(jù)庫中。
7.—種社會性網(wǎng)絡(luò)服務(wù)后臺數(shù)據(jù)的存儲系統(tǒng),其特征在于,該系統(tǒng)包括:實體內(nèi)容數(shù)據(jù)庫、實體內(nèi)容緩存、索引數(shù)據(jù)庫、索引緩存和主控制器,其中, 主控制器,用于在用戶發(fā)布動態(tài)消息時,將該動態(tài)消息的實體內(nèi)容保存到實體內(nèi)容數(shù)據(jù)庫中,并保存到實體內(nèi)容緩存中一份,將該動態(tài)消息的索引保存到索引數(shù)據(jù)庫中的三類索引表中,并保存到索引緩存中一份; 其中,索引數(shù)據(jù)庫中的三類索引表分別為:動態(tài)消息索引表中、時間軸索引表和分發(fā)索引表; 所述主控制器,具體用于將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到動態(tài)消息索引表中;和,用于將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到時間軸索引表中;和,對于發(fā)布動態(tài)消息的用戶的每個好友,用于將該動態(tài)消息的索引與該好友的用戶標(biāo)識一起保存到分發(fā)索引表中。
8.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述索引數(shù)據(jù)庫中包括多個子庫,各子庫對應(yīng)的用戶標(biāo)識取值范圍不同,且每個子庫都包括動態(tài)消息索引表、時間軸索引表中和分發(fā)索引表;` 所述主控制器,具體用于根據(jù)發(fā)布動態(tài)消息的用戶的標(biāo)識找到索引數(shù)據(jù)庫中的對應(yīng)的子庫,將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的動態(tài)消息索引表中;和,用于根據(jù)發(fā)布動態(tài)消息的用戶的標(biāo)識找到索引數(shù)據(jù)庫中的對應(yīng)的子庫,將該動態(tài)消息的索引與發(fā)布動態(tài)消息的用戶的標(biāo)識一起保存到所找到子庫的時間軸索引表中;和,對于發(fā)布動態(tài)消息的用戶的每個好友,用于根據(jù)該好友的用戶標(biāo)識找到索引數(shù)據(jù)庫中的對應(yīng)的子庫,將該動態(tài)消息的索引與該好友的用戶標(biāo)識一起保存到所找到子庫的分發(fā)索引表中。
9.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述實體內(nèi)容數(shù)據(jù)庫包括:本站內(nèi)容數(shù)據(jù)庫和外站內(nèi)容數(shù)據(jù)庫; 則所述主控制器還用于:在該動態(tài)消息為在本社會性網(wǎng)絡(luò)服務(wù)中發(fā)布的消息時,將其實體內(nèi)容保存到本站內(nèi)容數(shù)據(jù)庫中,在該動態(tài)消息為其他社會性網(wǎng)絡(luò)服務(wù)中發(fā)布的消息時,將其實體內(nèi)容保存到外站內(nèi)容數(shù)據(jù)庫中。
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于, 所述主控制器,還用于按照時間將該動態(tài)消息的實體內(nèi)容保存到外站內(nèi)容數(shù)據(jù)庫中的不同表中;和進(jìn)一步用于將外站內(nèi)容數(shù)據(jù)庫中的超過預(yù)設(shè)時間沒有被后續(xù)處理過的動態(tài)消息實體內(nèi)容刪除,而對于在預(yù)設(shè)時間內(nèi)被后續(xù)處理過的動態(tài)消息實體內(nèi)容,將其轉(zhuǎn)移到本站內(nèi)容數(shù)據(jù)庫中的指定表中;和,進(jìn)一步用于將本站內(nèi)容數(shù)據(jù)庫中的數(shù)據(jù)定期備份到一個歸檔庫中。
【文檔編號】H04L29/08GK103516765SQ201210227159
【公開日】2014年1月15日 申請日期:2012年6月30日 優(yōu)先權(quán)日:2012年6月30日
【發(fā)明者】趙炳坤 申請人:北京新媒傳信科技有限公司