NoSQL: 33개의 글
이번 포스팅은 몽고디비 CRUD 3번째 글입니다. 이번 내용은 문서 update부터 다루어볼 예정입니다. 혹시나 이전 포스팅을 못 보신분들은 간단히 아래 링크에서 참고 부탁드립니다. DB - MongoDB CRUD 사용방법 및 기타 사용방법 - 1 DB - MongoDB CRUD 사용방법 및 기타 사용방법 - 2 Update Documents 예제에 앞서 아래 문서들을 삽입해줍니다. 아래 문서들을 이용해서 예제를 진행할 것입니다. db.inventory.insertMany( [ { item: "canvas", qty: 100, size: { h: 28, w: 35.5, uom: "cm" }, status: "A" }, { item: "journal", qty: 25, size: { h: 14, w: 21..
몽고디비 CRUD 사용방법을 다루는 포스팅 2번째 글입니다. 만약 첫번째 글을 못보신 분은 아래 링크를 참조하시길 바랍니다. DB - MongoDB CRUD 사용방법 및 기타 사용방법 - 1 예제를 위해서 아래 문서들을 삽입합니다. db.inventory.insertMany( [ { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] }, { item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] }, { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] ..
이번 포스팅은 간단하게 MongoDB 사용법에 대해 다루어봅니다. 모든 쿼리는 특정 클라이언트 드라이버를 이용하는 것이 아니라, Shell을 이용하여 직접 쿼리를 작성해보는 내용입니다. 실습 이전에 혹시나 몽고디비 설치가 되어 있지 않다면 설치가 필요합니다. 필자는 Docker를 이용하여 몽고디비를 설치하였으며 방법은 아래 링크를 참조하시면 됩니다. 또한 모든 예제는 몽고디비 공식 도큐먼트를 기준으로 작성하였습니다. (번역에 익숙치 않아 가끔 잘못된 번역이 있을 수도 있습니다.) Docker - Docker로 MongoDB 설치하기. 이번 포스팅은 Docker를 이용하여 MongoDB를 설치하는 방법이다. 도커 실행 후 MongoDB 이미지를 받아준다. 이미지가 잘 받아진 것을 확인한다. 이제 내려받은 ..
이번 포스팅할 내용은 짧은 내용이다. 아래와 같은 Document가 있다고 생각해보자. {_id:"1234",name:"yeoseong",age:"28",address:"aaa"} 위의 도큐먼트에서 인덱스된 필드가 "name"필드라고 가정하자. 위의 도큐먼트를 검색하기 위해서는 아래와 같은 쿼리를 작성할 수 있을 것이다. db.users.find({name:"yeoseong"}) 위 쿼리의 조건에는 이미 인덱스로 스키마가 등록된 필드이기 때문에 데이터를 풀스캔하는 것이 아니라 인덱스를 서칭해서 결과값을 받아올 것이다. 하지만 조건 값에 일부로만 검색을 하면서 인덱스를 스캔하기 위해서는 어떻게 해야할까? 인덱스 프리픽스(Prefix) 스캔 : 문자열 좌측 일치 검색 문자타입의 필드 인덱스가 있고 일부 문자..
샤딩(Sharding)은 데이터를 여러 서버에 분산해서 저장하고 처리할 수 있도록 하는 기술을 말한다. MongoDB의 복제와 샤딩은 상호보완적이지만 엄연히 목적이 다르다. 복제는 고가용성을 위한 솔루션이며 샤딩은 분산 처리를 위한 솔루션이다. 그래서 몽고디비는 고가용성과 대용량 분산 처리를 위해 복제와 샤딩을 모두 적용한다. 몽고디비에서 샤딩을 적용하려면 샤드 클러스터를 구축해야 하는데, 이를 위해서는 파티션된 데이터의 범위와 샤드 위치 정보 등의 메타 정보를 저장하기 위해 컨피그 서버(Config Server)가 필요하다. 그리고 응용 프로그램이 필요한 데이터를 조회하거나 저장하려면 "mongos"라는 라우터 서버(Router Server)가 필요하다. 라우터는 쿼리 수행에 있어서 프록시(Proxy)..
몽고디비(MongoDB)에서는 마스터-슬레이브 복제와 레플리카 셋 복제라고 하는 두 가지 방식의 복제를 지원한다. 마스터-슬레이브 복제는 몽고디비가 만들어졌던 초기에 사용하던 복제 방식으로, 몽고디비3.2 버전에서는 권장하지 않는 방식이다. 또한 마스터-슬레이브 복제 방식은 마스터의 장애에 대한 페일오버를 관리자가 수동으로 처리해야 하며, 최근 버전의 몽고디비에서는 거의 기능이 개선되거나 보완되지 않고 있다. 그에 반해서 레플리카 셋 복제는 안정되고 많은 부분 자동화되어 처리될 수 있게 개발됐다. 복제란? 복제는 여러 서버가 서로의 데이터를 동기화하는 것을 의미하는데, 서로 주고받는 데이터에 따라서 논리 복제와 물리 복제로 나눌 수 있다. DRBD(Distributed Replicated Block De..
요즘 시대에는 구글이나 페이스북과 같은 글로벌 서비스를 제공하는 회사가 늘어나면서 방대한 양의 데이터를 충분히 빠른 속도로 처리할 수 있는 데이터베이스에 대한 필요성이 대두되기 시작했다. 이런 대용량 데이터 서비스에서는 기존의 RDBMS에서 처리하기는 힘들다.(비용적인 문제, 데이터를 분산하기 위해 수십,수백대의 서버로 분산시켜야함) 물론 MySQL 같이 오픈 소스 RDBMS는 비용적인 문제를 해결해주기는 하였다. 하지만 이러한 MySQL도 빅데이터를 처리하기에는 문제가 있다. 만약 엄청난 양의 데이터가 있고, 매번 데이터베이스 스키마에 맞게 데이터를 조작하여 작업을 해야한다면 얼마나 비효율적이고 힘든 작업일까.. 여느 NoSQL과 같이 MongoDB는 이러한 문제를 해결하기 위해 적합한? 데이터베이스이..
활용 목표 : 어떤 유저들의 상태를 비교하여 값이 같다면 리스트에서 삭제하는 기능을 테스트해 보겠습니다. Redis에서 Insert시 unique를 보장하는 것은 Sets 입니다. Sets에 입력되는 값들은 단순 key 식별자가 가능해서 해당 key들의 상태 값들의 변경을 담을 수 없습니다. 그래서 Sets에서는 특정 key값이 이미 존재 하는지, 존재 하지 않는지를 식별하는 tree로 사용하고, 해당 key값이 가지는 부가적인 상태들을 Hash에 담아 관리 하며, 특정 값이 삭제할 상태가 되었을때 Sets와 Hashs에 존재 하는 값을 삭제 하는 것을 구현해 보겠습니다. 상황 설정 Guild Chatting Room 의 번호를 1,2,3..(Guild의 PK) 으로 관리 합니다. FrontEnd에서는 ..
개요 RDB의 stored procedure와 비슷한 용도로 사용이 가능 합니다. 자주 사용되는 여러 명령어로 묶인 코드를 script로 호출하여, Redis Server Side 에서 한번에 처리 되도록 처리할 수 있습니다. 이를 적절히 잘 활용하면 성능을 향상 시킬수 있으며, 코드도 간단해 집니다. Redis는 single threaded 이므로 Lua Script 실행중에 인터럽트 되지 않습니다. (Atomic) Redis에서 RDB의 transaction과 비슷한 기능을 사용 할 수 있는 기능을 제공 합니다. MULTI : 트랜잭션시작, EXEC : 커밋, DISCARD : 롤백, WATCH : 변경감시, UNWATCH : 변경감시해제 을 이용한 방법과 lua script를 이용하는 방법이 존재 ..
개요 Redis Cluster는 데이터가 자동으로 sharding 되우 Redis node로 분산되어 들어가도록 해줍니다. - 16384개의 hash slot을 사용하고 key modulo 16384를 사용하는 CRC16를 사용하고 hash slot을 계산 합니다. - 대량의 memory를 사용 하는 경우 scale out을 위해 사용될 수 있습니다. cluster bus port 는 (client pot + 10000) 으로 설정 되며 다른 node cluster에게 항상 개방되어 있어야 합니다. 구성된 cluster nodes들중 하나가 다운이 되면, 다른 살아 있는 nodes들도 더 이상 입력을 받지 않습니다. 이때 slave가 존재 한다면 해당 slave가 mater node가 되어 대체 되어 정..