Database
-
MongoDB Atlas SearchDatabase 2024. 5. 1. 22:06
프로젝트에서 검색 방법을 바꿔야 할 필요가 있어요.관심이 생겨 찾아보는데 정리해 두면 좋을 것 같아서 생각의 흐름을 적어봐요.근본적인 시스템을 바꾸지 않고는 지금 구조에서는 지금 생각이 베스트 같은데 혹시 더 좋은 방법이 있으면 알려주세요... 요구사항검색어로 RDB 에 저장된 부동산 이름 및 주소를 검색부동산 타입별 검색특정 부동산 타입에 대해서는 내부적으로 정의한 count 가 많은 순으로 정렬검색하는 갯수 지정추가적으로 데이터 업데이트는 거의 일어나지 않음 문제현재는 검색을 위한 tsv 파일을 만들고, 서버 실행 시 메모리에 올려두고 사용함.데이터가 추가되면서 tsv 파일의 사이즈가 너무 커짐. 대략 10GB이 방법으로 사용하려면 현재 사용 중인 AWS ECS 대신 EC2 로 변경하거나, ECS 인..
-
공동주택 공시가격 DB 저장하기Database 2024. 2. 15. 20:01
공동주택 공시가격 조회 준비공동주택 공시가격을 조회하기 위해 했던 데이터 저장 과정을 남겨요. 간단한 용어 설명과 왜 저장하기로 했는지부터 알아봐요. 특정 공동주택의 특정 연도에 해당하는 공시가격을 조회하는 기능이 필요한데요. 예를 들어, A 아파트 110동 1203호 2020년 공시가격을 조회하고 싶어요. 요구사항에 맞게 제공하는 OpenAPI 가 없었고, 다른 방식으로 서버에서 요청을 보내는 방법은 막혀있어 클라이언트에서 우회해서 조회하고 있었어요. 데이터 텍스트파일은 제공해주고 있었는데 양이 너무 많아서 이걸 저장해도 되나 싶어서 안 하고 있다가, 최근에 다른 일로 데이터를 다시 보는데 저장해도 되겠다 싶은 생각이 들어 진행하기로 했어요. 먼저 공시가격이 무엇인지, 왜 필요한지 간단하게 알아봐요. ..
-
mysql whitespace to nullDatabase 2024. 2. 14. 08:24
txt 파일을 테이블에 insert 하는 작업을 하는데, 공백은 null 로 설정하려고 한다. txt 파일 값의 공백을 TRIM 으로 제거하고 시도해봤는데 개행이나 탭도 섞여있어서 곤란하다. REGEXP_REPLACE 를 사용해야 한다. -- TRIM UPDATE 건물정보 SET 비고2 = NULLIF(TRIM(비고2), '') WHERE 비고2 IS NOT NULL; -- REGEXP_REPLACE UPDATE your_table_name SET your_column_name = NULLIF(TRIM(your_column_name), '') WHERE your_column_name IS NOT NULL; UPDATE 건물정보 SET 비고2 = NULLIF(REGEXP_REPLACE(비고2, '^\\s*..
-
MySQL wait_timeoutDatabase 2023. 10. 27. 21:00
오래 걸리는 파이썬 스크립트에서 에러가 발생했다. `Lost connection to MySQL server during query` 아마 MySQL 커넥션 시간제한이 있지 않을까 해서 봤다. https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_wait_timeout default 값은 8시간이고, Aurora MySQL 에서도 동일하다. 로그를 보니까 쿼리를 실행하기까지 10시간 동안 객체를 만들고 있었다. 파라미터 그룹을 수정하는 것 보다는 코드를 수정하는 게 나을 것 같다. insert 작업을 수행하는데, 각 객체마다 수행 하던거를 한 번에 할 수 있게 모아놨고, 커넥션은 모은 객체를 한 번에 insert 하는 순간..
-
PostgreSQL collate 한글 컬럼 정렬Database 2023. 4. 4. 22:19
한글 이름을 오름차순으로 조회하는 요구사항이 있었다. 쿼리가 아닌 DBeaver 와 같은 SQL 클라이언트에서 편집기로 정렬했을 때는 기대한 바와 같았는데 쿼리 결과는 기댓값과 달랐다. 여러 번 조회하고 규칙을 보니까 2글자의 이름이 먼저 뽑혔다. GCP의 SQL을 사용하고 있는데 먼저 default collate 를 조회해 봤다. SHOW lc_collate; /* en_US.UTF8 */ 지금은 이름 컬럼의 정렬만 한국어로 정렬되면 돼서 이름 컬럼의 collate 를 변경해 보자. ex. 테이블명은 profile, 컬럼은 text 타입의 name ALTER TABLE profile ALTER COLUMN name SET DATA TYPE text COLLATE "ko_KR.utf8"; 이렇게 name..
-
PostgreSQL IndexDatabase 2023. 2. 26. 18:42
PostgreSQL Index 관련 문서보고 너무 자세한 부분은 빼고 필요해 보이는 부분 정리했다. 잘못 이해해서 틀린 부분이 있을수도 있으니 정확한 정보는 문서에서 보는걸 추천.. 내가 읽는 것도 어려웠어서 메모의 느낌이 아니라 알려주는 목적으로 읽기 쉽게 적는건 어려웠다. 다음 기회에 계속... Index 빠른 검색을 위해 필요하다. 자료구조 선택 이진트리의 경우 자식 노드의 최대 개수가 2개여서 데이터 양이 많을 경우 트리의 높이가 높아질 수 있고, 한쪽으로 편향된 트리의 모양을 가질 수 있다. AVL Tree 나 Red-black Tree 와 같은 균형 잡힌 트리를 사용하면 안 되나요? 한쪽으로 편향된 이진트리보다는 낫지만 여전히 자식노드의 수는 최대 2개이다. B-Tree의 경우 편향되지 않고 ..
-
JOINDatabase 2020. 7. 28. 20:46
조인 - 한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현한 것이다. 따라서 조인은 테이블로서 저장되거나, 그 자체를 이용할 수 있는 결과 셋을 만들어 낸다. JOIN은 2개의 테이블에서 각각의 공통값을 이용함으로써 필드를 조합하는 수단이 된다. ANSI 표준 SQL은 네가지 유형의 JOIN을 규정한다. 1. INNER JOIN 2. OUTER JOIN 3. LEFT JOIN 4. RIGHT JOIN 교차 조인 - CROSS JOIN 절은 조인되는 두 테이블에서 곱집합을 반환한다. 즉, 두 번째 테이블부터 각 행과 첫 번째 테이블에서 각 행이 한번씩 결합된 열을 만든 것이다. ex) m행을 가진 테이블과 n행을 가진 테이블이 교차 조인되면 m * n 개의 행을 생성한다. // 명시적..