Greenplum+Hadoop学习笔记-15-管理数据,hadoop-15-
7.管理数据
7.1.关于GP的并发控制
1) GP使用多版本控制模型(Mutltiversion Concurrency Control/MVCC)保持数据一致性;
可将MVCC看成行级别锁的一种妥协,它在许多情况下避免了使用锁,同时可以提供更小的开销。根据实现的不同,它可以允许非阻塞式读,在写操作进行时只锁定必要的记录。MVCC会保存某个时间点上的数据快照。这意味着事务可以看到一个一致的数据视图,不管他们需要跑多久。这同时也意味着不同的事务在同一个时间点看到的同一个表的数据可能是不同的。如果你从来没有过种体验的话,可能理解起来比较抽象,但是随着慢慢地熟悉这种理解将会很容易。
2) MVCC以避免给数据库事务显式锁定的方式,最大化减少锁争用以确保多用户环境下的性能;
3) GP提供了各种锁机制来控制对表数据的并发访问;
4) GP为每个事务提供事务隔离;
5) GP的锁模式:
|
锁模式 |
相关SQL命令 |
冲突的锁 |
|
ACCESS SHARE |
SELECT |
ACCESS EXCLUSIVE |
|
ROW SHARE |
SELECT FOR UPDATE, SELECT FOR SHARE |
EXCLUSIVE, ACCESS EXCLUSIVE |
|
ROW EXCLUSIVE |
INSERT, COPY |
SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE |
|
SHARE UPDATE EXCLUSIVE |
VACUUM (without FULL), ANALYZE |
SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE |
|
SHARE |
CREATE INDEX |
ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE |
|
SHARE ROW EXCLUSIVE |
ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE |
|
|
EXCLUSIVE |
DELETE, UPDATE |
ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE |
|
ACCESS EXCLUSIVE |
ALTER TABLE, DROP TABLE, TRUNCATE, REINDEX, CLUSTER, VACUUM FULL |
ACCESS SHARE, ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE |
7.2.插入新纪录
1) 需要表名和该表每列的值使用INSERT命令插入数据,GP是自动提交;
2) 显式的指定列名插入数据,当不知道当前表中列名时;
3) 从另一个表中获取并插入到当前表;
4) 使用一个命令插入多条记录,AO表为批量装载做了优化,不建议在AO表上使用单条的INSERT语句。
|
devdw=# \h insert 查看当前insert命令的帮助 Command: INSERT Description: create new rows in a table Syntax: INSERT INTO table [ ( column [, ...] ) ] { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query } [ RETURNING * | output_expression [ AS output_name ] [, ...] ]
devdw=# \d tb_cp_02 Table "public.tb_cp_02" Column | Type | Modifiers --------+--------------+----------- id | integer | rank | integer | year | integer | gender | character(1) | count | integer | Indexes: "bmidx_01" bitmap (count) Number of child tables: 5 (Use \d+ to list them.) Distributed by: (id)
devdw=# insert into tb_cp_02(id,rank,year,gender,count) values (1,2,3,'M',4); 往tb_cp_02表中逐个字段的添加数据 INSERT 0 1
devdw=# select * from tb_cp_02; 查看当前tb_cp_02表中数据 id | rank | year | gender | count ----+------+------+--------+------- 1 | 2 | 3 | M | 4 (1 row)
devdw=# insert into tb_cp_02(rank,year,gender,count,id) values (3,4,'W',5,2); 往tb_cp_02表中随机字段的添加数据 INSERT 0 1 devdw=# select * from tb_cp_02; id | rank | year | gender | count ----+------+------+--------+------- 1 | 2 | 3 | M | 4 2 | 3 | 4 | W | 5 (2 rows) devdw=# insert into tb_cp_02 select * from tb_cp_02; 通过查询tb_cp_02表中数据后再往其中插入数据 INSERT 0 2 devdw=# select * from tb_cp_02; id | rank | year | gender | count ----+------+------+--------+------- 1 | 2 | 3 | M | 4 1 | 2 | 3 | M | 4 2 | 3 | 4 | W | 5 2 | 3 | 4 | W | 5 (4 rows) |
7.3.更新记录
|
Command: UPDATE 查看update的帮助 Description: update rows of a table Syntax: UPDATE [ ONLY ] table [ [ AS ] alias ] SET { column = { expression | DEFAULT } | ( column [, ...] ) = ( { expression | DEFAULT } [, ...] ) } [, ...] [ FROM fromlist ] [ WHERE condition ] [ RETURNING * | output_expression [ AS output_name ] [, ...] ] 您可能想查找下面的文章:最近更新的内容
|

