Database
-
몽고 디비 튜닝Database 2022. 8. 22. 19:15
몽고디비 튜닝 # 인덱스, 복합인덱스 1. 쿼리에는 동등(=) 필터에 대한 키를 맨 앞으로 한다. 2. 정렬에 사용되는 키는 다중값 필드 앞으로 한다. 3. 다중값 필터에 대한 키는 마지막에 표시한다. 4. 복합 인덱스의 경우에 정렬을 다르게 하는 게 효과적인지도 확인필요하다. 5. 복합 인덱스의 처음 필드는 단일 인덱스를 따로 만들 필요는 없다. # 쿼리 플랜으로 인덱스 선택하는 지 확인하기 1. 선택한 인덱스를 몽고디비가 알아서 선택하는지, 풀스캔인지, 인덱스스캔인지 https://steady-coding.tistory.com/564 2. Connection pool size - 테스트를 해보면서 결정하지만 일반적인 공식은 core_count*2 + effective_spindle_count 웹 컨테..
-
몽고 디비 ReplicasetDatabase 2022. 5. 20. 18:12
참고 링크 (https://docs.aws.amazon.com/documentdb/latest/developerguide/connect-to-replica-set.html) DocumentDB에서 인스턴스 추가 몽고 url 에 ?replicaSet=rs0&readPreference=[읽기방식선택] replicaSet 이름 기본적으로 DocumentDB에서는 rs0으로 지정됨 읽기 방식 선택(쓰기는 primary) 참고 링크(https://www.mongodb.com/docs/v5.0/core/read-preference/#mongodb-readmode-primary) primary: 기본값이며, Primary에서 값을 읽음 primaryPreferred: Primary에서 우선적으로 데이터를 읽음 // ..
-
MongoDB - 기본 쿼리/인덱스Database 2022. 3. 2. 16:00
특허 검색 API를 개발할때 특허 데이터는 MongoDB에 저장하였다. 처음 의도는 특허의 명칭, 요약, 청구항별로 각각 검색할 수 있는 기능을 개발하려 했으나(각각 필드 검색의 경우 전문 검색 인덱스를 활용하지 못함), MongoDB는 인덱스로 설정한 필드들을 대상으로 $text: $search: keyword 방식으로 검색한다. 즉, 여러 필드들로 같이 설정한 인덱스의 경우 그 필드들 중에서 특정 필드를 선택할 수 없다. (참고) 공홈 쿼리시 db.collection.find(query, projection) // query = {조건}, projection = 다큐먼트를 조회할 때 보여질 field(field:0,field:1) 1인 값인 필드 리턴 Exact Phrase 문자열 검색에 사용된 조건..
-
Docker-compose MySQL 연동 및 백업, 복구Database 2022. 2. 7. 21:19
* Docker 이미지로 실행된 MySQL 데이터를 연동, 백업 및 복구하자 * 백업의 경우 도커 컨테이너로 백업 명령어를 실행하여 호스트에 ***.sql 로 저장 * 복구의 경우 ***.sql 를 도커 컨테이너로 복구 명령어 실행 MySQL 연결 및 백업, 복구 Shell script # 변수는 ./.env version: "3" services: flask: container_name: "${FLASK}" restart: always build: ./flask volumes: - ./flask/logs:/usr/src/flask_app/logs expose: - "${FLASK_PORT}" env_file: - ./.env command: gunicorn -c ./gunicorn.conf.py "ap..
-
[DATABASE] Raw SQL에서 ORM으로 바꾸자Database 2021. 11. 1. 16:27
1. 코드 비교 ### insert many # Raw SQL cur = conn.cursor() sql = "INSERT into action(name) values (%s)" cur.executemany(sql, (names)) conn.commit() # ORM actions = [ActionModel(name) for name in names] db.session.add_all(actions) db.session.commit() ### get # Raw SQL cur = conn.cursor() sql = "SELECT * FROM action" cur.execute(sql) conn.commit() # ORM action = ActionModel.query.all() ### Create # Ra..