본문 바로가기

Data

(11)
Uber 의 PostgreSQL -> MySQL 전환이라는 오래 된 기사 보고 MariaDB 에서 PostgreSQL 로 전환하는거 고민하던 참에 관련 문제 더 깊이 고민하고 있는 회사 엔지니어 분에게 참조하시라고 보냈던 멜 내용 일부분 옮겨 적어본다. ---- 며칠 전 페북의 어떤 분 소개로 아래 글 보게 되었어요. 글 볼 땐 놓쳤는데 알고 보니 최근 글 아닌 2016년 거였더군요. https://eng.uber.com/postgres-to-mysql-migration/ 오래된 글이다 보니 요약 글들도 좀 있는 것 같던데 그 중 하나. https://sangwook.github.io/2016/09/13/uber-mysql-postgresql.html 그런데, 재미있는건 pg -> mysql 이전, 2012년도인가는 mysql -> pg 이렇게 변환 작업 했었던 역사 있다는거. 관..
embulk 이용한 oracle -> mariaDB 데이터 벌크 이행 oracle DB 테이블 데이터를 mariaDB 로 이행할 일 있어서 python/pandas 로 간단히 만들었는데 multi insert 하게끔 해도 600만건 처리하는데 30분을 족히 넘어간다. 개선할 방법이야 여럿 있겠지만 거 붙잡고 있을 시간 없어서 주위 엔지니어분들께 수소문해보니 oracle -> BigQuery 이행 작업 위해 embulk 쓰는 중인데 성능 괜찮다길래 후다닥 사용해봤다. www.embulk.org/ Embulk Pluggable, Multi-source/destination, Open-sourced Bulk Data Loader to/from databases, storages, file formats, cloud services, ... www.embulk.org 설치해보니 ..
Oracle DB에서 주기적으로 데이터를 정확하게 5초 간격으로 추출 가령 스케줄러에서 5초 주기로 5초 전부터의 데이터를 가져오려고 한다고 해보자. 스케줄러 프로그램 실행 5초전 원하는 추출 시점 17:40:20 17:40:21 17:40:16 17:40:15 17:40:25 17:40:25 17:40:20 17:40:20 17:40:30 17:40:32 17:40:27 17:40:25 스케줄러에 등록된 프로그램 기동 시간 지연 등의 이유로 추출 기준시점이 틀어지는 문제를 예상해볼 수 있을 듯 하다. trunc 와 NUMTODSINTERVAL을 조합해서 만들어 본 꽁수. SELECT sysdate, trunc(sysdate, 'MI'), sysdate - INTERVAL '5' SECOND, trunc(sysdate, 'MI') + NUMTODSINTERVAL(floor..
[MySQL]시간 올림, 내림 DB 배치 스케쥴링 때문에 찾아본 팁. 참고 : https://stackoverflow.com/questions/14626982/rounding-time-up-to-nearest-6-minute-with-mysql 1. 내림 : 정각 분 구하기 - 2020-07-14 09:13:10 => 2020-07-14 09:13:00 SELECT NOW(), DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i') + INTERVAL CASE WHEN TIME_FORMAT(NOW(),'%s')
[DB]윈도우 함수 이용하여 직전 데이터 값 참조하기 장비의 이벤트 데이터에는 변경된 속성 정보만 포함되어 있는데 DB 에는 몇가지 이유로 해당 시점의 모든 속성들을 다 채워넣어 저장해줘야 한다. 즉, 해당 장비의 최종 정보를 DB 에서 가져온 후 이벤트가 발생한 속성값만 변경해서 추가 저장(insert)하는 방식. DB 조회를 줄이기 위해 발생 빈도, 장비 종류/건수 등에 따라 간단하게 직접 구현하거나 Redis 를 이용해서 처리했었는데 데이터를 이원화하면서 기존 방식을 재검토해봤다. 시계열 DB 에 가공하지 않고 이벤트 데이터 그대로 저장. 일정 주기로 시계열 DB에서 신규 데이터셋 구한 뒤 애플리케이션에서 속성 채워넣는 처리 후 조회용 DB 에 벌크 인서트. 기존 소스 재활용 염두에 두고 위 방식으로 생각 풀어 가고 있었는데 같이 논의하던 한 분이 r..
[Python]pandas 의 to_sql 이용한 Bulk insert DB 를 이원화할 일이 생겨서 기존 mariadb 랑 신규 timescaledb 간 데이터 동기화 구현이 필요해졌다. 본격 작업 전에 python 으로 mariadb -> timescaledb 스크립트로 몇 가지 테스트를 해보기로 했는데 얼마 전 pandas 의 read_sql_query 과 to_csv 편하게 써먹었던 기억 있어서 DB write 하는 기능도 었으려나 하고 찾아봤는데 to_sql 이란게 제공되네요. from sqlalchemy import create_engine import pandas as pd import pymysql import time def pg_connect(user, password, db, host, port=5432): url = 'postgresql://{}:{}@..
InfluxDB vs. TimescaleDB Which Time-Series Database is Better: TimescaleDB vs InfluxDB TimescaleDB vs. InfluxDB: purpose built differently for time-series data SQL vs. Flux: Choosing the right query language for time-series data Which Time-Series Database is Better: TimescaleDB vs InfluxDB In the new time-series database world, TimescaleDB and InfluxDB are two popular options with fundamentally different architectures. ..
cassandra DB GUI 클라이언트로 DBeaver community 이용하기 DBeaver 엔터프라이즈 버전과 달리 커뮤니티 버전은 cassandra 드라이버가 기본 제공되지 않으므로 직접 추가해줘야만 한다. 참고 : https://nowonbun.tistory.com/381?category=507118 Cassandra JDBC Driver(Datastax JDBC Driver) 추가 DBeaver 실행 후 Database > Driver Manager 에서 'New' 드라이버 설정 창에서 Driver Name : 맘대로 Url Template : jdbc:cassandra://{host}[:{port}]/{database} Default Port : 9042 하단 Libraries 탭에서 'Add Artifact' 누르고 Maven Artifact 설정 창에서 Group Id..