一種解決分布式跨庫分片表關(guān)聯(lián)查詢的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù)領(lǐng)域,具體涉及一種解決分布式跨庫分片表關(guān)聯(lián)查詢的方法。
【背景技術(shù)】
[0002]1、目前解決分布式跨庫分片表關(guān)聯(lián)的方案,是通過數(shù)據(jù)冗余的方式,將相關(guān)聯(lián)的表數(shù)據(jù)全部冗余到所有的節(jié)點數(shù)據(jù)庫上,以此來解決分布式中跨庫分片關(guān)聯(lián)查詢的難題。如圖1所示:若⑶ST0MERS分片表的數(shù)據(jù)分布在兩臺數(shù)據(jù)庫dnl、dn2中,而⑶ST0MERS分片表需要跟ORDERS分片表進(jìn)行關(guān)聯(lián)查詢,那么就將ORDERS分片表的全部數(shù)據(jù)分別存放到那兩臺數(shù)據(jù)庫(dnl、dn2)中,此時ORDERS分片表稱為全局表,ORDERS分片表在分布式下所有子節(jié)點上數(shù)據(jù)必須一致。通過冗余數(shù)據(jù)的方式雖然能夠解決分布式跨庫分片表關(guān)聯(lián)的問題,但是需要犧牲掉很多數(shù)據(jù)存儲空間,并且存在性能問題,舉例說明如下:
如果⑶ST0MERS分片表分布到N臺機器的數(shù)據(jù)庫并且需要跟Μ個表進(jìn)行關(guān)聯(lián),那么這Μ個表必須被配置為全局表,即需要將這Μ個表的所有數(shù)據(jù)都必須冗余到Ν臺機器的對應(yīng)數(shù)據(jù)庫中,這需要犧牲大量機器磁盤空間;其次,對于這Μ個表在分布式環(huán)境下的數(shù)據(jù)一致管理需要耗費大量精力和時間;再者,若這Μ個表中的某些表的數(shù)據(jù)量很大,會對子節(jié)點數(shù)據(jù)庫的性能造成一定影響,并且整個分布式集群的查詢性能也相應(yīng)變差。
【發(fā)明內(nèi)容】
[0003]本發(fā)明的目的是解決現(xiàn)有技術(shù)的缺陷,提供一種不浪費額外數(shù)據(jù)存儲空間,不會對各個子節(jié)點的系統(tǒng)性能造成太大影響,同時也保證整個分布式集群能夠有較為高效的表關(guān)聯(lián)查詢性能的解決分布式跨庫分片表關(guān)聯(lián)查詢的方法,采用的技術(shù)方案如下:
一種解決分布式跨庫分片表關(guān)聯(lián)查詢的方法,包括:
構(gòu)建CUSTOMERS分片表與ORDERS分片表之間的關(guān)聯(lián)關(guān)系:指定CUSTOMERS分片表的表名、分布的所有節(jié)點、分片字段及分片規(guī)則;同時指定ORDERS分片表的表名、外鍵列名及外鍵所引用的表的列的列名;
使CUSTOMERS分片表的入庫操作為正常的入庫操作,而ORDERS分片表的入庫操作需根據(jù)所關(guān)聯(lián)的CUSTOMERS分片表數(shù)據(jù)所在的節(jié)點來執(zhí)行入庫操作,其中CUSTOMERS分片表為常規(guī)分片表,ORDERS分片表與常規(guī)分片表需要關(guān)聯(lián)的分片表。
[0004]通過以上設(shè)置,使得本發(fā)明無需通過數(shù)據(jù)冗余的方式來實現(xiàn)分布式跨庫分片表關(guān)聯(lián)查詢,并且在ORDERS分片表所涉及的表數(shù)據(jù)量越很大的情況下,本發(fā)明采用的將CUSTOMERS分片表所有關(guān)聯(lián)表數(shù)據(jù)存儲在同一個子節(jié)點的方法有助于提高子節(jié)點查詢效率,從而提高整個分布式集群的查詢效率。
[0005]作為優(yōu)選,由XML文件配置并表示⑶ST0MERS分片表與ORDERS分片表之間的關(guān)聯(lián)關(guān)系Ο
[0006]通過XML文件來構(gòu)建分布式數(shù)據(jù)庫分片表與分片表之間的關(guān)聯(lián)關(guān)系,一目了然,具體如下:
〈RootTable name = //CUSTOMERS^ shardNode = "dnl, dn2" shardKey = "id〃shardRule=〃hash〃>
〈ChildTable name=〃ORDERS〃 foreignKey=〃cid〃 referenceKey=〃id〃>〈/ChildTable〉
〈/RootTable〉
其中,RootTable表示CUSTOMERS分片表,name指定CUSTOMERS分片表的表名,shardNode和shardKey指定QJSTOMERS分片表分布的所有節(jié)點和分片字段,shardRule指定分片規(guī)則為哈希。ChildTable表示ORDERS分片表,name指定ORDERS分片表的表名,foreignKey指定外鍵列名,referenceKey指定外鍵引用了哪個表的哪一列的列名。
[0007]作為優(yōu)選,ORDERS分片表的入庫操作需根據(jù)所關(guān)聯(lián)的CUSTOMERS分片表數(shù)據(jù)所在的節(jié)點來執(zhí)行入庫操作具體為:當(dāng)涉及到ORDERS分片表的入庫操作時,首先生成一個查找CUSTOMERS分片表的id的sql語句,并下發(fā)到所有的節(jié)點執(zhí)行,當(dāng)某個節(jié)點反饋的結(jié)果集有數(shù)據(jù),則在該節(jié)點上進(jìn)行ORDERS分片表的入庫操作。
[0008]通過這種方法,當(dāng)在分布式集群執(zhí)行分片表與分片表關(guān)聯(lián)查詢的時候,分片表的關(guān)聯(lián)操作都被本地化,即可以在每一個子節(jié)點數(shù)據(jù)庫中提前完成,從而避免了分布式集群中跨節(jié)點數(shù)據(jù)庫的分片表關(guān)聯(lián),由這種方法合并并返回的數(shù)據(jù)也是最終準(zhǔn)確的。
[0009]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果:本發(fā)明無需通過數(shù)據(jù)冗余的方式來實現(xiàn)分布式跨庫分片表關(guān)聯(lián)查詢,無需浪費額外的存儲空間,并且在ORDERS分片表所涉及的表數(shù)據(jù)量越很大的情況下,本發(fā)明采用的將CUSTOMERS分片表所有關(guān)聯(lián)表數(shù)據(jù)存儲在同一個子節(jié)點的方法有助于提高子節(jié)點查詢效率,從而提高整個分布式集群的查詢效率。
【附圖說明】
[0010]圖1是現(xiàn)有技術(shù)解決分布式跨庫分片表關(guān)聯(lián)查詢的方法的示意圖;
圖2是本發(fā)明實施例的邏輯框架圖;
圖3是本發(fā)明實施例解決分布式跨庫分片表關(guān)聯(lián)查詢的方法的示意圖。
【具體實施方式】
[0011]下面結(jié)合附圖和實施例對本發(fā)明作進(jìn)一步詳細(xì)描述。
[0012]實施例:一種解決分布式跨庫分片表關(guān)聯(lián)查詢的方法,包括:
構(gòu)建CUSTOMERS分片表與ORDERS分片表之間的關(guān)聯(lián)關(guān)系:指定CUSTOMERS分片表的表名、分布的所有節(jié)點、分片字段及分片規(guī)則;同時指定ORDERS分片表的表名、外鍵列名及外鍵所引用的表的列的列名;
使CUSTOMERS分片表的入庫操作為正常的入庫操作,而ORDERS分片表的入庫操作需根據(jù)所關(guān)聯(lián)的CUSTOMERS分片表數(shù)據(jù)所在的節(jié)點來執(zhí)行入庫操作,其中CUSTOMERS分片表為常規(guī)分片表,ORDERS分片表與常規(guī)分片表需要關(guān)聯(lián)的分片表。
[0013]本實施例中,由XML文件配置并表示⑶ST0MERS分片表與ORDERS分片表之間的關(guān)耳關(guān)關(guān)系Ο
[0014]通過XML文件來構(gòu)建分布式數(shù)據(jù)庫分片表與分片表之間的關(guān)聯(lián)關(guān)系,一目了然,具體如下:
〈RootTable name = //CUSTOMERS^ shardNode = "dnl, dn2" shardKey = "id〃shardRule=〃hash〃>
<ChildTable name=〃ORDERS〃 foreignKey=〃cid〃 referenceKey=〃id〃>〈/ChildTable〉
〈/RootTable〉
其中,RootTable表示CUSTOMERS分片表,name指定CUSTOMERS分片表的表名,shardNode和shardKey指定QJSTOMERS分片表分布的所有節(jié)點和分片字段,shardRule指定分片規(guī)則為哈希。ChildTable表示ORDERS分片表,name指定ORDERS分片表的表名,foreignKey指定外鍵列名,referenceKey指定外鍵引用了哪個表的哪一列的列名。
[0015]本實施例中,ORDERS分片表的入庫操作需根據(jù)所關(guān)聯(lián)的CUSTOMERS分片表數(shù)據(jù)所在的節(jié)點來執(zhí)行入庫操作具體為:當(dāng)涉及到ORDERS分片表的入庫操作時,首先生成一個查找CUSTOMERS分片表的id的sql語句,并下發(fā)到所有的節(jié)點執(zhí)行,當(dāng)某個節(jié)點反饋的結(jié)果集有數(shù)據(jù),再進(jìn)行ORDERS分片表的入庫操作。
[0016]如圖2所示,當(dāng)涉及⑶ST0MERS分片表和ORDERS分片表的入庫操作時,入庫處理流程為:
通過系統(tǒng)的分片表關(guān)聯(lián)處理模塊對入庫操作Cl,C2進(jìn)行路由處理,系統(tǒng)通過XML配置的關(guān)聯(lián)信息識別到CUSTOMERS為常規(guī)分片表,根據(jù)路由規(guī)則,將C1路由到節(jié)點dnl,將C2路由到節(jié)點dn2 ;
通過系統(tǒng)的分片表關(guān)聯(lián)處理模塊對入庫操作01,02進(jìn)行路由處理,系統(tǒng)通過XML配置的關(guān)聯(lián)信息識別到ORDERS為與⑶ST0MERS相關(guān)聯(lián)的表,這時候系統(tǒng)生成一個查找⑶ST0MERS分片表的語句,根據(jù)CID字段查找⑶ST0MERS分片表記錄并路由到對應(yīng)的節(jié)點上,最后,01 (CID=1的記錄被存放在節(jié)點dnl中)被路由到節(jié)點dnl,而02 (CID=2的記錄被存放在節(jié)點dn2中)被路由到節(jié)點dn2。
[0017]如圖3所示,通過以上設(shè)置,使得本發(fā)明無需通過數(shù)據(jù)冗余的方式來實現(xiàn)分布式跨庫分片表關(guān)聯(lián)查詢,并且在ORDERS分片表所涉及的表數(shù)據(jù)量越很大的情況下,本發(fā)明采用的將CUSTOMERS分片表所有關(guān)聯(lián)表數(shù)據(jù)存儲在同一個子節(jié)點的方法有助于提高子節(jié)點查詢效率,從而提高整個分布式集群的查詢效率。通過這種方法,當(dāng)在分布式集群執(zhí)行分片表與分片表關(guān)聯(lián)查詢的時候,分片表的關(guān)聯(lián)操作都被本地化,即可以在每一個子節(jié)點數(shù)據(jù)庫中提前完成,從而避免了分布式集群中跨節(jié)點數(shù)據(jù)庫的分片表關(guān)聯(lián),由這種方法合并并返回的數(shù)據(jù)也是最終準(zhǔn)確的。
【主權(quán)項】
1.一種解決分布式跨庫分片表關(guān)聯(lián)查詢的方法,其特征在于,包括: 構(gòu)建CUSTOMERS分片表與ORDERS分片表之間的關(guān)聯(lián)關(guān)系:指定CUSTOMERS分片表的表名、分布的所有節(jié)點、分片字段及分片規(guī)則;同時指定ORDERS分片表的表名、外鍵列名及外鍵所引用的表的列的列名; 使CUSTOMERS分片表的入庫操作為正常的入庫操作,而ORDERS分片表的入庫操作需根據(jù)所關(guān)聯(lián)的CUSTOMERS分片表數(shù)據(jù)所在的節(jié)點來執(zhí)行入庫操作,其中CUSTOMERS分片表為常規(guī)分片表,ORDERS分片表與常規(guī)分片表需要關(guān)聯(lián)的分片表。2.根據(jù)權(quán)利要求1所述的一種解決分布式跨庫分片表關(guān)聯(lián)查詢的方法,其特征在于,通過XML文件配置并表示⑶ST0MERS分片表與ORDERS分片表之間的關(guān)聯(lián)關(guān)系。3.根據(jù)權(quán)利要求1所述的一種解決分布式跨庫分片表關(guān)聯(lián)查詢的方法,其特征在于,所述ORDERS分片表的入庫操作需根據(jù)所關(guān)聯(lián)的CUSTOMERS分片表數(shù)據(jù)所在的節(jié)點來執(zhí)行入庫操作具體為:當(dāng)涉及到ORDERS分片表的入庫操作時,首先生成一個查找⑶ST0MERS分片表的id的sql語句,并下發(fā)到所有的節(jié)點執(zhí)行,當(dāng)某個節(jié)點反饋的結(jié)果集有數(shù)據(jù),則在該節(jié)點上進(jìn)行ORDERS分片表的入庫操作。
【專利摘要】本發(fā)明公開一種解決分布式跨庫分片表關(guān)聯(lián)查詢的方法,包括:構(gòu)建CUSTOMERS分片表與ORDERS分片表之間的關(guān)聯(lián)關(guān)系:指定CUSTOMERS分片表的表名、分布的所有節(jié)點、分片字段及分片規(guī)則;同時指定ORDERS分片表的表名、外鍵列名及外鍵所引用的表的列的列名;使CUSTOMERS分片表的入庫操作為正常的入庫操作,而ORDERS分片表的入庫操作需根據(jù)所關(guān)聯(lián)的CUSTOMERS分片表數(shù)據(jù)所在的節(jié)點來執(zhí)行入庫操作,其中CUSTOMERS分片表為常規(guī)分片表,ORDERS分片表與常規(guī)分片表需要關(guān)聯(lián)的分片表。
【IPC分類】G06F17/30
【公開號】CN105404638
【申請?zhí)枴緾N201510625406
【發(fā)明人】陳建欣, 黎建駒, 馮亮, 李文杰, 勞定雄, 劉雙廣
【申請人】高新興科技集團股份有限公司
【公開日】2016年3月16日
【申請日】2015年9月28日