Oracle中Cluster Table的使用

CRM与进销存怎么选?企业数字化系统顺序与一体化适配指南 客户关系管理(CRM)与进销存是企业数字化链路中的两大核心系统,前者围绕客户生命周期沉淀商机,后者负责商品、库存与资金流转。在业务实践中,这两类数据并非孤立存在,销售报价依赖库存余量,客户成交即生成订单,最终形成应收款项,只有打通业务口径才能实现从线索到回款的全流程追踪。然而,不同规模的企业在选型时需要考量数据入口、部署形态、行业属性和扩展成本等关键维度。对于中小企业而言,一体化套件或API集成比追求全套通吃更为务实;对有多门店或仓储批发场景的企业,则需重点关注串号管理、多单位换算与权限体系。本文从基础概念 阅读详情

大家对通常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 procedure 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

 

我们还发现,重复的rowid的数量和主表中的记录数一样,即和cluster中的记录数一样。我们把这个blick dump出来,看看是什么原因:

 

SQL> alter system dump datafile 3 block 5587;

 

System altered

 

 

Dump file D:/database/oracle/admin/ora817/udump/ORA02628.TRC
Wed Dec 31 12:31:10 2003
ORACLE V8.1.7.4.1 - Production vsnsta=0
vsnsql=f vsnxtr=3
Windows 2000 Version 5.0 Service Pack 4, CPU type 586
Oracle8i Enterprise Edition Release 8.1.7.4.1 - Production
With the Partitioning option
JServer Release 8.1.7.4.1 - Production
Windows 2000 Version 5.0 Service Pack 4, CPU type 586
Instance name: ora817

 

Redo thread mounted by this instance: 1

 

Oracle process number: 17

 

Windows thread id: 2628, image: ORACLE.EXE

 


*** SESSION ID:(17.1471) 2003-12-31 12:31:10.159
Start dump data blocks tsn: 2 file#: 3 minblk 4275 maxblk 4275
buffer tsn: 2 rdba: 0x00c010b3 (3/4275)
scn: 0x0000.00142980 seq: 0x01 flg: 0x02 tail: 0x29800601
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
 
Block header dump:  0x00c010b3
 Object id on Block? Y
 seg/obj: 0x657d  csc: 0x00.14297c  itc: 2  flg: O  typ: 1 - DATA
     fsl: 0  fnx: 0x0 ver: 0x01
 
 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   xid:  0x0003.029.000002d2    uba: 0x00800466.006e.35 
C---    0  scn 0x0000.0014297c   ---1.这两个transaction的flag 和lck是什么意思?
0x02   xid:  0x0003.023.000002d2    uba: 0x00800467.006e.37  --U-   18  fsc 0x0000.00142980   
 
data_block_dump
===============
tsiz: 0x1fa0
hsiz: 0x46
pbl: 0x11ab745c
bdba: 0x00c010b3
flag=------K----
ntab=3                           
--这是代表5587的block上有3个table            

                             (e_d_cluster,department,employee)

nrow=22
frre=-1
fsbo=0x46
fseo=0x1ce3
avsp=0x1c9d
tosp=0x1c9d
0xe:pti[0] nrow=4 offs=0              --这是3个table的行数及开始的偏移量

0x12:pti[1] nrow=4 offs=4
0x16:pti[2] nrow=14 offs=8
0x1a:pri[0] offs=0x1f8a              
0x1c:pri[1] offs=0x1eef
0x1e:pri[2] offs=0x1e10
0x20:pri[3] offs=0x1cf9
0x22:pri[4] offs=0x1f72
0x24:pri[5] offs=0x1edb
0x26:pri[6] offs=0x1dfe
0x28:pri[7] offs=0x1ce3
0x2a:pri[8] offs=0x1f4c
0x2c:pri[9] offs=0x1f29
0x2e:pri[10] offs=0x1f05
0x30:pri[11] offs=0x1eb8
0x32:pri[12] offs=0x1e92
0x34:pri[13] offs=0x1e6d
0x36:pri[14] offs=0x1e4a
0x38:pri[15] offs=0x1e26
0x3a:pri[16] offs=0x1dd5
0x3c:pri[17] offs=0x1dac
0x3e:pri[18] offs=0x1d81
0x40:pri[19] offs=0x1d5b
0x42:pri[20] offs=0x1d32
0x44:pri[21] offs=0x1d0f
block_row_dump:
tab 0, row 0, @0x1f8a                                         --从这开始是
emp_dept_cluster
tl: 22 fb: K-H-FL-- lb: 0x0 cc: 1
curc: 4 comc: 4 pk: 0x00c010b3.0 nk: 0x00c010b3.0
col  0: [ 2]  c1 0b
tab 0, row 1, @0x1eef
tl: 22 fb: K-H-FL-- lb: 0x0 cc: 1
curc: 6 comc: 6 pk: 0x00c010b3.1 nk: 0x00c010b3.1
col  0: [ 2]  c1 15
tab 0, row 2, @0x1e10
tl: 22 fb: K-H-FL-- lb: 0x0 cc: 1
curc: 7 comc: 7 pk: 0x00c010b3.2 nk: 0x00c010b3.2
col  0: [ 2]  c1 1f
tab 0, row 3, @0x1cf9
tl: 22 fb: K-H-FL-- lb: 0x0 cc: 1
curc: 1 comc: 1 pk: 0x00c010b3.3 nk: 0x00c010b3.3
col  0: [ 2]  c1 29
tab 1, row 0, @0x1f72                                         --从这开始是
department
tl: 24 fb: -CH-FL-- lb: 0x2 cc: 2 cki: 0
col  0: [10]  41 43 43 4f 55 4e 54 49 4e 47
col  1: [ 8]  4e 45 57 20 59 4f 52 4b
tab 1, row 1, @0x1edb
tl: 20 fb: -CH-FL-- lb: 0x2 cc: 2 cki: 1
col  0: [ 8]  52 45 53 45 41 52 43 48
col  1: [ 6]  44 41 4c 4c 41 53
tab 1, row 2, @0x1dfe
tl: 18 fb: -CH-FL-- lb: 0x2 cc: 2 cki: 2
col  0: [ 5]  53 41 4c 45 53
col  1: [ 7]  43 48 49 43 41 47 4f
tab 1, row 3, @0x1ce3
tl: 22 fb: -CH-FL-- lb: 0x2 cc: 2 cki: 3
col  0: [10]  4f 50 45 52 41 54 49 4f 4e 53
col  1: [ 6]  42 4f 53 54 4f 4e
tab 2, row 0, @0x1f4c                                  --2从这开始是employee,因为department和           

                                          employee都从row 0开始,所以rowid会出现重复

                                       tl: 38 fb: -CH-FL-- lb: 0x2 cc: 6 cki: 0                  --3.这为什么有tran的信息?

 col  0: [ 3]  c2 4e 53
col  1: [ 5]  43 4c 41 52 4b
col  2: [ 7]  4d 41 4e 41 47 45 52
col  3: [ 3]  c2 4f 28
col  4: [ 7]  77 b5 06 09 01 01 01
col  5: [ 3]  c2 19 33
tab 2, row 1, @0x1f29
tl: 35 fb: -CH-FL-- lb: 0x2 cc: 6 cki: 0
col  0: [ 3]  c2 4f 28
col  1: [ 4]  4b 49 4e 47
col  2: [ 9]  50 52 45 53 49 44 45 4e 54
col  3: *NULL*
col  4: [ 7]  77 b5 0b 11 01 01 01
col  5: [ 2]  c2 33
tab 2, row 2, @0x1f05
tl: 36 fb: -CH-FL-- lb: 0x2 cc: 6 cki: 0
col  0: [ 3]  c2 50 23
col  1: [ 6]  4d 49 4c 4c 45 52
col  2: [ 5]  43 4c 45 52 4b
col  3: [ 3]  c2 4e 53
col  4: [ 7]  77 b6 01 17 01 01 01
col  5: [ 2]  c2 0e
tab 2, row 3, @0x1eb8
tl: 35 fb: -CH-FL-- lb: 0x2 cc: 6 cki: 1
col  0: [ 3]  c2 4a 46
col  1: [ 5]  53 4d 49 54 48
col  2: [ 5]  43 4c 45 52 4b
col  3: [ 3]  c2 50 03
col  4: [ 7]  77 b4 0c 11 01 01 01
col  5: [ 2]  c2 09
tab 2, row 4, @0x1e92
tl: 38 fb: -CH-FL-- lb: 0x2 cc: 6 cki: 1
col  0: [ 3]  c2 4c 43
col  1: [ 5]  4a 4f 4e 45 53
col  2: [ 7]  4d 41 4e 41 47 45 52
col  3: [ 3]  c2 4f 28
col  4: [ 7]  77 b5 04 02 01 01 01
col  5: [ 3]  c2 1e 4c
tab 2, row 5, @0x1e6d
tl: 37 fb: -CH-FL-- lb: 0x2 cc: 6 cki: 1
col  0: [ 3]  c2 4e 59
col  1: [ 5]  53 43 4f 54 54
col  2: [ 7]  41 4e 41 4c 59 53 54
col  3: [ 3]  c2 4c 43
col  4: [ 7]  77 b6 0c 09 01 01 01
col  5: [ 2]  c2 1f
tab 2, row 6, @0x1e4a
tl: 35 fb: -CH-FL-- lb: 0x2 cc: 6 cki: 1
col  0: [ 3]  c2 4f 4d
col  1: [ 5]  41 44 41 4d 53
col  2: [ 5]  43 4c 45 52 4b
col  3: [ 3]  c2 4e 59
col  4: [ 7]  77 b7 01 0c 01 01 01
col  5: [ 2]  c2 0c
tab 2, row 7, @0x1e26
tl: 36 fb: -CH-FL-- lb: 0x2 cc: 6 cki: 1
col  0: [ 3]  c2 50 03                                      

col  1: [ 4]  46 4f 52 44
col  2: [ 7]  41 4e 41 4c 59 53 54
col  3: [ 3]  c2 4c 43
col  4: [ 7]  77 b5 0c 03 01 01 01
col  5: [ 2]  c2 1f
tab 2, row 8, @0x1dd5
tl: 41 fb: -CH-FL-- lb: 0x2 cc: 7 cki: 2
col  0: [ 3]  c2 4b 64                                     
col  1: [ 5]  41 4c 4c 45 4e
col  2: [ 8]  53 41 4c 45 53 4d 41 4e
col  3: [ 3]  c2 4d 63
col  4: [ 7]  77 b5 02 14 01 01 01
col  5: [ 2]  c2 11
col  6: [ 2]  c2 04
tab 2, row 9, @0x1dac
tl: 41 fb: -CH-FL-- lb: 0x2 cc: 7 cki: 2
col  0: [ 3]  c2 4c 16
col  1: [ 4]  57 41 52 44
col  2: [ 8]  53 41 4c 45 53 4d 41 4e
col  3: [ 3]  c2 4d 63
col  4: [ 7]  77 b5 02 16 01 01 01
col  5: [ 3]  c2 0d 33
col  6: [ 2]  c2 06
tab 2, row 10, @0x1d81
tl: 43 fb: -CH-FL-- lb: 0x2 cc: 7 cki: 2
col  0: [ 3]  c2 4d 37
col  1: [ 6]  4d 41 52 54 49 4e
col  2: [ 8]  53 41 4c 45 53 4d 41 4e
col  3: [ 3]  c2 4d 63
col  4: [ 7]  77 b5 09 1c 01 01 01
col  5: [ 3]  c2 0d 33
col  6: [ 2]  c2 0f
tab 2, row 11, @0x1d5b
tl: 38 fb: -CH-FL-- lb: 0x2 cc: 6 cki: 2
col  0: [ 3]  c2 4d 63
col  1: [ 5]  42 4c 41 4b 45
col  2: [ 7]  4d 41 4e 41 47 45 52
col  3: [ 3]  c2 4f 28
col  4: [ 7]  77 b5 05 01 01 01 01
col  5: [ 3]  c2 1d 33
tab 2, row 12, @0x1d32
tl: 41 fb: -CH-FL-- lb: 0x2 cc: 7 cki: 2
col  0: [ 3]  c2 4f 2d
col  1: [ 6]  54 55 52 4e 45 52
col  2: [ 8]  53 41 4c 45 53 4d 41 4e
col  3: [ 3]  c2 4d 63
col  4: [ 7]  77 b5 09 08 01 01 01
col  5: [ 2]  c2 10
col  6: [ 1]  80
tab 2, row 13, @0x1d0f
tl: 35 fb: -CH-FL-- lb: 0x2 cc: 6 cki: 2
col  0: [ 2]  c2 50
col  1: [ 5]  4a 41 4d 45 53
col  2: [ 5]  43 4c 45 52 4b
col  3: [ 3]  c2 4d 63
col  4: [ 7]  77 b5 0c 03 01 01 01
col  5: [ 3]  c2 0a 33
end_of_block_dump
End dump data blocks tsn: 2 file#: 3 minblk 5587 maxblk 5587

 

现在我们来说明这个block中的几个问题:

 

1.这两个transaction的flag 和lck是什么意思?

这里是block的ITL的信息,这里初始有两个事务,事务槽在block有空间时是可以扩展的。

falg  ------ 依次4个位置是   CBUT
 C 
表示该 ITL 事务已经提交

B: 当读到这个ITL 的时候该block需要 rollback (一致读)导致ITL 来自 rollback segment,也就是说该ITL事务被提交过多次了需要追述到最早的部分
U  
表示该ITL 事务已经提交,但是提交的SCN是oracle 在数据有效性的基础上“猜”出来的,可能并不是真实的 commit  scn ,这个SCN就是 scn/fsc  . 
T : 
事务提交后ITL涉及到的数据行上的 lock信息也就是 lb ,在下次dml操作到该块数据的时候,lb 会清零,表示清除lock(当然即使没有清除该ITL若已经提交也认为锁不存在),在这个清理的过程中相应flag位置会设置为 T。

lck  表示该 itl 在该block上影响到的行数

2.为什么rowid会出现重复?

   我们想知道rowid为什么会重复,首先要明白rowid的含义。ROWID 在磁盘上需要10 个字节的存储空间并使用18 个字符来显示它包含下列组件

¨         数据对象编号每个数据对象如表或索引在创建时都分配有此编号,并且此编号在数据库中是唯一的;

¨         相关文件编号此编号对于一个表空间中的每个文件是唯一的;

¨         块编号表示包含此行的块在文件中的位置;

¨         行编号标识块头中行目录位置的位置;

在内部数据对象编号需要32 位,相关文件编号需要10 位,块编号需要22,位行编号需要16 位,加起来总共是80 位或10 个字节,ROWID 使用以64 为基数的编码方案来显示该方案将六个位置用于数据对象,编号三个位置用于相关文件编号六个位置用于块编号三个位置用于行编号以64 为基数的编码方案使用字符A-Z a-z 0-9 + 和/共64 个字符如下例所示

AAAGWQ AAD AAABXT AAA

在本例中

AAAGWQ 是数据对象编号

AAD    是相关文件编号

AAABXT 是块编号

AAA    是行编号

在block 5587中delparment和employee中行编号都是从0开始,文件编号和块编号相同,我们再来看一下数据对象编号:

SQL> select OBJECT_NAME,OBJECT_ID ,DATA_OBJECT_ID from user_objects

  2  where OBJECT_NAME in ('DEPARTMENT','EMPLOYEE','E_D_CLUSTER');

 

OBJECT_NAME               OBJECT_ID        DATA_OBJECT_ID

-------------------------------------------------------------------------------- ----------

E_D_CLUSTER               26000             26000

EMPLOYEE                  26004             26000

DEPARTMENT                26002             26000

从这里能看出对象编号虽然不一样,但在一个cluster中数据对象编号是一样的。既然构成rowid的组件都是一样的,那么rowid自然是相同的。

 

3..这为什么有tran的信息?

tl: 38 fb: -CH-FL-- lb: 0x2 cc: 6 cki: 0

lb: 0x2 表示改行上有事务0x02,这就是oracle的行锁,如果该行上没有事务, lb: 0x0,即没有锁。但这行数据是否有锁还倚赖于该事务是不是活动的,这里虽然lb: 0x2 ,但我们在ITL中可以看到事务0x02状态为--U-,表示事务已经提交,即非活动事务,所以这行数据上并没有锁。

 

 
Oracle中聚簇表Cluster Table使用图文详解 大家通常oracle中的cluster的理解是不准确的,经常和sql server中的cluster index混淆。Cluster是存储一组table的一种方法,这些table共享同一数据块中的某些相同column,并把不同table在这一共享column上值相同的data row存储到同一block上。在sql server中的cluster index强制行根据index key按存储顺序存储,这一点和oracle中的IOT类似。 立即下载

相关推荐

AIStarter避坑指南:Wan2.2 Animate整合包从下载到出片的完整流程(附常见错误修复)

本文提供了Wan2.2 Animate整合包从下载部署到生成高清视频的完整避坑指南。详细解析了通过AIStarter启动、环境配置、核心参数调优以及七大常见错误(如CUDA内存不足、节点缺失、视频模糊等)的根因与修复方案,帮助用户高效利用ComfyUI工作流,稳定生成720P高质量AI动画视频。

weixin_29052717的博客 703

Oracle Clustered Table

本文主要介绍Oracle Clustered Table。Oracle集群表分为B*树索引集群表(B* tree index clustered table)和散列集群表(hash-clustered table) 一.群(cluster)简介 群为Oracle中的段,他完成两件事: u通过公共键物理的将数据保存在一起。数据不排序;只是通过键物理的存储在一...

weixin_34068198的博客 184

超酷炫,Python实现交通数据可视化!

此时输出的栅格化参数params的内容存储了栅格坐标系的原点坐标(slon、slat)、单个栅格的经纬度长宽 (deltalon、deltalat)、栅格的旋转角度(theta)、栅格的形状(method参数,其值可以是方形rect、三角形tri和六边形hexa)以及栅格的大小(gridsize参数,单位为米)。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。今天分享一次Python交通数据分析与可视化的实战!

m0_59236127的博客 1696

Oracle Cluster Table(原创)

Overview of Table Clusters A table cluster is a group of tables that share common columns and store related data in the same blocks. When tables are clustered, a single data block can contain rows ...

czmmiao的专栏 794

深入解析TI C2000 ePWM模块:峰值电流模式Buck与LLC谐振变换器实战配置

脉宽调制(PWM)技术是电力电子与数字电源控制的核心,它通过调节开关信号的占空比或频率,实现对功率变换器输出电压、电流的精确控制。其基本原理是利用微控制器内部的定时器和比较器,生成具有特定时序的方波信号,驱动功率开关器件。这项技术的核心价值在于将复杂的模拟控制环路数字化,从而提升系统的可控性、灵活性和可靠性。在电机驱动、不间断电源(UPS)、服务器电源和新能源逆变器等广泛应用场景中,PWM技术都是实现高效能量转换的基石。本文聚焦于德州仪器(TI)C2000系列微控制器中功能强大的增强型PWM(ePWM)模块

weixin_30410119的博客 341

本地部署llama3Chinese

这通常意味着你的构建环境可能不完整或者没有正确配置。通常是由 Visual Studio 的 C++ 工具提供的。(大模型对错误的解析)错误信息表明在尝试构建一个项目时,在 Windows 上,

m0_49343639的博客 1432

oracle 数据库聚簇表(cluster) 之二 hash cluster

os: centos 7.4 db: oracle 11.2.0.4 oracle数据表三种基本类型:Heap Table、IOT、Cluster。名称分别为 堆表、索引组织表、聚簇表。 通常情况下,堆表是我们的首选项,也是 create table 时的默认选项。 IOT是一种融合数据到索引结构上的数据表类型(另外几篇blog 有介绍)。 聚簇表是最不常用的表类型,cluster 是一种独特的段...

一名数据库爱好者的专栏 1358

Zlib1.2.11源码编译(Win10+VS2019)

下载 下载网址: zlib Home Site 得到文件: 解压缩到“D:\SourceCodes\zlib-1.2.11” 使用CMake配置、生成并打开项目 将CMakeLists.txt拖入CMake,配置(Configure): 生成(Generate) 打开项目(Open Project),CMake调用VS2019打开项目 生成debug版本 构建项目ALL_BUILD。成功生成debug版本 在“D:\Sourc...

Alexabc3000的专栏 1892

Oracle簇表介绍 (clustered table)

簇表概述簇表(cluster) 是一种可以选的存储数据方式。簇表由1组拥有相同的列而且经常被一起使用的数据表构成,这组表在存储时会共享一部分Data Blocks, 例如,employees 和 departments表都包含department_id 这个列。 当用户将这两个表组合成1个簇表时,Oracle在物理上将employees 和 departments 两张表各行的department...

weixin_30950887的博客 477

Flink实战案例(十三):Flink DataStream 八大分区策略与自定义分区器

声明:本系列博客是根据SGG的视频整理而成,非常适合大家入门学习。 《2021年最新版大数据面试题全面开启更新》 分区策略决定了一条数据如何发送给下游。Flink中默认提供了八大分区策略(也叫分区器)。 本文基于Flink 1.9.0总结Flink DataStream中的八大分区策略以及手动实现一个自定义分区器。 八大分区策略继承关系图 ChannelSelector: 接口,决定将记录写入哪个Channel。有3个方法: void setup(int numberOfChannels):

微信搜:import_bigdata,大数据领域硬核原创作者 1122

别再写XPath改DOM了!用OpenClaw零代码搞定爬虫全流程(抓取+清洗+存储)

免费版的大模型调用次数有限制(每天100次),但企业版是无限的,还能私有化部署;大模型分析DOM结构有时候会慢1-2秒,但比起节省的时间,完全可以接受;自定义Skill的文档还不够完善,但社区很活跃,有问题在Discord里问,很快就能得到回复。但总的来说,OpenClaw真的改变了我写爬虫的方式——以前我是“代码的奴隶”,现在我是“需求的提出者”,把时间花在更有价值的业务逻辑上,而不是重复繁琐的DOM调试上。如果你也在被传统爬虫折磨,强烈建议你试试OpenClaw,相信我,用了就回不去了。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1313

Oracle 中如何手工提交Cluster Table的事务

环境中遇到了ora-00600 4000错误,涉及的对象即为cluster table,下面我这里简单模拟了一下。供参考! ++++创建测试表 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Roger的数据库专栏 1421

基于FPGA的AGC自适应增益控制系统开发

自动增益控制(AGC)是一种在接收信号过程中自动调整放大器增益的技术,以确保输出信号的幅度保持在一个恒定的水平。基于FPGA实现AGC系统具有高性能、低延迟和高度可配置的特点,广泛应用于无线通信、音频处理和雷达等领域。FPGA上的AGC系统提供了一种高效且灵活的方法来处理变化的信号环境。在实际应用中,通过合理的设计和优化,可以显著提高信号处理系统的鲁棒性和可靠性。

走向CTO的路上... 1694

Oracle中Cluster Table的使用(转)

大家对通常oracle中的cluster的理解是不准确的,经常和sql server中的cluster index混淆。Cluster是存储一组table的一种方法,这些table共享同一数据块中的某些相同column,并把不同table在这一共享column上值相同的data row存储到同一block上。在sql server中的cluster index强制行根据index key按存...

李永亮的博客 213

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Oracle Cluster table And Partition

簇表和分区表: Oracle 提供了很多种存储数据的表形式。比如Heap、cluster. 在项目中我们如何选则物理的存储结构: Ø  读取的行数存放的比较集中 Ø  SELECT or DML 语句 Ø  表达小 Ø  行大小和数据块大小 Ø  小事务或者大事务 Ø  SELECT 语句使用并行查询 何为簇表? 多个表的数据存放在同一个块之中。 比如一张emp和dept表...

iteye_10809的博客 253

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

oracle创建簇表,表簇简介(table cluster)

表簇(table cluster)一、什么是表簇?表簇就是一组具备公共列的表。通常,一个数据块只能存储一个表的记录,在表簇中,一个数据库块可以存储多个表的记录。表簇中表的公共列叫做簇键(cluster key),簇键的值叫做簇键值。由于簇键是多个表的公共列,所以一个簇键值只存储一次,不论簇键值在各表中出现多少次。存储结构:二、表簇优点(1)对于被聚簇表的联接,如上图所示,他们在存储时就已经‘预联结...

weixin_35890184的博客 1258

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

通过案例学调优之--Oracle Cluster Table

通过案例学调优之--Oracle Cluster TableAbout ClustersA cluster provides an optional method of storing table data. A cluster is made up of a group of tables that share the same data blocks. The tables are group

天涯客*Blog 1045

Cluster Tables

Cluster Tables 一、 Cluster table创建语法 1、Creating Clusters CREATE CLUSTER emp_de...

cqrw65623的博客 70

Oracle 如何提交手册Cluster Table事务

环境遇到ora-00600 4000错误,该目的是参与cluster table,什么我这里有以下简单的模拟。以供参考! ++++创建一个测试表 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ...

weixin_33817333的博客 127

oracle中cluster索引的创建,Oracle三种table: 堆表Heap Table、索引组织表IOT和聚簇表Cluster...

常用数据库支持情况:Oracle支持堆表,索引组织表,聚簇表Cluster;Postgresql只支持堆表,不支持索引组织表;Innodb只支持索引组织表;MyISAM只支持堆表。Oracle使用rowid数据类型存储行地址,rowid可以分成两种,分别适于不同的对象,Physical rowids:存储ordinary table,clustered table,table partition ...

weixin_39979948的博客 409

Oracle三种table: 堆表Heap Table、索引组织表IOT和聚簇表Cluster

http://m.blog.itpub.net/17203031/viewspace-774405      聊聊Oracle聚簇Cluster IOT:     create table t88(        ID varchar2 ( 10 ),        NAME varchar2 ( 20 ),        constraint pk_id primary

luke_wang的专栏 9525
上一篇: 64bit与32bit之间的exp/imp
下一篇: 关于oracle中Move机制的一点探讨
dlinger
博客等级 码龄24年 2粉丝 18原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值