① 發散的定義是什麼
發散定義:指光線等由一點向四周散開。
發散讀音:fāsàn。
發散出處:晉成公綏《嘯賦》:「乃吟詠而發散,聲駱驛而響連。」
發散例句
1、厚透鏡的會聚性和發散性與其厚度有何關系?
2、上面這幅拼畫突出了電離氫氣那強烈發散的特異的紅光,令我們能看到那細細的絲絲縷縷的氣體。
3、在不連續的、發散的反射同相軸或不相乾的數據區域,畫一個假想層可以幫助解釋員作出更合適的解釋。
② Oracle中的cluster是什麼意思,它有什麼作用
大家對通常oracle中的cluster的理解是不準確的,經常和sql server中的cluster index混淆。Cluster是存儲一組table的一種方法,這些table共享同一數據塊中的某些相同column,並把不同table在這一共享column上值相同的data row存儲到同一block上。在sql server中的cluster index強制行根據index key按存儲順序存儲,這一點和oracle中的IOT類似。
從下圖中我們可以清楚的看到cluster 和非cluster 的一組table的物理存儲的區別。在cluster中,單個block上的數據可能來自多個table,概念上可以存儲「預連接」的數據。單個table也可以使用cluster,即根據某些column按組存儲數據。如圖中,所有部門ID為 20和 110的部門信息和員工信息的數據都將存儲在同一block。注意,這里存儲的並不是排序的數據(那是IOT的任務),存儲的是按部門ID分組集合的數據,是以heap的方式存儲的。因此,部門20剛好和部門110相鄰,而部門99和部門100相距很遠(硬碟的物理位置)。
當單個block放不下時,額外的block將鏈接到最初的block,來包容溢出的數據,這種方式和在IOT中溢出block非常相似。
現在我們看看如何創建一個cluster。在cluster中創建一系列table是很簡單的,對象存儲定義如PCTFREE,PCTUSED,INITIAL都是和cluster相關的,而不是和table相關。這是因為在cluster中存儲了若干table,每個table在同一個block中擁有不同的PCTFREE沒有意義。
SQL> create cluster e_d_cluster
2 (deptid number(2))
3 size 1024
4 /
Cluster created
這里首先創建了一個index cluster。這個cluster的key為 deptid,在table中這個列可以不命名為deptid,但數據類型number(2)必須匹配。Size選項是用來告訴oracle預計有1024
位元組數據和每個cluser key相關。Oracle將使用這個信息來計算每個block能容納的最大cluster key數目。因此size太高,在每一block將得到很少的key,並且將使用比需要的更多的空間;設置容量太低,將得到過多的數據連接,這將偏離使用cluster的目的。Size是cluster的重要參數。
現在我們來創建cluster index。在把數據放入之前,需要索引cluster。Cluster index的作用是存儲一個cluster key,並且返回包含該key的block的地址。
SQL> create index e_d_cluster_idx
2 on cluster e_d_cluster
3 /
Index created
Cluster key 的index可以使用index所有的正常的存儲參數,並且可以位於另一個tablespace。它是一個正常的index,能夠索引到一個cluster,並且也包含一個完全null的條目。
我們在cluster中創建table:
SQL> create table department
2 (deptid number(2) primary key,
3 dname varchar2(14),
4 loc varchar2(13))
5 cluster e_d_cluster(deptid);
Table created
SQL> create table employee
2 (empid number primary key,
3 ename varchar2(10),
4 job varchar2(10),
5 mgr number,
6 hiredate date,
7 sal number,
8 comm number,
9 deptid number(2) references department(deptid))
10 cluster e_d_cluster(deptid);
Table created
這里創建table與普通的table唯一的區別就是使用了cluster關鍵字,我們往table中裝載數據:
SQL> begin
2 for x in(select * from scott.dept)
3 loop
4 insert into department
5 values(x.deptno,x.dname,x.loc);
6 insert into employee
7 select * from scott.emp
8 where deptno = x.deptno;
9 end loop;
10 end;
11 /
PL/SQL procere successfully completed
我們可以看到目前table中裝載了如下數據:
SQL> select * from department;
DEPTID DNAME LOC
------ -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
SQL> select * from employee;
EMPID ENAME JOB MGR HIREDATE SAL COMM DEPTID
---------- ---------- ---------- ---------- ----------- ---------- ---------- ------
7782 CLARK MANAGER 7839 1981-6-9 2450 10
7839 KING PRESIDENT 1981-11-17 5000 10
7934 MILLER CLERK 7782 1982-1-23 1300 10
7369 SMITH CLERK 7902 1980-12-17 800 20
7566 JONES MANAGER 7839 1981-4-2 2975 20
7788 SCOTT ANALYST 7566 1982-12-9 3000 20
7876 ADAMS CLERK 7788 1983-1-12 1100 20
7902 FORD ANALYST 7566 1981-12-3 3000 20
7499 ALLEN SALESMAN 7698 1981-2-20 1600 300 30
7521 WARD SALESMAN 7698 1981-2-22 1250 500 30
7654 MARTIN SALESMAN 7698 1981-9-28 1250 1400 30
7698 BLAKE MANAGER 7839 1981-5-1 2850 30
7844 TURNER SALESMAN 7698 1981-9-8 1500 0 30
7900 JAMES CLERK 7698 1981-12-3 950 30
現在我們看看這兩個table數據存儲的位置:
SQL> select dbms_rowid.rowid_block_number(department.rowid) dept_rid,
2 dbms_rowid.rowid_block_number(employee.rowid) emp_rid,department.deptid
3 from department,employee
4 where employee.deptid = department.deptid;
DEPT_RID EMP_RID DEPTID
---------- ---------- ------
5587 5587 10
5587 5587 10
5587 5587 10
5587 5587 20
5587 5587 20
5587 5587 20
5587 5587 20
5587 5587 20
5587 5587 30
5587 5587 30
5587 5587 30
5587 5587 30
5587 5587 30
5587 5587 30
可以看到部門ID相同的數據存儲在一個block上。我們為什麼推薦上述方法對cluster進行最初的裝載呢?這樣能夠保證如果有些cluster key的相關數據超過了size,仍能使大部分數據聚集在一個block上。這只適用於最初的數據裝載,在這以後,可以使用事務對cluster中的table insert數據。
由於cluster中的特殊的數據存儲方式,出現了這樣一個問題,rowid出現了重復,現在rowid只能在一個table中唯一標識一行數據了(另一種rowid重復出現在transport tablespace的操作後)。
SQL> select rowid from department
2 intersect
3 select rowid from employee;
ROWID
------------------
AAAGWQAADAAABXTAAA
AAAGWQAADAAABXTAAB
AAAGWQAADAAABXTAAC
AAAGWQAADAAABXTAAD