事件背景
OceanBase數(shù)據(jù)庫是螞蟻集團不基于任何開源產(chǎn)品,完全自研的企業(yè)級分布式關(guān)系數(shù)據(jù)庫,在普通硬件上實現(xiàn)金融級高可用,首創(chuàng)“三地五中心”城市級故障自動無損容災(zāi)新標(biāo)準(zhǔn),具備卓越的水平擴展能力,全球首家通過TPC-C標(biāo)準(zhǔn)測試的分布式數(shù)據(jù)庫,2020年5月,OceanBase以7.07億tpmC的在線事務(wù)處理性能,打破了去年自己創(chuàng)造的TPC-C世界紀錄。截止至目前,OceanBase是第一個也是唯一一個上榜的中國數(shù)據(jù)庫。產(chǎn)品立項于2010年,具有數(shù)據(jù)強一致、高可用、高性能、在線擴展、高度兼容SQL標(biāo)準(zhǔn)和主流關(guān)系數(shù)據(jù)庫、低成本等特點。
OceanBase中開創(chuàng)性的可以創(chuàng)建兩種模式(mysql模式、oracle模式),因為我們現(xiàn)場使用Oracle模式,雖然兼容很多,但還是有些細微的差別,因為OMS遷移中涉及到了外鍵約束的問題,所以我簡單做了下測試,給大家分享下測試結(jié)論。
如果有興趣的同學(xué)可以登錄OB的官網(wǎng)找最新的文檔了解學(xué)習(xí)下。目前OB最新文檔是2.2.5版本中說目前OceanBase不支持通過ALTERTABLE語句增加或修改約束,2.2.7版本是支持alter的。
場景測試
在OMS遷移的時候因為要起增量所以會創(chuàng)建四個隱藏列和一個約束,所以表上原來的外鍵約束會取消,約束語句會放在OMS機器的/home/admin/logs/post_ddl_1000068.sql中,這里的1000068是任務(wù)ID,在數(shù)據(jù)遷移完成后可以手工去創(chuàng)建。另外OB在創(chuàng)建約束時不支持NOVALIDATE,我就針對這個問題做了以下測試。
(1)環(huán)境準(zhǔn)備
在Oracle和OB分別創(chuàng)建測試表
oracle:
SQL> create table emp(empno number(4) primary key,ename varchar2(10),depno number(4));
Table created.
SQL> create table depth(deptno number(4) primary key,dname varchar2(14));
Table created.
OB:
obclient> create table emp(empno number(4) primary key,ename varchar2(10),depno number(4));
Query OK, 0 rows affected (0.09 sec)
obclient> create table depth(deptno number(4) primary key,dname varchar2(14));
Query OK, 0 rows affected (0.04 sec)
插入數(shù)據(jù):
insert into depth values (440,董事會);
insert into depth values (330,財務(wù)部);
insert into emp values(1002,風(fēng)華,440);
insert into emp values(1003,白露,330);
oracle:
SQL> select * from emp;
EMPNO ENAME DEPNO
---------- ---------- ----------
1002 風(fēng)華 440
1003 白露 330
SQL> select * from depth;
DEPTNO DNAME
---------- --------------
440 董事會
330 財務(wù)部
OB:
obclient> select * from emp;
+-------+--------+-------+
| EMPNO | ENAME | DEPNO |
+-------+--------+-------+
| 1003 | 白露 | 330 |
| 1002 | 風(fēng)華 | 440 |
+-------+--------+-------+
2 rows in set (0.00 sec)
obclient> select * from depth;
+--------+-----------+
| DEPTNO | DNAME |
+--------+-----------+
| 440 | 董事會 |
| 330 | 財務(wù)部 |
+--------+-----------+
2 rows in set (0.01 sec)
(2)不加NOVALIDATE創(chuàng)建約束測試
ORACLE:
SQL> ALTER TABLE emp ADD CONSTRAINT "FK_EMP" FOREIGN KEY (DEPNO) REFERENCES depth (DEPTNO);
Table altered.
SQL> select constraint_name,constraint_type,status,validated from user_constraints where constraint_name=FK_EMP;
CONSTRAINT_NAME C STATUS VALIDATED
------------------------------ - -------- -------------
FK_EMP R ENABLED VALIDATED
OB:
obclient> ALTER TABLE emp ADD CONSTRAINT "FK_EMP" FOREIGN KEY (DEPNO) REFERENCES depth (DEPTNO);
Query OK, 0 rows affected (0.25 sec)
obclient> select constraint_name,constraint_type,status,validated from user_constraints where constraint_name=FK_EMP;
+-----------------+-----------------+--------+-----------+
| CONSTRAINT_NAME | CONSTRAINT_TYPE | STATUS | VALIDATED |
+-----------------+-----------------+--------+-----------+
| FK_EMP | R | NULL | NULL |
+-----------------+-----------------+--------+-----------+
1 row in set (0.02 sec)
可以看到不加NOVALIDATE在oracle和OB端都是可以正常創(chuàng)建外鍵約束的
(3)外鍵約束功能測試
不符合約束條件數(shù)據(jù)插入:
oracle:
SQL> insert into emp values (1004,松風(fēng)閣,550);
insert into emp values (1004,松風(fēng)閣,550)
*
ERROR at line 1:
ORA-02291: integrity constraint (ZY_TEST.FK_EMP) violated - parent key not found
ob:
obclient> insert into emp values (1004,松風(fēng)閣,550);
ORA-02291: integrity constraint violated - parent key not found
符合約束條件數(shù)據(jù)插入:
oracle:
SQL> insert into depth values (550,業(yè)務(wù)部);
1 row created.
SQL> insert into emp values (1004,松風(fēng)閣,550);
1 row created.
ob:
obclient> insert into depth values (550,業(yè)務(wù)部);
Query OK, 1 row affected (0.01 sec)
obclient> insert into emp values (1004,松風(fēng)閣,550);
Query OK, 1 row affected (0.01 sec)
經(jīng)過插入數(shù)據(jù)測試,可以看到外鍵約束功能是正常的
(4) NOVALIDATE創(chuàng)建約束測試
oracle:
SQL> ALTER TABLE emp DROP CONSTRAINT "FK_EMP" ;
Table altered.
ob:
obclient> ALTER TABLE emp DROP CONSTRAINT "FK_EMP" ;
Query OK, 0 rows affected (0.14 sec)
oracle:
SQL> ALTER TABLE DEPTH ADD CONSTRAINT "FK_DEPTH" FOREIGN KEY (deptno) REFERENCES EMP (empno) NOVALIDATE;
Table altered.
ob:
obclient> ALTER TABLE DEPTH ADD CONSTRAINT "FK_DEPTH" FOREIGN KEY (deptno) REFERENCES EMP (empno) NOVALIDATE;
ORA-00900: You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near NOVALIDATE at line 1
加上NOVALIDATE條件之后在oracle可以正常創(chuàng)建外鍵約束,在OB端會報錯
分析總結(jié)
OB國產(chǎn)化數(shù)據(jù)庫還未大規(guī)模商業(yè)化,本身產(chǎn)品也處于不斷的發(fā)展和完善階段,隨著OB產(chǎn)品版本的快速迭代,官網(wǎng)文檔的更新也會有些滯后,所以我們在熟悉OB產(chǎn)品過程中不僅要學(xué)習(xí)文檔中的知識,更要多去實踐,驗證。現(xiàn)在網(wǎng)上公開資料很少,需要我們在實踐過程中學(xué)會總結(jié)經(jīng)驗和知識積累,完善自己的知識庫。
在工作過程中,因為OB屬于新數(shù)據(jù)庫,我們本身固有的經(jīng)驗也不一定完全適用OB的知識體系,所以要不斷更新自己的知識儲備與理解,這次的分享到此結(jié)束,希望這次的分享能幫助到大家。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/130050.html
摘要:采用一套固化的認知來建立生產(chǎn)環(huán)境準(zhǔn)備的應(yīng)用。我們采用一套關(guān)于固化平臺和第三包依賴庫的認知,以至于你可以通過最小的煩惱來啟動。大多數(shù)的應(yīng)用程序只需要非常少的配置。 1 Spring Boot官網(wǎng)[2.1.5 CURRENT GA] 1.1 Pivotal Wiki Pivotal Software, Inc. is a software and services company base...
摘要:原理分析的核心就是通過觀察某一個變量,當(dāng)該變量產(chǎn)生變化時,對應(yīng)的內(nèi)的回調(diào)函數(shù)就會發(fā)生變化。回調(diào)函數(shù)若依賴外部環(huán)境,則無法進行收集很好理解,的回調(diào)函數(shù)在預(yù)執(zhí)行的時候無法到達那一行代碼,所以收集不到。 Mobx解決的問題 傳統(tǒng)React使用的數(shù)據(jù)管理庫為Redux。Redux要解決的問題是統(tǒng)一數(shù)據(jù)流,數(shù)據(jù)流完全可控并可追蹤。要實現(xiàn)該目標(biāo),便需要進行相關(guān)的約束。Redux由此引出了dispa...
摘要:寫文章不容易,點個贊唄兄弟專注源碼分享,文章分為白話版和源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于版本如果你覺得排版難看,請點擊下面鏈接或者拉到下面關(guān)注公眾號也可以吧原理依賴收集源碼版之引用數(shù)據(jù)類型上 寫文章不容易,點個贊唄兄弟專注 Vue 源碼分享,文章分為白話版和 源碼版,白話版助于理解工作原理,源碼版助于了解內(nèi)部詳情,讓我們一起學(xué)習(xí)吧研究基于...
摘要:響應(yīng)式原理為了探究這一切的原因,我再次點開了的官網(wǎng)。在官網(wǎng)很下面的位置,找到了關(guān)于響應(yīng)式原理的說明。因此,新添加到數(shù)組中的對象中的屬性,就成了非響應(yīng)式的屬性了,改變它自然不會讓組件重新渲染。響應(yīng)式屬性的對象,有這個對象就代表是響應(yīng)式的。 ??最近在用Vue開發(fā)一個后臺管理的demo,有一個非常常規(guī)的需求。然而這個常規(guī)的需求中,包含了大量的知識點。有一個產(chǎn)品表格,用來顯示不同產(chǎn)品的信息。...
摘要:如果說要使用數(shù)據(jù)校驗,我十分相信小伙伴們都能夠使用,但估計大都是有個前提的環(huán)境。具體使用可參考小家讓支持對平鋪參數(shù)執(zhí)行數(shù)據(jù)校驗?zāi)J使用只能對進行校驗級聯(lián)校驗什么叫級聯(lián)校驗,其實就是帶校驗的成員里存在級聯(lián)對象時,也要對它完成校驗。 每篇一句 NBA里有兩大笑話:一是科比沒天賦,二是詹姆斯沒技術(shù) 相關(guān)閱讀 【小家Java】深入了解數(shù)據(jù)校驗:Java Bean Validation 2.0(...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20