phoenix:Transactions

Transactions

Phoenix依赖Tephra实现了行间,表间的事务支持。Tephra 提供 snapshot 隔离当前事务通过实现多版本并行控制

步骤:
	一、hbase-site.xml 开启事务
	<property>
	  <name>phoenix.transactions.enabled</name>
	  <value>true</value>
	</property>
	二、hbase-site.xml 配置事务管理 
	<property>
	  <name>data.tx.snapshot.dir</name>
	  <value>/tmp/tephra/snapshots</value>
	</property>
	<property> 
	  <name>data.tx.timeout</name>
	  <value>60</value>
	  <description>事务超时时间</description>
	</property>
	三、启动事务管理
	tephra

	* 事务配置在master node 
事务的开启
	CREATE TABLE my_table(k BIGINT PRIMARY KEY,v VARCHAR) TRANSACTIONAL = true;
	* 不能把一个事务表,变成非事务表;能把非事务表变成事务表
	ALTER TABLE my_other_table SET TRANSACTIONAL=true;

查询时,事务的启动,要事务表上执行一个声明,结束事务通过 commit or rollback。事务中可以查看没有提交的数据
SELECT * FROM my_table; -- this will start a transaction
UPSERT INTO  my_table VALUES (1,'A');
SELECT count(*) FROM my_table WHERE k = 1; will see uuncommitted row
DELETE FROM my_other_table WHERE k = 2;
!commit -- other transactions will now see your udpates and you will see theirs

如果有两个事务同时操作一条语句,会抛出异常,案例如下:
	事务一: 
		UPSERT INTO my_table VALUES(1,'A')
	事务二:
		UPSERT INTO my_table VALUES(1,'B')
		!commit
查询只能查看查询已经提交的,不能查看正在执行事务中的值
索引与table的事务是一致的,在commit期间,如果index或者data table 写异常,客户端将回滚或者重试的,如果提交失败,index,data table rows 是不可见

外部的Tephra 事物已经启动,能够被Phoenix设置为事物
setTransactionContext(TransactionContext txContext)

limitations

1.在SCN连接集上启动事物是不被允许的
2.设置最大版本属性当创建一个事物表时,限制并行事物数的可用快照
3.如果事物不能回滚或超时时,产生一个无效列表。如果有很多失败和超时事物,列表会变大。adminstrator能手动清理列表中的事物,在 major compaction出现后。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值