MySQL 4

[mysql] fulltext index ngram parser

개요 fulltext index에 대해서 정리를 한 번 했었는데(https://seokhyun2.tistory.com/92), fulltext index에서 토큰을 나누는 기본 방식은 띄어쓰기를 기준으로 분리를 합니다. 띄어쓰기를 기준으로만 분리를 하게 되면, 한국어에서는 조사가 다 붙어있어서 검색이 어렵습니다. 예를 들면 '한국'이란 명사에 대해서 '한국은', '한국에서', '한국의' 와 같이 조사가 붙어서 띄어쓰기로만 토큰을 나누게 되면 다 별도의 토큰으로 인식이 되어, '한국'이라는 명사가 있는 문장만 찾고 싶은데 찾을 수 없게 됩니다. 그래서 추가적으로 제공되는 기능이 바로 ngram parser입니다. 원리 ngram parser가 무엇인지, 원리를 알아볼텐데요. ngram에서 n은 숫자이고, ..

ETC/MySQL 2023.04.23

[mysql] fulltext index

개요 mysql 데이터베이스를 사용하다보면, 조회 속도 개선을 위한 작업을 많이 하게 됩니다. 그래서 index를 많이 사용하게 되는데, 기본적인 index는 column값이 정확하게 일치하는 기준으로 사용할 수 있습니다. column값이 텍스트를 활용하고, 값이 일부만 일치하는 경우 조회를 하기 위해서는 like 쿼리를 사용하는데, 그 속도가 매우 느립니다. 완전 동일한 조회가 아니라서 기본적인 index를 사용할 수도 없구요. 이럴 때, fulltext를 사용하면 조회 속도를 개선할 수 있습니다. 원리 fulltext index를 사용하는 방법을 알아보기 전에, 원리를 우선 간단하게 알아보겠습니다. column의 값이 영어 이름이라고 가정하고, '마이클 잭슨'과 '마이클 조던' 이라는 2개의 값이 존..

ETC/MySQL 2023.04.09

SQLAlchemy ORM & async 활용 (2.0.X)

SQLAlchemy에서 2.0 버전이 나와서 문법이 꽤 많이 변경되었습니다. 그래서 오늘은 변경된 ORM 문법과 함께 async로 접근하는 방법을 알아보았습니다. 변경된 ORM 문법을 바로 보도록 하겠습니다. from datetime import datetime from sqlalchemy import String, BIGINT from sqlalchemy.dialects.mysql import DATETIME from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): type_annotation_map = { int: BIGINT, datetime: DATETIME } class User(Ba..

python/SQLAlchemy 2023.02.26

SQLAlchemy 소개 및 활용법

딥러닝 모델을 서비스에 적용하다보면, 실시간 서빙 뿐만 아니라 데이터베이스를 활용하여 데이터베이스에 딥러닝 모델의 인퍼런스 결과를 저장해두고 저장된 결과를 활용하여 서비스를 제공하기도 합니다. 자연어처리에서 예를 들면, 미국 신문 기사에 대한 번역 서비스를 제공한다고 할 때, 미국 신문 기사를 데이터베이스에 저장하면서 번역 결과도 같이 저장을 해둔다면 유저가 접속할 때 마다 번역할 필요가 없겠죠? 그래서 딥러닝 모델을 서비스에 제공하다보면, 데이터베이스에 대한 지식도 필요하게 됩니다. SQLAlchemy? SQLAlchemy는 그 자체가 데이터베이스 클라이언트는 아닙니다. 데이터베이스 클라이언트 라이브러리는 별도로 활용하고, 오늘 소개드릴 SQLAlchemy는 ORM(Object Relational Ma..

python/SQLAlchemy 2022.08.21