[컴] MySQL 의 LOCK IN SHARE MODE

MySQL / mariadb / db lock / row lock / read lock / write lock /

MySQL 의 LOCK IN SHARE MODE

SELECT ... LOCK IN SHARE MODE

‘읽으려는 row’ 에 lock 을 건다. 그래도 다른 session 들이 read 를 할 수 있다. 다만, update, delete 를 할 수 없다. 만약 현재 ‘읽으려는 row’ 를 변경시킬 수 있는 transaction 이 아직 commit 되지 않고 남아있다면, 이 transaction 이 끝나고 나서 read 를 하게 된다.

참고로 MySQL 8.x 에서는 FOR SHARE 로 이름이 변경됐다.

LOCK IN SHARE MODEFOR UPDATE의 차이

LOCK IN SHARE MODEFOR UPDATE 모두 row 를 read 하는 동안 modify 를 못하게 막는 역할을 한다. LOCK IN SHARE MODE는 다른 transaction 이 row 를 읽는 것을 막지 않는다.(shared lock) FOR UPDATE 는 transaction 이 read 하는 것을 막는다.(exclusive lock)

위의 글에서 쉽게 설명한 내용을 가져오면 2개의 차이점은

  • LOCK IN SHARE MODE는 이 transaction 동안에 값을 변경하는 부분이 없다고 mysql 에 알려준다. 그러니 이것을 read 해도 문제가 없다.
  • FOR UPDATE는 이 transaction 에서 나는 이 row 를 변경할 것이라고 mysql 에 알려주는 것이다. 그러니 이 row 를 지금 read 하지 마라.

참고로 이 lock 은 isolation level 과 관련이 있다. (참고)

FOR UPDATESERIALIZABLE에서라면 굳이 필요치 않다.

shared lock 과 exclusive lock

shared lock (LOCK_S), exclusive lock (LOCK_X) 의 차이는 다음 글에서 잘 설명한다. 간략하게 이야기하면, shared lock 은 여러개 존재할 수 있다. 그런데, 이 shared lock 이 있으면, exclusive lock 을 얻을 수 없다. shared lock 이 다 release 되면, exclusive lock 을 얻을 수 있다. exclusive lock 이 걸려있으면, shared lock 을 acquire 할 수 없다.

See Also

  1. MySQL :: MySQL 8.0 Reference Manual :: 15.7.1 InnoDB Locking.
  2. What is difference between shared and exclusive lock?.
  3. Difference between Shared Lock and Exclusive Lock - GeeksForGeeks.
  4. mysql - When should I use shared lock over exclusive lock? -Database Administrators

[컴][swe] Clockwise 의 software engineering 보고서

swe / 엔지니어링 / 일을 집중하는 법 / 일에 집중 / 시간을 확보하는 법 / 미팅을 줄이는 법 / 회의를 줄이는 법 /

Clockwise 의 software engineering 보고서

참고할만 하다. 개발자가 집중할 시간(여기서는 2시간 이상의 시간을 이야기한다.)이 기업이 커지면서, 더 많은 회의가 생기고 그로인해 쓸 수 있는 시간이 줄어든다는 내용이다. 그것을 coordination tax 라 표현하는 듯 하다.

Focus time 을 더 만들기 위해 쪼개지는 시간들을 모으는 방법을 이야기한다.

The benchmarking data in this report is derived from more than 1.5 million meetings from more than 80,000 users who self-reported that they work in Software Engineering. The data was from May 2021 to May 2022. All data was aggregated, anonymized, and contained no personally identifiable information. Clockwise defines Focus Time as a 2+ hour block of uninterrupted time. In the report, small companies = 1-249 employees, medium companies = 250-999, and large companies = 1,000+ employees. The Engineering Manager Focus Time survey was conducted in January 2020 from a survey of 152 self-reported Engineering Managers.

이 보고서의 벤치마킹 데이터는 소프트웨어 엔지니어링 분야에서 일하고 있다고 자체 보고한 80,000명 이상의 사용자로부터 150만 건 이상의 회의에서 나왔다. 데이터는 2021년 5월부터 2022년 5월까지였습니다. 모든 데이터는 집계되고 익명 처리되었으며 개인 식별 정보가 포함되지 않았습니다. Clockwise는 Focus Time을 방해받지 않는 2시간 이상의 블록으로 정의합니다. 보고서에서 소기업 = 직원 1~249명, 중기업 = 250~999명, 대기업 = 직원 1,000명 이상입니다. 엔지니어링 관리자 Focus Time 설문 조사는 2020년 1월에 152명의 self-reported 엔지니어링 관리자들을 대상으로 실시되었습니다.

screenshots

See Also

  1. Where Did All The Focus Time Go? Dissecting 1.5 Million Meetings w/ Clockwise’s VP of Engineering, Dan Kador

Reference

  1. Software Engineering Meeting Benchmarks - 2022

[상식] video / audio tools

 

비디오/오디오 / 툴 / 좋은 무료 툴 / 성능 좋은 코덱 / 편집기 / 유틸 / 유틸리티

video / audio tools

[컴] Hydra 의 columnar

 

칼럼 data / column record / rdbms / apache / parquet / hydra / postgresql

Hydra 의 columnar

Hydra

Snowflake 대안 오픈 소스. OLAP(Online Analytical Processing) Postgres.

  • Postgres에 구축된 오픈 소스 data warehouse.
  • 사용하기 쉽고
  • OLAP 및 HTAP 워크로드용으로 설계되었다.
  • 분석 보고(analytical reporting) : columnar storage에서 병렬화된 쿼리 실행 및 벡터화를 통해 analytical reporting 을 제공.
  • 운영 작업(Operational work) 및 처리량이 많은 transaction들(high-thoughput transactions)은 표준 Postgres heap table들에 write한다.(기존 postgresql table들)
  • 모든 Postgres extension들, 도구들, 커넥터들은 Hydra에서도 사용할 수 있다.

사용해보기

  • hydra docker-compose.yml : https://github.com/HydrasDB/hydra/blob/main/docker-compose.yml

columnar

흔히 RDBMS 에서는 한 row 씩 저장을 한다. 이것을 가로로 저장한다고 상상해 보자. 그러면, 한 row를 저장할때 세로로 저장하고, 이때 각 row 의 column 을 맞춰서 저장한다. 이것이 columnar 가 된다. 즉 |col1|col2|col3|col4| 라는 row 가 아래처럼 저장되는 것이다.

| col1 | col1 | col1 |
| col2 | col2 | col2 |
| col3 | col3 | col3 |
| col4 | col4 | col4 |

이 세로줄(stripe) 을 row 의 metadata 를 나타낸다고 보면 된다. 이 metadata 는 또한 150,000 row들까지 가지고 있을 수 있다. 각 stripe 에서 data 는 1,000 개의 row 를 갖는 ‘덩어리’(chunk)로 나눠져 있다. 각 덩어리안에 ‘저장된 column data’ 에 대한 row 가 있다. 여기에 추가로 columnar 는 각 chunk 의 각 column 에 대한 최소값, 최대값, count 도 가지고 있다.

장점

  • table scan 에 최적화
  • 특정 column 한개의 모든 data 를 얻는게 더 빠르다. 그래서 쓸데없이 다른 column 의 data를 read 하지 않아도 된다.
  • chunk들 안의 값들에 대한 metadata 를 이용하기 때문에 data 를 read 하는 것을 없앨 수 있다.
  • 비슷한 data 가 나란히 저장되니, 데이터 압축률을 높일 수 있다.
    • 디스크 I/O 가 들어든다.
    • 가져오기 속도(fetch speed)가 증가
    • 압축된 채로 caching 이 되기에, disk caching 을 더 잘 활용할 수 있다.
    • 스토리지 비용을 줄일 수 있다.

단점

  • 일반적인 RDMS 처럼 row 를 찾는 작업을 요청하면 훨씬 많은 양의 data 를 scan 해야 한다.(즉, 더 느리다)
  • Hydra 의 columnar storage 는 현재 append 만 된다. update, delete 에 대해서는 구현중.
    • 그렇지만, update, delete 은 편의를 위해서 만드는 것이고, row table 보다는 느리다.
  • 효율적인 stripe 들을 만드려면, columnar table들은 bulk 로 insert 해야 한다. 이것은 이미 오랫동안 가지고 있는 data 에겐 이상적이지만, database 로 계속 들어오고 있는 data에는 이상적이지 않다. 그래서 columnar 로 보관할 준비가 될 때까지, row-based table(기존의 rdbms table) 에 저장하는 것이 좋다.

See Also

Reference

  1. What is Columnar? - Hydra
  • android / ios : 홈탭UI 작성중
  • 엘요르: 공지영 님 기획을 기다리는 중, ‘대표상품’(기준상품) 등록화면을 만들려고 함.
  • 배송그룹 화면 작성중, / 회자 관련 기능은 완료
  • 노스노스는 한달 단위로만 결제가능
  • 회수, 반품은 지금 trello 로 작업중
  • db crash monition
  • 아사나 는 ’프리미엄’라이센스 사용, 비지니스 라이센스는 2배정도 비싸다.
  • ISMS-P 로드맵
  • 카카오 채널에서 기사들 배송완료 사진을 ’건우’님에게 전송

[컴] WebSecurityConfig 에서 ‘hasIpAddress’ 사용

ip 제한 / limit ip address / range / WebSecurityConfigurerAdapter / spring boot / spring framework

WebSecurityConfig 에서 ‘hasIpAddress’ 사용

다음에서는 WebSecurityConfig 를 어떻게 설정하는지를 확인할 수 있다.

다음 글에서는 여러가지 방법으로 hasIpAddress 설정을 한 예제를 확인할 수 있다.

.antMatchers("/api/v1/mys/test2").hasIpAddress("127.0.0.1")
.antMatchers("/api/v1/mys/test1").access("hasIpAddress(127.0.0.1) or hasIpAddress(127.1.1.1)")

최근 WebSecuirtyConfig 에서 hasIpAddress 를 사용한 예를 볼 수 있다.

다음 글을 보면, hasIpAddress('192.168.1.0/24') 도 가능한 듯 보인다.

[컴][웹] WebSecurityConfigurerAdapter 를 새로운 구조로 변경하는 방법

 

spring boot /

WebSecurityConfigurerAdapter 를 새로운 구조로 변경하는 방법

Spring Boot 2.7부터 WebSecurityConfigurerAdapter 를 사용하는 방법은 deprecated 되었다. 아래 링크에서 WebSecurityConfigurerAdapter 를 extends 해서 만들었던, WebSecurityConfig 를 새로운 구조에 맞게 바꾸는 법을 알려준다.

See Also

[컴] DB backup 관련 AWS가격 조사

 

policy db backup policy / aws db backup / snapshot price

DB backup 관련 AWS가격 조사

6GB 1개의 백업에 대한 비용

export 비용 object 1년비용 s3 1년비용(export + object) rds backup 1년비용
$0.066 $0.144 $0.21 $1.656