本發(fā)明涉及數(shù)據(jù)存儲,具體涉及一種數(shù)據(jù)關(guān)系存儲方法、裝置、系統(tǒng)及可讀存儲介質(zhì)。
背景技術(shù):
1、計(jì)算機(jī)在一些項(xiàng)目需求中,會需要存儲和查詢關(guān)系網(wǎng)絡(luò),例如角色之間的關(guān)系,比如朋友、同事、師生等關(guān)系,現(xiàn)有方案對角色間的關(guān)系存儲都是以某個(gè)數(shù)據(jù)為目標(biāo)來獲取關(guān)系,因?yàn)楹芏嚓P(guān)系通常是成對或相互的,比如a有一個(gè)朋友關(guān)系是b,則對應(yīng)b一定有一個(gè)朋友關(guān)系是a,此時(shí)a要存儲一份b的數(shù)據(jù),b同時(shí)要存儲一份a的數(shù)據(jù),從而導(dǎo)致數(shù)據(jù)的冗余以及維護(hù)的困難。
技術(shù)實(shí)現(xiàn)思路
1、有鑒于此,本發(fā)明提供了一種數(shù)據(jù)關(guān)系存儲方法、裝置、系統(tǒng)及可讀存儲介質(zhì),以解決以某個(gè)數(shù)據(jù)為目標(biāo)存儲成對或相互數(shù)據(jù),導(dǎo)致數(shù)據(jù)的冗余以及維護(hù)的困難的問題。
2、第一方面,本發(fā)明提供了一種數(shù)據(jù)關(guān)系存儲方法,應(yīng)用于數(shù)據(jù)關(guān)系存儲系統(tǒng),所述數(shù)據(jù)關(guān)系存儲系統(tǒng)至少包括關(guān)系節(jié)點(diǎn)存儲數(shù)組,所述方法包括:響應(yīng)于添加第一對象和第二對象的關(guān)系節(jié)點(diǎn),確定所述關(guān)系節(jié)點(diǎn)存儲在所述關(guān)系節(jié)點(diǎn)存儲數(shù)組中的目標(biāo)索引值,所述關(guān)系節(jié)點(diǎn)中至少包括第一對象、第二對象、第一對象的前一關(guān)系節(jié)點(diǎn)索引值和第二對象的前一關(guān)系節(jié)點(diǎn)索引值;獲取當(dāng)前記錄的所述第一對象和第二對象分別最新存儲在所述關(guān)系節(jié)點(diǎn)存儲數(shù)組中的第一索引值和第二索引值,并將所述第一索引值和第二索引值分別更新至所述關(guān)系節(jié)點(diǎn)中第一對象的前一關(guān)系節(jié)點(diǎn)索引值和第二對象的前一關(guān)系節(jié)點(diǎn)索引值處;將所述第一索引值和第二索引值分別更新為目標(biāo)索引值;將更新完成的關(guān)系節(jié)點(diǎn)基于目標(biāo)索引值存儲在所述關(guān)系節(jié)點(diǎn)存儲數(shù)組中。
3、本實(shí)施例提供的數(shù)據(jù)關(guān)系存儲方法,響應(yīng)于添加第一對象和第二對象的關(guān)系節(jié)點(diǎn),確定該關(guān)系節(jié)點(diǎn)存儲在關(guān)系節(jié)點(diǎn)存儲數(shù)組中的目標(biāo)索引值,獲取當(dāng)前記錄的第一對象和第二對象分別最新存儲在關(guān)系節(jié)點(diǎn)存儲數(shù)組中的第一索引值和第二索引值,并將第一索引值和第二索引值分別更新至關(guān)系節(jié)點(diǎn)中第一對象的前一關(guān)系節(jié)點(diǎn)索引值和第二對象的前一關(guān)系節(jié)點(diǎn)索引值處,再將第一索引值和第二索引值分別更新為目標(biāo)索引值,最后將更新完成的關(guān)系節(jié)點(diǎn)基于目標(biāo)索引值存儲在關(guān)系節(jié)點(diǎn)存儲數(shù)組中,實(shí)現(xiàn)通過數(shù)據(jù)結(jié)構(gòu)存儲關(guān)系節(jié)點(diǎn)的方式,減少了關(guān)系的冗余數(shù)據(jù)。
4、在一種可選的實(shí)施方式中,所述關(guān)系節(jié)點(diǎn)存儲數(shù)組包括對等關(guān)系數(shù)組和一對多關(guān)系數(shù)組,所述關(guān)系節(jié)點(diǎn)中還包括第一對象和第二對象的關(guān)系類型,在確定所述關(guān)系節(jié)點(diǎn)存儲在所述關(guān)系節(jié)點(diǎn)存儲數(shù)組中的目標(biāo)索引值之前,所述方法還包括:判斷第一對象和第二對象的關(guān)系類型為對等關(guān)系類型或一對多關(guān)系類型;若所述第一對象和第二對象的關(guān)系類型為對等關(guān)系類型,則確定所述關(guān)系節(jié)點(diǎn)存儲在對等關(guān)系數(shù)組中的目標(biāo)索引值;若所述第一對象和第二對象的關(guān)系類型為一對多關(guān)系類型,則確定所述關(guān)系節(jié)點(diǎn)存儲在一對多關(guān)系數(shù)組中的目標(biāo)索引值。
5、本發(fā)明基于對象間的關(guān)系類型分為對等關(guān)系和一對多關(guān)系,不同關(guān)系類型有其對應(yīng)的關(guān)系存儲數(shù)組,可以提高數(shù)組存儲的靈活性和整潔性,在后續(xù)查找目標(biāo)關(guān)系類型時(shí),可從其對應(yīng)的關(guān)系存儲數(shù)組中查詢,更加快捷。
6、在一種可選的實(shí)施方式中,所述方法還包括:響應(yīng)于查詢目標(biāo)對象的目標(biāo)關(guān)系類型,獲取當(dāng)前記錄的所述目標(biāo)對象最新存儲在關(guān)系節(jié)點(diǎn)存儲數(shù)組中的待查詢索引值;獲取所述待查詢索引值處存儲的目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn),判斷所述目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)中記錄的關(guān)系類型是否為所述目標(biāo)關(guān)系類型;若所述目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)中記錄的關(guān)系類型為所述目標(biāo)關(guān)系類型,則記錄所述目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)存儲在所述關(guān)系節(jié)點(diǎn)存儲數(shù)組中的索引值;并確定所述目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)中目標(biāo)對象的前一關(guān)系節(jié)點(diǎn)的索引值;將所述前一關(guān)系節(jié)點(diǎn)的索引值更新為所述待查詢索引值,返回執(zhí)行獲取所述待查詢索引值處存儲的目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)的步驟,直至確定前一關(guān)系節(jié)點(diǎn)的索引值表示為第一次存儲目標(biāo)對象的關(guān)系節(jié)點(diǎn),得到目標(biāo)對象的目標(biāo)關(guān)系類型在所述關(guān)系節(jié)點(diǎn)存儲數(shù)組中的所有索引值。
7、本發(fā)明響應(yīng)于查詢目標(biāo)對象的目標(biāo)關(guān)系類型,可預(yù)先獲取目標(biāo)對象最新存儲在關(guān)系節(jié)點(diǎn)存儲數(shù)組中的待查詢索引值,并基于關(guān)系節(jié)點(diǎn)中記錄的前一關(guān)系節(jié)點(diǎn)索引值依次往前查詢,直至下一個(gè)關(guān)系節(jié)點(diǎn)為空,通過索引值查詢實(shí)現(xiàn)便捷查詢關(guān)系節(jié)點(diǎn),并進(jìn)行后續(xù)處理的效果。
8、在一種可選的實(shí)施方式中,所述方法還包括:響應(yīng)于查詢第一目標(biāo)對象和第二目標(biāo)對象的關(guān)系類型,獲取當(dāng)前記錄的所述第一對象或者第二對象最新存儲在所述對等關(guān)系數(shù)組和一對多關(guān)系數(shù)組中分別的待查詢索引值;分別從對等關(guān)系數(shù)組和一對多關(guān)系數(shù)組中獲取所述第一對象或者第二對象對應(yīng)的待查詢索引值處存儲的關(guān)系節(jié)點(diǎn),判斷所述關(guān)系節(jié)點(diǎn)是否為第一目標(biāo)對象和第二目標(biāo)對象的關(guān)系節(jié)點(diǎn);若所述關(guān)系節(jié)點(diǎn)為第一目標(biāo)對象和第二目標(biāo)對象的關(guān)系節(jié)點(diǎn),則對所述關(guān)系節(jié)點(diǎn)中第一對象和第二對象的關(guān)系類型進(jìn)行記錄;確定所述關(guān)系節(jié)點(diǎn)中第一目標(biāo)對象或者第二目標(biāo)對象的前一關(guān)系節(jié)點(diǎn)的索引值;將所述前一關(guān)系節(jié)點(diǎn)的索引值更新為所述待查詢索引值,返回執(zhí)行獲取所述第一對象或者第二對象對應(yīng)的待查詢索引值處存儲的關(guān)系節(jié)點(diǎn)的步驟,直至所述第一目標(biāo)對象或者第二目標(biāo)對象的前一關(guān)系節(jié)點(diǎn)的索引值表示為第一次存儲第一目標(biāo)對象或者第二目標(biāo)對象的關(guān)系節(jié)點(diǎn),得到第一目標(biāo)對象和第二目標(biāo)對象對應(yīng)記錄的所有關(guān)系類型。
9、在一種可選的實(shí)施方式中,所述方法還包括:響應(yīng)于刪除目標(biāo)對象的目標(biāo)關(guān)系類型,判斷所述目標(biāo)關(guān)系類型是否為對等關(guān)系類型還是一對多關(guān)系類型;若所述目標(biāo)關(guān)系類型為對等關(guān)系類型,或者所述目標(biāo)關(guān)系類型為一對多關(guān)系類型,且所述目標(biāo)對象為單方對象時(shí),獲取所述目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)存儲在所述對等關(guān)系數(shù)組或一對多關(guān)系數(shù)組中的索引值,以及所述目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)中記錄的目標(biāo)對象以及另外對象分別對應(yīng)的前一關(guān)系節(jié)點(diǎn)的索引值,所述另外對象表示所述目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)中除所述目標(biāo)對象以外的其他至少一個(gè)對象;查詢記錄的目標(biāo)對象的前一關(guān)系節(jié)點(diǎn)的索引值為所述目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)存儲在所述對等關(guān)系數(shù)組或一對多關(guān)系數(shù)組中的索引值的第一待更新節(jié)點(diǎn),以及記錄的另外對象的前一關(guān)系節(jié)點(diǎn)的索引值為所述目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)存儲在所述對等關(guān)系數(shù)組或一對多關(guān)系數(shù)組中的索引值的第二待更新節(jié)點(diǎn);將所述第一待更新節(jié)點(diǎn)中記錄的目標(biāo)對象的前一關(guān)系節(jié)點(diǎn)的索引值更新為所述目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)中記錄的目標(biāo)對象的前一關(guān)系節(jié)點(diǎn)的索引值,以及將所述第二待更新節(jié)點(diǎn)中記錄的另外對象的前一關(guān)系節(jié)點(diǎn)的索引值更新為所述目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)中記錄的另外對象的前一關(guān)系節(jié)點(diǎn)的索引值;將所述目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)從所述對等關(guān)系數(shù)組或一對多關(guān)系數(shù)組中移除。
10、本發(fā)明通過更改關(guān)系節(jié)點(diǎn)中記錄的前一關(guān)系節(jié)點(diǎn)的索引值,實(shí)現(xiàn)關(guān)系節(jié)點(diǎn)的移除,方案更加便捷簡單。
11、在一種可選的實(shí)施方式中,所述方法還包括:若所述目標(biāo)對象為多方對象,則將目標(biāo)對象從所述目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)中移除;獲取目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)存儲在所述一對多關(guān)系數(shù)組中的索引值,以及所述目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)中記錄的目標(biāo)對象的前一關(guān)系節(jié)點(diǎn)的索引值;查詢記錄的目標(biāo)對象的前一關(guān)系節(jié)點(diǎn)的索引值為所述目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)存儲在所述一對多關(guān)系數(shù)組中的索引值的第三待更新節(jié)點(diǎn);將所述第三待更新節(jié)點(diǎn)中記錄的目標(biāo)對象的前一關(guān)系節(jié)點(diǎn)的索引值更新為所述目標(biāo)對象對應(yīng)的關(guān)系節(jié)點(diǎn)中記錄的目標(biāo)對象的前一關(guān)系節(jié)點(diǎn)的索引值。
12、在一種可選的實(shí)施方式中,所述數(shù)據(jù)存儲關(guān)系存儲系統(tǒng)還包括關(guān)系節(jié)點(diǎn)存儲鏈表,所述方法還包括:響應(yīng)于將關(guān)系節(jié)點(diǎn)存儲數(shù)組轉(zhuǎn)換為關(guān)系節(jié)點(diǎn)存儲鏈表,將所述關(guān)系節(jié)點(diǎn)存儲數(shù)組中的每個(gè)關(guān)系節(jié)點(diǎn)作為所述關(guān)系節(jié)點(diǎn)存儲鏈表中的數(shù)據(jù)元素;基于每個(gè)關(guān)系節(jié)點(diǎn)存儲在所述關(guān)系節(jié)點(diǎn)存儲數(shù)組的索引值,以及每個(gè)關(guān)系節(jié)點(diǎn)中記錄的所有對象分別的前一關(guān)系節(jié)點(diǎn)的索引值,轉(zhuǎn)換為連接各個(gè)數(shù)據(jù)元素的指針,得到關(guān)系節(jié)點(diǎn)存儲鏈表。
13、第二方面,本發(fā)明提供了一種數(shù)據(jù)關(guān)系存儲裝置,應(yīng)用于數(shù)據(jù)關(guān)系存儲系統(tǒng),所述數(shù)據(jù)關(guān)系存儲系統(tǒng)至少包括關(guān)系節(jié)點(diǎn)存儲數(shù)組,所述裝置包括:索引確定模塊,用于響應(yīng)于添加第一對象和第二對象的關(guān)系節(jié)點(diǎn),確定所述關(guān)系節(jié)點(diǎn)存儲在所述關(guān)系節(jié)點(diǎn)存儲數(shù)組中的目標(biāo)索引值,所述關(guān)系節(jié)點(diǎn)中至少包括第一對象、第二對象、第一對象的前一關(guān)系節(jié)點(diǎn)索引值和第二對象的前一關(guān)系節(jié)點(diǎn)索引值;關(guān)系節(jié)點(diǎn)更新模塊,用于獲取當(dāng)前記錄的所述第一對象和第二對象分別最新存儲在所述關(guān)系節(jié)點(diǎn)存儲數(shù)組中的第一索引值和第二索引值,并將所述第一索引值和第二索引值分別更新至所述關(guān)系節(jié)點(diǎn)中第一對象的前一關(guān)系節(jié)點(diǎn)索引值和第二對象的前一關(guān)系節(jié)點(diǎn)索引值處;索引值更新模塊,用于將所述第一索引值和第二索引值分別更新為目標(biāo)索引值;關(guān)系節(jié)點(diǎn)存儲模塊,用于將更新完成的關(guān)系節(jié)點(diǎn)基于目標(biāo)索引值存儲在所述關(guān)系節(jié)點(diǎn)存儲數(shù)組中。
14、第三方面,本發(fā)明提供了一種數(shù)據(jù)關(guān)系存儲系統(tǒng),所述數(shù)據(jù)關(guān)系存儲系統(tǒng)包括關(guān)系節(jié)點(diǎn)存儲數(shù)組和控制器,所述控制器包括:存儲器和處理器,存儲器和處理器之間互相通信連接,存儲器中存儲有計(jì)算機(jī)指令,處理器通過執(zhí)行計(jì)算機(jī)指令,從而執(zhí)行上述第一方面或其對應(yīng)的任一實(shí)施方式的數(shù)據(jù)關(guān)系存儲方法。
15、第四方面,本發(fā)明提供了一種計(jì)算機(jī)可讀存儲介質(zhì),該計(jì)算機(jī)可讀存儲介質(zhì)上存儲有計(jì)算機(jī)指令,計(jì)算機(jī)指令用于使計(jì)算機(jī)執(zhí)行上述第一方面或其對應(yīng)的任一實(shí)施方式的數(shù)據(jù)關(guān)系存儲方法。