POSTGRES 선택이유:
Full Scan / Seq Scan “끙…”
B Tree Indexing “빠르다 미치도록”
CREATE INDEX "idx_category" ON stores ("category" text_pattern_ops)
단점:
Full Text Index “효과적이다”
CREATE INDEX "idx_category" ON stores USING gin ("category" gin_trgm_ops)
SELECT * FROM your_table_name WHERE your_column_name @@ to_tsquery('keyword')
단점:
찾아보니 postgres 도 설정이 다양하다. extension plugin , 라이브러리를 잘 사용하면 원하는 값을 얻을수 있을 것 '같다 51%'. 세상에 쉬운일 하나 없다.
Trouble Shoot:
작은 데이터를 조회하거나 Indexing 을 하면 Btree 혹은 Full Text Index 로 빠르게 값을 받아왔다
어느 순간, 데이터 대략 1만 4천에서 부터 BITMAP INDEXING 으로 POSTGRES가 다른 인덱싱 보 다 더 효율적이라고 판단하면서 값을 반환했다. 왜지? 왜 BITMAP SCAN BITMAP INDEX 2번 과정을 걸치는데 효율적이라는거지?
시도 방법:
```
SELECT *
FROM stores
WHERE 조건
AND stores USING INDEX (category_gin_index)
``` 잘 안된다.. ㅠㅠ배운점 :
사실 BITMAP INDEX SCAN (누구냐 넌 ) 효율이 굉장히 좋다. 느리게 느껴졌지만 그만큼 데이터를 추가 했기 때문이였다. 인덱싱과 아닌 그 어딘가에 사이. 우리에게 순차적인 인덱싱 성능을 제공해준다. 기능이 워낙 많아서 따로 다뤄볼 예정이다
기본적인 Index를 사용하기에는 데이터가 많고, SeqScan를 돌리기엔 적을 때가 있을 수 있다.
그럴 때 사용되는 것이 바로 비트맵 스캔이다.
비트맵은 Heap Scan 과 비트맵 Index를 EXPLAIN AND ANALYZE로 확인 할 수 있었다.
처음에는 2번의 과정을 걸쳐서 인덱싱보다 느리고 성능도 안좋을지 알았는데,
- BitMap Index통해 비트맵에 인덱싱을 BITMAP에 기록하고
- HEAP SCAN BITMAP을 사용해서 결과를 리턴하는 것이다.
HEAP이니 메모리에서 가져오는듯한다. 아직 비트맵의 생김새를 파악하지 못해서 공부중이다.
아무래도 POSTGRES의 선택은 직접적으로 제어하기 힘들었고 적당한 데이터로 TEST를 끝냈기 때문에 데이터가 많을때 postgres FULLTEXT INDEX보다 효율적이라고 생각되는 ELK 로 넘어가기로 했다. inverted indexing은 검색 능력에 중점을 두기 때문에 N-gram 설정 등으로 postgres 보다는 더 간단하게 설정해둘수 있다.