기본 콘텐츠로 건너뛰기

라벨이 DB인 게시물 표시

[DB]RDBMS vs NoSQL vs InMemory

어제 뉴스를 보면서 사람은 하루에 약 2Gb의 데이터를 자동차는 사람보다 더 많은 데이터를 비행기는 테라 바이트에 가까울 정도로 생산을 해낸다는 기사를 보았습니다. 저 또한 크롤러를 통해 하루에도 수많은 데이터를 만들어 내고 있습니다. 그렇다면 저 수많은 데이터를 관리를 해주는 곳이 필요할 텐데 그곳이 바로 database라는 시스템입니다. 하지만 데이터를 저장 하는 방식에 따라 크게 3가지의 종류로 나눠 볼 수 있습니다. 더 깊숙하게 들어가면 특정 어플리케이션에서만 사용하는 경량방식(SQLite)도 존재 하지만 이는 생략을 하도록 하겠습니다. 우선 빠르게 어떤 종류가 있는지 부터 훑어 보도록 하겠습니다. 이번 포스팅에서는 제가 여러 데이터 베이스를 사용하면서 각각의 데이터 베이스마다 어떤 식으로 데이터를 취급 하는지, 어떤 방식으로 데이터를 다뤄야 하는지 정리를 해보도록 하겠습니다. 1. 디비종류 1.1. RDB(Relational Database) oracle, mysql등으로 가장 많이 알려진 RDBMS 즉 RDB 입니다. 1.2. NoSQL 대표적인 예로 mongodb, hbase가 있습니다 mongodb같은 경우는 mean이 널리 퍼지면서 많이 알려진 db중 하나입니다. hbase같은 경우는 빅 데이터 처리를 한다면 누구나 한번쯤은 들어 봤을 겁니다. 1.3. In-Memory 대표적인 예로 redis가 있습니다 인 메모리 방식도 NoSQL방식에 속하지만 분리 해 보았습니다. 디비에서 가장 중요한 점은 각각의 데이터마다의 고유성을 만들어 내는 것입니다. 이것을 key 또는 Id 라고 합니다. 아마도 대부분이 Key라는 용어를 사용 할 겁니다. 하지만 디비에 따라 약간씩 Key를 부르는 용어가 다른데 rdb에서는 PK(Primary Key), FK(Foreign Key), nosql에서는 rowKey, partitionKey, sortingKey, id등으로 불리우고 있습

[db] mac에서 mysql환경설정 셋팅하기 1편 - 설치 및 접속, ERROR 2002 (HY000) : Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 해결방법

mac에서 mysql을 환경설정하는 방법에 대해서 다뤄보도록 하겠습니다. 그동안 aws에서 제공하는 rds를 사용했기 때문에 로컬 디비를 거의 안썼는데 테스트 하고 싶은것이 있어 로컬에 디비설치를 하려고 했더니 몇몇 문제가 발생하여 공유하기 위해 정리를 해봅니다. 크게 설치 및 접속, 보안 및 chatset에 대해서 알아보겠습니다. 우선 아래의 설명은 homebrew가 설치가 되어있어 brew를 사용할 수 있다는 가정하에 설명을 진행을 하도록 하겠습니다. $ brew install mysql brew를 이용하여 mysql을 설치를 해줍니다. 리눅스 같은 경우는 mysql-server를 설치를 하는데 mac에서는 mysql을 설치를 하네요 $ mysql -u root -p Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 접속을 시도해 보았더니 로컬 서버에 접속을 할 수 없다고 뜹니다. 에러발생 원인: 디비서버 열려있지 않음. 해결방법: 디비서버 실행 디비를 설치를 했지만 실행을 하지 않았기 때문에 위와같은 에러가 발생을 하게 됩니다. 만약 linux사용자라면 service를 이용하여 서버를 실행시키겠지만 맥에서는 service를 지원을 하지 않는것 같아 다른 방법으로 시도를 해보았습니다. $ mysql.server start Starting MySQL . SUCCESS! mysql.server 명령어를 실행을 시켜주게 되면 /usr/local/bin/mysql.server 가 실행이 됩니다.

[mysql] explain 활용 쿼리 최적화 하기 - Using temporary, Using filesort 제거

mysql에서는 explain이라는 키워드를 활용하여 질의문에 대한 정보를 얻을수 있다. 우선 테스트를 할 테이블부터 생성 1 2 3 4 5 CREATE   TABLE  Users(     id  INT   PRIMARY   KEY   AUTO_INCREMENT ,     email  VARCHAR ( 255 )  NOT   NULL ,     password  VARCHAR ( 255 )  NOT   NULL ); Colored by Color Scripter cs 1 2 3 4 5 6 7 8 9 CREATE   TABLE  UserInfos(     id  INT   PRIMARY   KEY   AUTO_INCREMENT ,     name  VARCHAR ( 255 )  NOT   NULL ,     age  INT   NOT   NULL   DEFAULT   0 ,      gender  INT   NOT   NULL   DEFAULT   0 , #여: 1 , 남: 2     UserId  INT   NOT   NULL ,      FOREIGN   KEY (UserId)  REFERENCES  Users(id)  On   DELETE   CASCADE ); Colored by Color Scripter cs 2개의 테이블을 생성을 하였다. UserInfos는 userId를 통해 users의 id를 참조를 하고있다. (2개의 테이블간 관계 성립) 1 SELECT   * FROM  UserInfos INNER JOIN Users  ON  Users.id  =  UserInfos.UserId; cs INNER JOIN 을 통해

[db] how to install and excute redis on ubuntu

인 메모리 기반 데이터 베이스인 레디스를 설치를 해보겠다. 정신건강상 윈도우에 설치를 하지 않고 리눅스에다가 직접 설치를.. 설치. $ sudo apt-get install redis-server 버전 확인 $ redis-server --version Redis server v=3.0.6 sha00000000:0 malloc=jemalloc-3.6.0 bits=64 build=687a319020fa42 위 처럼 뜨면 정상적으로 설치가 완료된 것이다. 해당 설정파일은 linux 버전에 혹은 환경에 따라 달라지지만  16.02버전에서는  $ cd /etc/redis; ls redis.conf redis-server.post-ip.d redis-server.pre-up.d redis-server.post-down.d redis-server.pre-down.d 와 같이 뜰것이다. 저기서 redis.conf가 설정 파일이다. 레디스는 기본적으로 6379포트를 사용한다. $ netstat -ntl ...중략 tcp 0 0 0.0.0.0:6379 .... ...중략 설치후 포트를 확인을 하면 해당 포트가 열려있을 것이다. 레디스 클라이언트 프로그램으로 해당 서버에 접속을 해보자. $ redis-cli 127.0.0.1:6379> 로 바뀌면서 접속이 완료된다. redis-cli로 접속을 할때 다양한 옵션을 줄 수있다. $ redis-cli --help help 옵셥은 주면 된다. 간단한 테스트를 진행을 해보겠다. get과 set을 이용하여 데이터를 저장, 조회를 할 수있다. 127.0.0.1:6379>get test (nil) 127.0.0.1:6379>set test 10 OK 127.0.0.1:6379>get test 10 레디스는 인 메모리 기반이기 때문에 서버를 끄면 해당 데이터가 다 날

[database] RDM and NoSQL

데이터베이스(DataBase) 데이터베이스는 체계화된 데이터의 모임이다. 즉, 작성된 목록으로 여러 응용 시스템들의 통합된 정보들을 저장하여 운영할 수 있는 공용 데이터의 집합체이다. 데이터베이스 특징 실시간 접근성 지속적인 변화 동시 공유 내용에 대한 참조 데이터베이스 분류 데이터베이스는 크게  RDB 와  NoSQL 의 두종류로 나뉜다. 또한 하드디스크 저장 방식이 아닌  In-memory  방식과, 기존의 서버 - 클라이언트 구조에서의 대규모 서비스가 아닌 모바일과 같은 환경에서 쓰이는 경량 데이터방식( SQLite )이 존재한다. RDB와 NoSQL에 대해 다뤄보도록 하겠다. RDB Relational database의 약자로 관계형 데이터베이스를 의미하며 데이터를 계층 구조가 아닌 단순한 표(관계)로 표현하는 형식이다. RDB는 데이터의 독립성이 높고, 고수준의  데이터 조작언어 를 사용하여 결합, 제약, 투영 등의 관계 조작을 통해 표현능력을 높일 수 있다. RDB는 한마디로 표현을 하면 excel이라고 표현할 수 있다. 이러한 RDB를 관리하는 시스템을  RDBMS(relational database management system) 라고 부른다. RDBMS의 데이터를 관리하기 위해 설계된 특수 목적 프로그래밍 언어인  SQL 을 사용한다. 종류 MySQL MariaD Oracl PostgreSQl SQL 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다. 데이터베이스의 자료의 검색과 관리, 데이터 베이스 스키마 생성 및 수정, 데이터베이스 객체 접근 조정 관리를 위해 만들어 졌다. SQL은 데이터베이스로부터 정보를 얻거나 갱신하기 위한 표준 대화식 프로그래밍 언어이다. CREATE   TABLE   직원  (     ID         INTEGER     P