DataBase
-
[Redisson] 레디스로 객체 저장 시 클래스 (타입)정보 제외하기DataBase/Redis 2023. 3. 25. 22:59
redis client로 redisson을 쓰고 있는데 따로 설정 없이 객체를 저장할 경우 클래스 정보도 함께 저장된다. 데이터 직렬화를 하면서 클래서 정보도 포함시킨다. redisson은 객체를 사용하기 위해 RBucket 개념을 활용하는데, spring data redis에서 bucket에 관한 설명을 보면 다음과 같다. Bucket is the data bag for Redis hash structures to be used with RedisData. 버킷은 레디스의 hash structure로 사용되는 데이터 가방이다. 직역하면 그런데, 객체를 담을 수 있는 녀석이라고 생각하면 되겠다. baeldung에도 object holder로 소개하고 있다. 데이터 직렬화 시 redisson은 Kyro5..
-
Mac M1에서 redis-server 명령어 동작하지 않을 때 해결방법DataBase/Redis 2021. 6. 20. 13:01
정말 간단하게 정리. 6.0.10 버전 이상부터는 해결됐다고 한다. 사정이 없다면 버전업을 추천(2021년 6월 20일 기준 6.2.4버전이 stable) redis-server 명령어가 동작하지 않아서 사용하고 있는 노트북이 m1 맥북프로랑 관련이 있지 않을까 싶어 검색해보니 맞았다. 아래처럼 입력하면 잘 실행되는걸 볼 수 있다. $ sudo redis-server --daemonize yes 깃헙 이슈를 보면 Developer-Ecosystem-Engineering분이 남겨두신 상세한 설명을 내 나름 해석해보자면, (어려워서.. 정확한 이유를 알고싶으시면 원문을 보시는 걸 추천) redis-server 커맨드가 수행되면서 초기화 시, 환경변수들을 arguments로 받는다고 한다. 이 argument..
-
[MySQL] B-tree, B+tree란? (인덱스와 연관지어서)DataBase/MariaDB & MySQL 2020. 2. 10. 20:37
B-tree는 인덱스를 이루고 있는 자료구조의 일종이다. B-tree에서 'B'는 정확히 어떤 의미라고 밝혀진 바는 없다. 아마 'Balanced'를 의미하는 'B'가 아닐까라는 추측만 있다. MySQL의 DB engine인 InnoDB는 B+tree로 이뤄져있는데, B-tree의 확장된 개념이다. 먼저 B-tree를 살펴보자. 트리 구조의 우위성 트리 구조는 꼭 데이터베이스에 한정하지 않더라도 시스템 세계에서는 데이터를 유지하기 위해 자주 사용하는 구조이다. '탐색' 시, 단시간 내에 실행할 수 있기 때문이다. B-tree의 핵심은 데이터가 정렬된 상태로 유지되어 있다는 것이다. 그림에 표시된 사각형으로 표시된 한 개 한 개의 데이터를 '노드(Node)'라고 한다. 가장 상단의 노드를 '루트 노드(Ro..
-
[MySQL] 인덱스(Index) 정리DataBase/MariaDB & MySQL 2020. 2. 9. 11:50
인덱스(Index) 정리 인덱스를 알아보기 전에 풀 스캔(Full Scan)과 레인지 스캔(Range Scan)을 이해해야 한다. 풀 스캔(Full Scan) & 레인지 스캔(Range Scan) 풀 스캔 : 테이블에 포함된 레코드를 처음부터 끝까지 읽어들인다. 레인지 스캔: 테이블의 일부 레코드에만 엑세스한다. 앞으로 예시로 들 테이블 구조 CREATE문 CREATE TABLE `user` ( `idx` bigint(20) NOT NULL AUTO_INCREMENT, `created_date` datetime DEFAULT NULL, `email` varchar(255) NOT NULL DEFAULT '', `name` varchar(255) DEFAULT NULL, `password` varchar(..
-
[MySQL] Mysql에서 프로시저(procedure) 안에 사용된 문자열 검색하기DataBase/MariaDB & MySQL 2019. 1. 15. 22:27
Mysql에서 프로시저(procedure) 안에 사용된 문자열 검색하는 방법.md 사용하지 않는 것으로 보이는 프로시저(procedure)를 삭제하려는데, 그 프로시저가 다른 프로시저를 콜하고 있었다… 이걸 어떡하지. 이 개념이라면 사용하지 않는 것으로 보였던 프로시저도 다른 곳에서 콜하면 어떡하지라는 생각이 들었다. 그래서 찾은 방법은 아래와 같다. SELECT ROUTINE_SCHEMA , ROUTINE_NAME , ROUTINE_DEFINITION , ROUTINE_TYPE FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_DEFINITION LIKE '%찾고자하는 문자열%' AND ROUTINE_TYPE='PROCEDURE'; ROUTINE_SCHEMA : 스키마..
-
[Oracle] ibatis에서 오라클 프로시저(procedure)를 결과 값으로 받기(사용법)DataBase/Oracle 2018. 10. 31. 10:41
스프링 개발을 하시는 분들의 글을 읽어보면 오라클 프로시저는 보통 파라미터에 담아서 사용한다. 나도 그렇게 쓰고 싶었지만, mysql도 같이 사용하기 때문에 파라미터가 아닌 결과 값을 받아와야 했다.(mysql은 프로시저에서 select가 가능해 select한 결과를 받아올 수 있다. 하지만 오라클은 select가 안됨.) 예를 들면, 1Map receiveMap = procedureDAO.getAnyList("procedureDAO.getAnyList", param);cs 위와 같은 코드가 있으면 오라클 프로시저의 경우 out 변수가 param에 담긴다. 하지만, 나의 조건은 receiveMap에 담아야하는 방법을 찾아야 했다. 거의 모든 분들이 param에서 값을 꺼내쓰는 글 밖에 없었고, 하루 종일..
-
[Oracle] ORA-04091: table 000 is mutating 에러와 autonomous transactions(자율 트랜잭션)DataBase/Oracle 2018. 10. 27. 16:09
오라클에서 function을 이용해 update 하는 중에 발생한 에러이다.(사실 이 에러는 회사 선임님쪽에서 발생했다.) mutating?이 뭐지. 찾아봤는데'변이'라는 뜻을 가지고 있었다. 흔히 우리가 말하는 돌연변이(mutant)를 말할 때 같은 의미겠지? ㅎㅎ 변이하고 있는 테이블에 참조를 걸려고 하니 에러가 생긴 것이었다. 아니나 다를까 function을 보니 update 해주는 table을 참조해서 값을 가져오는 기능이었다. 근데 이게 mariaDB(혹은 mysql)에서는 잘 돌아간다. 회사에서 항상 우리끼리 'mariaDB는 너무 관용적이다'라고 말한다. 안될 것 같은 쿼리도 mariaDB에서 잘 돌아간다. 회사에서 아래와 같은 방법으로 짜여져 있었다.(매우매우 간소화시켜서 올려둡니다) qu..
-
[문자열 연결 function] MySQL의 group_concat과 oracle의 LISTAGG 사용 방법DataBase/MariaDB & MySQL 2018. 10. 22. 17:49
컬럼의 데이터들을 연결해서 보여주고 싶을 때가 있다. 예를 들면, 우리 회사의 사업 분야를 row 한 개에 보고 싶다! comp_name business_area zorba food zorba hotel zorba car zorba 회사의 사업 분야를 한 줄에 보게 되면 결과는 이렇게 만들 수 있다. comp_name total_business_area zorba food, hotel, car 이런 걸 가능하게 해주는 function이 mysql의 group_concat과 oracle의 listagg이다. 위의 예시를 이용해 사용법을 설명해보겠다. 1) MYSQL 123select group_concat(business_area SEPARATOR ',') from demo_table where comp_..