데이터 베이스 MySQL 튜토리얼 HBase、Redis中关于“长事务”(Long Transaction)的一点讨论

HBase、Redis中关于“长事务”(Long Transaction)的一点讨论

Jun 07, 2016 pm 04:30 PM
hbase long redis ~에 대한

首先解释下标题,可能命名不是那么严谨吧,大致的定义如下:sometimes you are in a situation where you want to read a record, check what is in it, and depending on that update the record. The problem is that between the time you read a row and

首先解释下标题,可能命名不是那么严谨吧,大致的定义如下: sometimes you are in a situation where you want to read a record, check what is in it, and depending on that update the record. The problem is that between the time you read a row and perform the update, someone else might have updated the row, so your update might be based on outdated information. 摘要一下:进程A读取了某行R,进行时间较长的计算操作,在这个计算过程中B对行R进行了更改。A计算完毕后,若直接写入,会覆盖B的修改结果。此时应令A写入失败。 以下的讨论整理自下述两个页面,表示感谢! http://www.ngdata.com/hbase-row-locks/ http://redis.io/topics/transactions 一个最简单、直接的思路是:Transaction + Row Lock。类似于传统DBMS的思路:首先开启行锁,新建一个Transaction,随后进行各种操作,最后commit,最最后解除行锁。看似很简单,也没什么Bug,但注意,若计算时间较长,整个DB就挂起了,不能执行任何操作。 BigTable的Paper中,对这类问题进行了讨论。 总体来说解决思路有三: 1、Rowlock,但是对于HBase来说,RegionLock更成熟。因为RowLock会长时间(从Transction开始到更新)占用一个线程。当并发量很大的时候,系统会挂掉。。。 2、ICV即HBase的incrementColumnValue()方法。 3、CAS即HBase的checkAndPut方法:在Put之前,先检查某个cell的值是否和value一样,一样再Put。注意,这里检查条件的Cell和要Put的Cell可以是不同的column,甚至是不同的row。。。 综上在HBASE中,使用上述CAS方法是较好的解决方案。 上面说了HBase,再来看一个轻量级的Redis: Redis也支持事务,具体见:http://redis.io/topics/transactions 通过MULTI开始一个事务,EXEC执行一个事务。在两者之间可以“执行”多个命令,但并未被实际执行,而是被Queue起来,直到EXEC再一起执行。Redis保证:在一个事务EXEC的过程中,不会处理其他任何Client的请求(会被挂起)。注意这里是EXEC锁,而不是整个MULTI锁。所以并发性能还是有保障的。 为了支持Paper中CAS方案,Redis提供了WATCH命令: So what is WATCH really about? It is a command that will make the EXEC conditional: we are asking Redis to perform the transaction only if no other client modified any of the WATCHed keys. Otherwise the transaction is not entered at all. 已经很显然了,更多具体的,读上述网页的文档吧。    
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Redis 클러스터는 어떻게 구현됩니까? Redis 클러스터는 어떻게 구현됩니까? Apr 10, 2025 pm 05:27 PM

Redis Cluster는 Redis 인스턴스의 수평 확장을 허용하는 분산 배포 모델이며, 노드 간 통신, 해시 슬롯 디비전 키 공간, 노드 선거, 마스터 슬레이브 복제 및 명령 리디렉션을 통해 구현됩니다. 노드 간 통신 : 가상 네트워크 통신은 클러스터 버스를 통해 실현됩니다. 해시 슬롯 : 키 공간을 해시 슬롯으로 나누어 키를 담당하는 노드를 결정합니다. 노드 선거 : 최소 3 개의 마스터 노드가 필요하며 선거 메커니즘을 통해 하나의 활성 마스터 노드 만 보장됩니다. 마스터 슬레이브 복제 : 마스터 노드는 요청을 작성하고 슬레이브 노드는 요청 및 데이터 복제를 담당합니다. 명령 리디렉션 : 클라이언트는 키를 담당하는 노드에 연결하고 노드는 잘못된 요청을 리디렉션합니다. 문제 해결 : 결함 감지, 라인 마킹 및 재

Key가 Redis 쿼리의 고유 한 방법은 어떻습니까? Key가 Redis 쿼리의 고유 한 방법은 어떻습니까? Apr 10, 2025 pm 07:03 PM

Redis는 키의 독창성을 보장하기 위해 5 가지 전략을 사용합니다. 1. 네임 스페이스 분리; 2. 해시 데이터 구조; 3. 데이터 구조 설정; 4. 문자열 키의 특수 문자; 5. LUA 스크립트 확인. 특정 전략의 선택은 데이터 구성, 성능 및 확장 성 요구 사항에 따라 다릅니다.

Redis 클러스터 모드를 구축하는 방법 Redis 클러스터 모드를 구축하는 방법 Apr 10, 2025 pm 10:15 PM

Redis Cluster Mode는 Sharding을 통해 Redis 인스턴스를 여러 서버에 배포하여 확장 성 및 가용성을 향상시킵니다. 시공 단계는 다음과 같습니다. 포트가 다른 홀수 redis 인스턴스를 만듭니다. 3 개의 센티넬 인스턴스를 만들고, Redis 인스턴스 및 장애 조치를 모니터링합니다. Sentinel 구성 파일 구성, Redis 인스턴스 정보 및 장애 조치 설정 모니터링 추가; Redis 인스턴스 구성 파일 구성, 클러스터 모드 활성화 및 클러스터 정보 파일 경로를 지정합니다. 각 redis 인스턴스의 정보를 포함하는 Nodes.conf 파일을 작성합니다. 클러스터를 시작하고 Create 명령을 실행하여 클러스터를 작성하고 복제본 수를 지정하십시오. 클러스터에 로그인하여 클러스터 정보 명령을 실행하여 클러스터 상태를 확인하십시오. 만들다

기본 Redis를 구현하는 방법 기본 Redis를 구현하는 방법 Apr 10, 2025 pm 07:21 PM

Redis는 해시 테이블을 사용하여 데이터를 저장하고 문자열, 목록, 해시 테이블, 컬렉션 및 주문한 컬렉션과 같은 데이터 구조를 지원합니다. Redis는 Snapshots (RDB)를 통해 데이터를 유지하고 WRITE 전용 (AOF) 메커니즘을 추가합니다. Redis는 마스터 슬레이브 복제를 사용하여 데이터 가용성을 향상시킵니다. Redis는 단일 스레드 이벤트 루프를 사용하여 연결 및 명령을 처리하여 데이터 원자력과 일관성을 보장합니다. Redis는 키의 만료 시간을 설정하고 게으른 삭제 메커니즘을 사용하여 만료 키를 삭제합니다.

Redis 거래를 처리하는 방법 Redis 거래를 처리하는 방법 Apr 10, 2025 pm 05:24 PM

REDIS 거래는 원자력, 일관성, 격리 및 지속성 (산) 속성을 보장하고 다음과 같이 작동합니다. 트랜잭션 시작 : 다중 명령을 사용하십시오. 레코드 명령 : redis 명령을 여러 개 실행합니다. 커밋 또는 롤백 트랜잭션 : exec 명령을 사용하여 트랜잭션을 커밋하거나 Discard 명령을 사용하여 거래를 롤백합니다. 커밋 : 오류가 없으면 EXEC 명령은 트랜잭션을 저지르고 모든 명령은 데이터베이스에 원자 적으로 적용됩니다. 롤백 : 오류가 있으면 Discard 명령이 트랜잭션을 롤백하고 모든 명령이 폐기되고 데이터베이스 상태는 변경되지 않았습니다.

Redis의 버전 번호를 보는 방법 Redis의 버전 번호를 보는 방법 Apr 10, 2025 pm 05:57 PM

Redis 버전 번호를 보려면 다음 세 가지 방법을 사용할 수 있습니다. (1) info 명령을 입력하고 (2) -version 옵션으로 서버를 시작하고 (3) 구성 파일을 봅니다.

Redis에서 모든 키를 보는 방법 Redis에서 모든 키를 보는 방법 Apr 10, 2025 pm 07:15 PM

Redis에서 모든 키를 보려면 세 가지 방법이 있습니다. 키 명령을 사용하여 지정된 패턴과 일치하는 모든 키를 반환하십시오. 스캔 명령을 사용하여 키를 반복하고 키 세트를 반환하십시오. 정보 명령을 사용하여 총 키 수를 얻으십시오.

Redis Zset을 사용하는 방법 Redis Zset을 사용하는 방법 Apr 10, 2025 pm 07:27 PM

Redis 순서 세트 (ZSETS)는 순서가있는 요소를 저장하고 관련 점수별로 정렬하는 데 사용됩니다. ZSET을 사용하는 단계에는 다음이 포함됩니다. 1. ZSET을 만듭니다. 2. 회원 추가; 3. 회원 점수를 얻으십시오. 4. 순위를 얻으십시오. 5. 순위 범위에서 멤버를 받으십시오. 6. 회원 삭제; 7. 요소 수를 얻으십시오. 8. 점수 범위에서 멤버 수를 얻으십시오.

See all articles