Sphinx 엔진의 한계스핑크스를 사용하면서 가장 중요한 한계점을 발견하였는데이미 인덱싱 처리가 되어있는 Sphinx 테이블간의 데이터 활용을 위한 Join / Subquery / Union 쿼리가 지원되지 않는다는 점이다.SphinxQL support for inner join on the same index with subquery[일부 쿼리를 지원하지 않는 근본적 이유]검색 엔진 최적화:Sphinx는 주로 텍스트 검색을 위해 최적화된 검색 엔진이며 복잡한 SQL 기능보다는 고속의 텍스트 검색 및 인덱싱이 목적이기 때문이다.데이터 저장 및 인덱싱Sphinx는 데이터를 자체적인 인덱스 파일 형식으로 저장하고 관리하며 인덱스 파일은 MySQL의 테이블 구조와 다르다.단일 테이블 기반 검색Sphinx는 단..
반복되는 컬럼을 한줄로 표현하여 개선 다수의 테이블은 어떻게 조합할 것인가? MySQL에서 테이블을 조합하는 과정은 크게 2가지 방법(UNION / JOIN)이 있다. 어느 함수가 더 뛰어나다 라는 것은 없으며 상황에 적합하도록 사용하면 된다. 나의 경우 3개의 테이블(PC / MA / MW)에서 동일 데이터 컬럼을 가져왔으며 UNION을 사용하는 것이 적합했기에 최종 select 에서는 UNION을 사용했으며 부가적으로 세부 컬럼을 가져와야 할 경우는 JOIN으로 획득하였다. 최초 작성 쿼리 문제 해당 쿼리가 작동하는데 있어서 문제는 없지만 해당 결과를 화면에 보여준다면 문제가 생기게 된다. 만일'집계'가 Daily, 하루 단위로 집계가 된다면 최대 12개월의 31일 그리고 해당 테이블의 컬럼 갯수 즉..
database 에서 두개의 테이블 사이에 데이터 검색 방법 쿼리를 다루다보면 두가지 테이블을 연관지어 데이터를 조회할 때가 있는데 PROGRAM_INFO 와 NEWS_01 테이블의 연관관계가 외래키 idx로 묶여있다면 프로그램이 가진 뉴스 콘텐츠를 쉽게 확인할 수 있을것이다. -- SUBQUERY 방식 select * from NEWS_01 a, PROGRAM_INFO b where (select count(join_key) from ATTACH where join_key=a.join_key)=0 -- JOIN 방식 select * from NEWS_01 a join PROGRAM_INFO b ON a.m_cd=b.m_cd where (SELECT COUNT(*) from NEWS_01 a right ..
SPHINX What is sphinx ?? Sphinx is an open source full text search server, designed from the ground up with performance, relevance (aka search quality), and integration simplicity in mind. Sphinx lets you either batch index and search data stored in an SQL database, NoSQL storage, or just files quickly and easily — or index and search data on the fly, working with Sphinx pretty much as with a da..
Common Table Expression WITH 절과 함께 사용되는 CTE는 Mysql 8.0 부터 사용할 수 있다. CTE는 기존의 뷰, 파생 테이블, 임시 테이블 등으로 사용되었던 것을 대신할 수 있으며, 더욱 간결한 식으로 표현할 수 있도록 구성할 수 있다. 어쩌면 SubQuery를 대신할 수 있다고 생각한다. CTE 구성 CTE는 가상의 테이블을 하나 더 생성한다 라고 생각하면 이해할 수 있다. WITH CTE_TableName(열 이름) AS ( ) 위 명령어로 만들어낸 테이블을 쿼리문의 대상 테이블 이름으로 사용할 수 있다. 지역별로 성적을 구하는 테이블 WITH CTE_TableName(addr, student) AS ( select * from grade_Table group by ad..
DB 암호화 기법 개요 데이터베이스 암호화는 데이터를 암호화하여 저장하고, 권한이 있는 사람 혹은 서버만이 해당 데이터를 복호화할 수 있도록 하여 데이터를 보호하는 기술이다. 데이터베이스 접근 제어 외에 데이터베이스 보안에 관한 국내외 법률과 규정은 2가지를 주요하게 강조한다. 암호화를 통한 데이터베이스 보안 엄격한 암호키 관리를 통해 데이터를 보호 데이터베이스 암호화의 목적은 비정상적 데이터 유출이 발생할 경우, 복호화를 어렵게 만드는 것이다. 암호키는 암호화 뿐만 아니라 복호화할 때도 사용하므로 매우 신중하게 관리하여야 한다. 랜덤 키에 의해 암호화된 데이터는 해커들이 복호화를 하기 어렵게 만든다. 따라서 복호화를 해야만 하는 사용자나 시스템 이외에 다른 사용자가 암호키에 접근하는 것을 통제해야 한다..
제약조건 (CONSTRAINT) 데이터의 무결성을 지키기 위한 제한된 조건이다. MySQL에서는 데이터의 무결성을 목적으로 아래 5가지의 제약 조건을 제공하고있다. Primary Key Foreign Key Unique Key Check Key Default 정의 NULL 값 허용 Primary Key 단일 데이터의 행의 데이터를 구분할 수 있는 식별자이다. create table userTBL( userID char(8) NOT NULL PRIMARY KEY, NAME VARCHAR(10) NOT NULL, birthYear INT NOT NULL ); Foreign Key 두 데이터 데이블 사이의 관계를 선언함으로써 데이터의 무결성을 보장해 주는 역할 create table userTBL( userI..
Union vs Union All 차이 UNION: only keeps unique records 두 쿼리문의 결과에서 합집합을 구한다. (A∪B - A∩B) UNION ALL: keeps all records, including duplicates 두 쿼리문의 결과에서 합집합을 구한다. 단, 중복되는 정보도 포함하여 출력한다. A∪B 처리 과정 최종 UNION [ALL | DISTINCT] 결과에 적합한 임시 테이블(Temporary table)을 메모리 테이블로 생성 UNION 또는 UNION DISTINCT 의 경우, Temporary 테이블의 모든 컬럼으로 Unique Hash 인덱스 생성 서브쿼리1 실행 후 결과를 Temporary 테이블에 복사 서브쿼리2 실행 후 결과를 Temporary 테이..
Background 준영속 상태와 지연로딩 스프링 커테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다. 즉, 트랜잭션 범위와 영속성 컨텍스트의 생존 범위가 같다는 뜻이다. 그리고 트랜잭션은 보통 서비스 계층에서 시작하므로 서비스 계층이 끝나는 시점에 트랜잭션이 종료되면서 영속성 컨텍스트로 함께 종료된다. @Entity public class order{ @Id @GeneratorValue private Long id; @ManyToOne(fetch = FetchType.LAZY) private Member member; } 컨테이너 환경의 기본 전략인 트랜잭션 범위의 영속성 컨택스트 전략을 사용하면 트랜잭션이 없는 프래젠테이션 계층에서 엔티티는 준영속 상태다. 따라서 감지와 지연 로딩이 ..
- Total
- Today
- Yesterday
- Spring
- Solid
- kakao
- 자격증
- java
- 디자인패턴
- ajax
- 매트랩
- OOP
- 수학
- 자바
- interview
- 릿코드
- security
- CS
- spring-cloud
- 백준
- JPA
- 그래프
- 스프링부트
- springboot
- docker
- 알고리즘
- nginx
- 면접
- C언어
- 스프링
- 프로그래머스
- Matlab
- Algorithm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |