导航:首页 > 数据处理 > oracle中什么是数据发散

oracle中什么是数据发散

发布时间:2023-09-17 15:01:32

① 发散的定义是什么

发散定义:指光线等由一点向四周散开。

发散读音: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

阅读全文

与oracle中什么是数据发散相关的资料

热点内容
如何走进场外交易市场 浏览:830
金十数据官网是哪个省 浏览:287
交易猫号主改密码了怎么办 浏览:515
本地民事代理怎么处理 浏览:245
为什么花生代理老是断连接 浏览:353
欧弗兰怎么代理 浏览:786
如何规范数据信息被非法获取 浏览:309
新家具收购哪个市场好 浏览:13
菏泽什么地方有旧货市场 浏览:116
云技术公司怎么做 浏览:333
山东市场怎么开发 浏览:951
江苏扬州对口高考技术占多少分 浏览:603
如何制造情怀产品 浏览:904
委托加盟代理怎么做 浏览:342
智慧消防合作代理怎么办 浏览:615
余额宝为什么没有类似产品储存 浏览:449
什么是月份信息 浏览:919
技术保障是如何保障生产的 浏览:724
制作直方图数据要多少 浏览:678
大数据需要什么学科 浏览:442