行。在圖示的實(shí)施例中,位圖片段850具有六個(gè)位的位置,其對(duì)應(yīng)于存儲(chǔ)在BI中的六個(gè)行。對(duì)于每個(gè)位位置,位圖片段850包括兩個(gè)位,其中一個(gè)是行改變(row-changed)位820并且另一個(gè)是日志中(in_journal)位830。對(duì)于任何給定的行,行改變位指示自從用于該行的數(shù)據(jù)項(xiàng)被存儲(chǔ)在IMCU中之后該行被改變。用于行的日志中位指示用于該行的更新的值是否被存儲(chǔ)在IMCU的日志中。
[0173]基于在數(shù)據(jù)結(jié)構(gòu)800中的信息,數(shù)據(jù)庫(kù)服務(wù)器可以確定數(shù)據(jù)項(xiàng)的當(dāng)前版本是否駐留在頂CU中、在頂CU的日志中、或者兩者都沒(méi)有。具體而言,如果結(jié)構(gòu)800對(duì)于給定行沒(méi)有信息,則頂CU具有來(lái)自該行的數(shù)據(jù)項(xiàng)的當(dāng)前版本。如果結(jié)構(gòu)800具有用于該行的信息并且用于該行的行改變位是“O”,則IMCU也具有來(lái)自該行的數(shù)據(jù)項(xiàng)的當(dāng)前版本。如果結(jié)構(gòu)800具有用于該行的信息,行改變位被設(shè)置并且日志中位被設(shè)置,則IMCU不具有該項(xiàng)的當(dāng)前版本,但是用于IMCU的日志確實(shí)具有該項(xiàng)的當(dāng)前版本。最后,如果結(jié)構(gòu)800具有用于該行的信息、行改變位被設(shè)置、并且日志中位沒(méi)有被設(shè)置,則IMCU和日志兩者都不具有數(shù)據(jù)項(xiàng)的當(dāng)前版本,并且當(dāng)前版本必須從PF數(shù)據(jù)中檢索。
[0174]結(jié)構(gòu)800的記錄按需進(jìn)行創(chuàng)建。因此,如果頂CU對(duì)于在特定擴(kuò)展區(qū)中的所有數(shù)據(jù)項(xiàng)是當(dāng)前的,則結(jié)構(gòu)800可能不具有用于該擴(kuò)展區(qū)的任何記錄。類似地,如果頂CU對(duì)于特定塊中的所有數(shù)據(jù)項(xiàng)是當(dāng)前的,則結(jié)構(gòu)800可能不具有用于那個(gè)塊的任何塊級(jí)別信息804。通過(guò)只存儲(chǔ)用于自從IMCU的版本時(shí)間之后已被改變或添加的擴(kuò)展區(qū)/塊的改變的行的信息,結(jié)構(gòu)800會(huì)比否則如果為每一行預(yù)先分配位的情況明顯小。
[0175]利用位改變的記錄
[0176]對(duì)于需要數(shù)據(jù)項(xiàng)的最近版本的事務(wù),在改變行的位圖606中設(shè)置的位指示MF數(shù)據(jù)具有用于那行的陳舊數(shù)據(jù),并且因此MCU 600不能用來(lái)從那行提供數(shù)據(jù)。但是,并非所有的事務(wù)都需要數(shù)據(jù)項(xiàng)的最近版本。
[0177]例如,在許多數(shù)據(jù)庫(kù)系統(tǒng)中,事務(wù)被分配快照時(shí)間,并且返回反映直到那個(gè)快照時(shí)間的數(shù)據(jù)庫(kù)的狀態(tài)的數(shù)據(jù)。具體而言,如果事務(wù)被分配T3快照時(shí)間,則該事務(wù)必須被提供包括在T3之前被提交的所有改變,并且沒(méi)有直到T3尚未提交的改變(除了事務(wù)自己所做的改變)的數(shù)據(jù)項(xiàng)的版本。對(duì)于這種事務(wù),在改變行的位圖606中設(shè)置的位不一定指示該IMCU600不能用來(lái)作為用于對(duì)應(yīng)行的項(xiàng)的來(lái)源。具體而言,如果位在事務(wù)的快照時(shí)間之后被首先設(shè)置,則即使用于特定行的位在改變行的位圖606中被設(shè)置,這種事務(wù)仍然可以使用IMCU600來(lái)獲取用于該特定行的數(shù)據(jù)。
[0178]例如,假定列向量220和222包含如在時(shí)間Tl時(shí)存在的數(shù)據(jù),如由存儲(chǔ)在SMU 604中的MCU版本時(shí)間所指示的。在后來(lái)的時(shí)間T5,更新操作改變行rl。具體而言,更新將rlcl的值從X改變?yōu)閅。響應(yīng)于這個(gè)更新,IMCU 600的改變行的位圖606將從000000改變?yōu)?00000,將對(duì)應(yīng)于行rI的位設(shè)置為“I”。此外,在SMU 604內(nèi)存儲(chǔ)指示用于rl的位在T5被改變的記錄。
[0179]在另一個(gè)后面時(shí)間T9,另一個(gè)更新操作改變行r3。具體而言,第二更新將r2c3的值從A改變到B。響應(yīng)于這個(gè)更新,頂⑶600的改變行的位圖606將從100000改變到101000,將對(duì)應(yīng)于行r3的位設(shè)置為“I”。此外,在SMU 604內(nèi)存儲(chǔ)指示用于行r3的位在時(shí)間T9被設(shè)置的記錄。
[0180]在這些更新發(fā)生之后,數(shù)據(jù)庫(kù)服務(wù)器可以執(zhí)行讀取列Cl和c3的值的事務(wù)。如果該事務(wù)的快照時(shí)間比T5早,則該事務(wù)可以從列向量220和222中讀取所有的值。這可以由數(shù)據(jù)庫(kù)通過(guò)將該事務(wù)的快照時(shí)間與在位改變的記錄608中指示的時(shí)間進(jìn)行比較來(lái)確定。如果事務(wù)的快照時(shí)間在頂CU版本時(shí)間之后,但是在位改變的記錄608中的任何時(shí)間之前,則在頂CU600中的所有值相對(duì)于那個(gè)事務(wù)都是有效的。
[0181]如果事務(wù)的快照時(shí)間是在T5之后但是在T9之前,則除了必須從別處(例如從日志中或者從PF數(shù)據(jù)中)獲得的行rl的值之外,事務(wù)可以從列向量220和222中讀取所有的值。如果事務(wù)的快照時(shí)間是在T9之后,則除了必須從別處獲得的行rl和r3的值之外,事務(wù)可以從列向量220和222中讀取所有的值。
[0182]刪除向量
[0183]在一種實(shí)施例中,為了考慮讀取在MCU600中被鏡像的值的事務(wù)的快照時(shí)間,改變行的位圖606與位改變的記錄608結(jié)合使用來(lái)創(chuàng)建用于尋求從IMCU 600中讀取數(shù)據(jù)的每個(gè)事務(wù)的刪除向量。刪除向量特定于快照時(shí)間,因?yàn)樵趧h除向量中的位只為在與該刪除向量為其構(gòu)造的事務(wù)相關(guān)聯(lián)的快照時(shí)間之前被修改的行設(shè)置。換句話說(shuō),每個(gè)刪除向量反映直到快照時(shí)間是當(dāng)前的改變行的位圖的版本。因此,與刪除向量相關(guān)聯(lián)的快照時(shí)間越舊,該刪除向量反映的改變行的位圖的版本越舊,并且因此,將在刪除向量中設(shè)置的位的數(shù)量越少。
[0184]對(duì)于具有在頂CU的版本時(shí)間之后的快照時(shí)間的事務(wù),通過(guò)“回滾”在事務(wù)的快照時(shí)間之后對(duì)改變行的位圖606發(fā)生的改變?yōu)槭聞?wù)產(chǎn)生刪除向量。例如,如果事務(wù)具有T5的快照時(shí)間,則數(shù)據(jù)庫(kù)服務(wù)器搜索位改變的記錄608,以識(shí)別在時(shí)間T5之后發(fā)生的改變。改變行的位圖606的拷貝被產(chǎn)生,并且在那個(gè)拷貝中,對(duì)應(yīng)于在時(shí)間T5之后發(fā)生的改變的位被重置為“O”。對(duì)于具有在頂CU的版本時(shí)間之前的快照時(shí)間的事務(wù),刪除向量可以通過(guò)生成改變行的位圖606的拷貝來(lái)產(chǎn)生,并且在那個(gè)拷貝中,將在查詢的快照時(shí)間和HCU的版本時(shí)間之間被改變的行的位設(shè)置為“I”。
[0185]由于刪除向量是特定于事務(wù)的,因此在任何給定時(shí)間,任何數(shù)量的不同事務(wù)可以執(zhí)行映射到特定MCU的行的掃描。每個(gè)那些事務(wù)都可以被分配不同的快照時(shí)間。因此,雖然每個(gè)那些事務(wù)將具有不同的刪除向量,但是所有那些刪除向量都是基于對(duì)應(yīng)于頂CU的SMU的同一改變行的位圖產(chǎn)生的。
[0186]合并前改變行的位圖的合并后保留
[0187]如以上所提到的,當(dāng)改變被合并到頂CU中時(shí),在頂CU的改變行的位圖中的所有值被重置為“O”,以指示自從MCU的新版本時(shí)間(其將是MCU被刷新/合并的時(shí)間)開始,沒(méi)有行被改變。但是,不是簡(jiǎn)單地丟棄或重寫現(xiàn)有改變行的位圖,而是合并前改變行的位圖的拷貝可以被保存。合并前改變行的位圖的保存拷貝在本文被稱為“保留位圖”。如將在后面更詳細(xì)描述的,這種保留位圖允許使用合并后的IMCU來(lái)向具有在合并之前的快照時(shí)間的事務(wù)提供數(shù)據(jù)項(xiàng)。
[0188]例如,假定IM⑶在時(shí)間Tl被構(gòu)建。從時(shí)間Tl到時(shí)間TlO,對(duì)IM⑶中的數(shù)據(jù)項(xiàng)做出的改變被記錄在其全局日志中,而不是直接對(duì)IM⑶內(nèi)的數(shù)據(jù)項(xiàng)本身做出。雖然那些改變被記錄在日志內(nèi),但是這些改變也使得對(duì)應(yīng)的位在MCU的改變行的位圖中被設(shè)置。在時(shí)間TlO,改變被合并到IMCU中,使得IMCU的版本時(shí)間從TI改變到T1。
[0189]在這些情況下,緊挨著合并之前的改變行的位圖的狀態(tài)反映頂CU內(nèi)的哪些行在時(shí)間Tl和時(shí)間TlO之間改變。通過(guò)指示哪些行在時(shí)間Tl和時(shí)間TlO之間改變,改變行的位圖同樣指示哪些行在時(shí)間Tl和時(shí)間TlO之間沒(méi)有改變。在合并后的頂CU內(nèi),在時(shí)間Tl和時(shí)間TlO之間沒(méi)有改變的那些行可以被提供給具有在Tl和TlO之間的快照時(shí)間的事務(wù)。
[0190]具體而言,改變行的位圖的合并前版本的拷貝在合并之后被保留。與被保留的位圖一起,合并前頂CU的版本時(shí)間戳也被存儲(chǔ)。在以上給出的例子中,被保留的位圖將與Tl的版本時(shí)間戳相關(guān)聯(lián)。
[0191]當(dāng)事務(wù)(a)需要映射到IMCU的數(shù)據(jù)項(xiàng),和(b)具有落在被保留的位圖時(shí)間和當(dāng)前頂CU時(shí)間之間的快照時(shí)間時(shí),被保留的位圖被用來(lái)識(shí)別在在被保留的位圖時(shí)間和當(dāng)前頂CU時(shí)間之間沒(méi)有改變的行。用于所識(shí)別的行的值可以被提供給來(lái)自當(dāng)前IMCU的事務(wù)。用于剩余行的值從別處獲得。具體而言,如果相關(guān)的日志條目還未被清除,則用于剩余行的值可以從頂CU的全局日志中獲得,或者,否則從PF數(shù)據(jù)中獲得。
[0192]BCU屆IJ新撤銷
[0193]不是響應(yīng)于最近的合并而存儲(chǔ)單個(gè)保留位圖,而是響應(yīng)于每個(gè)合并可以存儲(chǔ)獨(dú)立的保留位圖。用于給定IMCU的保留位圖可以按時(shí)間次序被鏈接。用于IMCU的保留位圖的鏈接集合構(gòu)成用于IMCU的“IMCU刷新撤銷”。
[0194]例如,假定IMCU在時(shí)間Tl被創(chuàng)建,并且然后在時(shí)間T10、T15和T30被刷新/合并。在這些情況下,對(duì)IM⑶的IM⑶刷新撤銷將包含三個(gè)保留位圖RBl、RB2和RB3。這三個(gè)保留位圖將分別與時(shí)間1'1、1'10和1'15相關(guān)聯(lián)。
[0195]在本例子中,RBl的“O”位指示在時(shí)間Tl和TlO之間沒(méi)有改變的行。RB2的“O”位指示在時(shí)間TlO和T15之間沒(méi)有改變的行。RB3的“O”位指示在時(shí)間T15和T30之間沒(méi)有改變的行。
[0196]給定任何快照時(shí)間,可以使用頂⑶刷新撤銷來(lái)識(shí)別當(dāng)前頂⑶內(nèi)的哪些行可以被提供給具有那個(gè)快照時(shí)間的事務(wù)。例如,對(duì)于具有快照時(shí)間T18的事務(wù),在RB3中的“O”位將指示哪些行可以從當(dāng)前IMCU中被提供給事務(wù)。作為另一個(gè)例子,對(duì)于具有T12的快照時(shí)間的事務(wù),RB2和RB3可以利用邏輯或運(yùn)算來(lái)合并,以產(chǎn)生指示哪些行可以從當(dāng)前IMCU中被提供給事務(wù)的位圖。作為還有的另一個(gè)例子,對(duì)于具有T5的快照時(shí)間的事務(wù),RBl、RB2和RB3可以利用邏輯或運(yùn)算來(lái)合并,以產(chǎn)生指示哪些行可以從當(dāng)前頂CU中被提供給事務(wù)的位圖。
[0197]因此,給定具有TX的快照時(shí)間的事務(wù),具有低于TX的最高時(shí)間戳的保留位圖利用邏輯或運(yùn)算與同一IMCU的所有最近的保留位圖進(jìn)行合并。邏輯“或”操作產(chǎn)生其中“O”對(duì)應(yīng)于自從TX和當(dāng)前IMCU的版本時(shí)間開始沒(méi)有改變行的位圖。因此,用于那些行的數(shù)據(jù)項(xiàng)可以通過(guò)IMCU來(lái)提供。
[0198]基于存儲(chǔ)器約束的事務(wù)降級(jí)
[0199]如上所述,對(duì)IM⑶中的項(xiàng)做出的改變被記錄在日志中,而不是直接對(duì)IM⑶中的項(xiàng)做出。日志被維護(hù)在易失性存儲(chǔ)器中。不幸的是,對(duì)大數(shù)量的項(xiàng)進(jìn)行改變的長(zhǎng)時(shí)間運(yùn)行的事務(wù)會(huì)導(dǎo)致產(chǎn)生太多日志條目,使得沒(méi)有足夠的空間在易失性存儲(chǔ)器中存儲(chǔ)條目。
[0200]在這些情況下,日志條目可以被沖刷到持久性存儲(chǔ)裝置中,以釋放在易失性存儲(chǔ)器中的空間。但是,沖刷日志條目到持久性存儲(chǔ)裝置并且之后從持久性存儲(chǔ)裝置讀取條目導(dǎo)致明顯的性能損失。因此,根據(jù)一種實(shí)施例,產(chǎn)生足夠數(shù)量日志條目從而引起存儲(chǔ)器問(wèn)題的事務(wù)被“降級(jí)”。
[0201 ]根據(jù)一種實(shí)施例,通過(guò)將這些事務(wù)的現(xiàn)有私有日志條目推入到IM⑶的全局日志中,并且停止產(chǎn)生進(jìn)一步的私有日志條目來(lái)降級(jí)這些事務(wù)。盡管在頂⑶的全局日志中,由于這些日志條目是用于未提交事務(wù)的,并且因此初始地與“不確定的”時(shí)間戳相關(guān)聯(lián),因此這些日志條目對(duì)其它事務(wù)不可見(jiàn)。當(dāng)降級(jí)的事務(wù)提交時(shí),在全局日志中事務(wù)的條目的時(shí)間戳從不確定的改變?yōu)槭聞?wù)的提交時(shí)間。
[0202]不是當(dāng)在降級(jí)模式時(shí)停止日志條目的產(chǎn)生,而是事務(wù)可以繼續(xù)產(chǎn)生日志條目,直到它們的私有日志的大小再次達(dá)到指定的閾值。在那一點(diǎn)時(shí),私有日志條目可以再次被移動(dòng)到全局日志,其中由于條目的不確定時(shí)間戳,因此條目將對(duì)其它事務(wù)不可見(jiàn)。填充私有日志至閾值,并且然后將條目轉(zhuǎn)移到全局日志的這一過(guò)程可以被重復(fù)任意次,直到事務(wù)或者提交或者被回滾。
[0203]無(wú)論在降級(jí)模式下操作的事務(wù)是否繼續(xù)產(chǎn)生更多的私有日志條目來(lái)記錄其改變,這些改變?nèi)匀槐挥涗浽谂cIMCU相關(guān)聯(lián)的位改變的記錄中。一旦事務(wù)提交,那些位改變就被生成到改變行的位圖中。
[0204]通過(guò)利用改變行的位圖來(lái)記錄發(fā)生了改變的事實(shí),未來(lái)的事務(wù)將避免從頂CU中讀取陳舊的數(shù)據(jù)項(xiàng)。當(dāng)改變行的位圖指示與特定行相關(guān)聯(lián)的數(shù)據(jù)項(xiàng)無(wú)效時(shí),需要那行數(shù)據(jù)項(xiàng)的事務(wù)必須從除頂CU之外的其它來(lái)源獲得數(shù)據(jù)項(xiàng)。在改變由停止產(chǎn)生日志條目的降級(jí)事務(wù)做出的情況下,改變將不在全局日志中出現(xiàn),因此數(shù)據(jù)項(xiàng)從PF數(shù)據(jù)中檢索。
[0205]在一種實(shí)施例中,不是所有利用MCU的事務(wù)都被立即降級(jí)。相反,降級(jí)基于每個(gè)事務(wù)來(lái)執(zhí)行,其中只有如果事務(wù)滿足某些標(biāo)準(zhǔn)它們才被降級(jí)。標(biāo)準(zhǔn)可以是,例如,它們已產(chǎn)生的日志條目的數(shù)量超過(guò)了特定閾值。
[0206]一般而言,事務(wù)必須看到它們自己做出的未提交的改變。因此,已停止產(chǎn)生日志條目的降級(jí)事務(wù)可能必須從PF數(shù)據(jù)中獲取該事務(wù)先前改變的一些數(shù)據(jù)項(xiàng)的值,因?yàn)閷?duì)于那些改變,沒(méi)有日志條目存在。
[0207]在沒(méi)有日志的情況下保持同步
[0208]在以上當(dāng)部分中,解釋了MF數(shù)據(jù)可以通過(guò)在日志中記錄改變來(lái)與PF數(shù)據(jù)保持同步,同時(shí)使壓縮的MF數(shù)據(jù)完好,直到日志被合并到壓縮的MF數(shù)據(jù)中。但是,在可替代的實(shí)施例中,對(duì)于頂CU中的一個(gè)或多個(gè),MF數(shù)據(jù)可以僅僅通過(guò)響應(yīng)于對(duì)對(duì)應(yīng)PF數(shù)據(jù)做出的改變使數(shù)據(jù)無(wú)效而不使用日志記錄這些改變來(lái)保持同步。
[0209]在這種實(shí)施例中,如上所述,可以為事務(wù)產(chǎn)生刪除向量。對(duì)于沒(méi)有被設(shè)置的那些位,數(shù)據(jù)可以從適當(dāng)?shù)腗CU中獲得。對(duì)于被設(shè)置的那些位,數(shù)據(jù)必須從PF數(shù)據(jù)中檢索,因?yàn)楫?dāng)沒(méi)有維護(hù)這種日志時(shí),從存儲(chǔ)器中的日志獲得數(shù)據(jù)不是一個(gè)選項(xiàng)。
[0210]使MF數(shù)據(jù)無(wú)效而不用在日志中記錄改變的好處是避免了處理開銷和維持日志的存儲(chǔ)器消耗。但是,當(dāng)在MCU中的數(shù)據(jù)項(xiàng)太陳舊而不能被用于處理事務(wù)時(shí),從PF數(shù)據(jù)中訪問(wèn)數(shù)據(jù)項(xiàng)的適當(dāng)版本通常將導(dǎo)致比要求從日志中獲得數(shù)據(jù)項(xiàng)更多的開銷。此外,在不存在存儲(chǔ)器中的日志時(shí)刷新MCU通常還將導(dǎo)致更多的開銷,因?yàn)樾枰缓喜⒌巾擟U中的改變必須從PF數(shù)據(jù)而不是從存儲(chǔ)器中日志獲得。
[0211 ] 在一些實(shí)施例中,可以為一些IM⑶維護(hù)日志,而不為其它的IM⑶維護(hù)。此外,IM⑶的日志有可能被丟棄,并且仍繼續(xù)使用IMCU,用于由于在IMCU版本時(shí)間和需要數(shù)據(jù)的事務(wù)的快照時(shí)間之間的改變而尚未失效的數(shù)據(jù)。
[0212]確定從何處獲取數(shù)據(jù)
[0213]由于MF數(shù)據(jù)104僅僅是PF數(shù)據(jù)中的一些數(shù)據(jù)的鏡像(盡管以不同的格式),因此包含在MF數(shù)據(jù)104中的所有數(shù)據(jù)項(xiàng)也在PF數(shù)據(jù)中。因此,對(duì)于需要訪問(wèn)在MF數(shù)據(jù)中被鏡像的數(shù)據(jù)項(xiàng)的任何查詢,數(shù)據(jù)庫(kù)服務(wù)器具有從MF數(shù)據(jù)104、從PF數(shù)據(jù)、或者部分從MF數(shù)據(jù)104和部分從PF數(shù)據(jù)獲取那個(gè)數(shù)據(jù)的選擇。
[0214]通常,當(dāng)所請(qǐng)求的數(shù)據(jù)是表的整行(或表的大多數(shù)列)時(shí),從其最高效檢索數(shù)據(jù)的位置是高速緩存106(假定持久性格式是行為主)。如果所請(qǐng)求的行當(dāng)前不駐留在高速緩存106中,但是MF數(shù)據(jù)104具有該行的所有列,則MF數(shù)據(jù)104是從其最高效檢索該行的位置。假定MF數(shù)據(jù)104是列為主,則MF數(shù)據(jù)104對(duì)于檢索行要比高速緩存106低效,因?yàn)?,在列為主的格式中,用于行的值必須從MF數(shù)據(jù)104內(nèi)的各個(gè)地方拼湊在一起。
[0215]如果不是所有用于所請(qǐng)求的行的數(shù)據(jù)都在MF數(shù)據(jù)104中,則行的至少一些數(shù)據(jù)必須從持久性存儲(chǔ)裝置110中檢索。通常,持久性存儲(chǔ)裝置110是從其檢索數(shù)據(jù)最低效的位置,因?yàn)楸P訪問(wèn)比在易失性存儲(chǔ)器中存儲(chǔ)的數(shù)據(jù)上操作明顯更慢。
[0216]根據(jù)一種實(shí)施例,從哪里獲得數(shù)據(jù)的決定可以在多種粒度級(jí)別中的任何一種做出。例如,從哪里獲得數(shù)據(jù)的決定可以基于每個(gè)表、每列、每擴(kuò)展區(qū)、每段、每個(gè)表分區(qū)等做出。因此,即使來(lái)自列Cl的所有數(shù)據(jù)都在列向量220中,數(shù)據(jù)庫(kù)服務(wù)器也可以決定通過(guò)從列向量220中獲取列Cl的一些值并且通過(guò)從持久性存儲(chǔ)裝置110上的PF數(shù)據(jù)中獲得列Cl的其余的值來(lái)執(zhí)行掃描。
[0217]根據(jù)一種實(shí)施例,諸如表的數(shù)據(jù)庫(kù)對(duì)象可以是“啟用存儲(chǔ)器中”的。已被啟用存儲(chǔ)器中的表具有其數(shù)據(jù)的至少一部分被鏡像在MF數(shù)據(jù)中。例如,表200是啟用存儲(chǔ)器中的,因?yàn)閬?lái)自它的兩個(gè)列(Cl和c3)的數(shù)據(jù)以鏡像格式數(shù)據(jù)104被鏡像。具體而言,來(lái)自表200的列cI的數(shù)據(jù)被鏡像在列向量220中,并且來(lái)自表200的列c3的數(shù)據(jù)被鏡像在列向量222