1. 인덱스 대상 후보컬럼 선정 기준
  • 분포도가 좋은 컬럼인가?
    • 분포도의 기준은 1%이내
    • ex) 주문 테이블의 ‘배송여부’ 컬럼은 Y/N으로 분포도는 50%이다. 논리적식별은 50%이지만 대부분의 실데이터는 Y가 될것이고 분포도가 한쪽으로 극단적으로 쏠리기 때문에 인덱스 후보로 해도된다.
    • ex) 고객 테이블의 성별은 남자/여자 로 50%이다. 하지만 이는 변하지 않는 데이터 이며, 50%의 분포도를 가지므로 인덱스가 딱히 필요치 않다
    • 결합 인덱스의 경우도 해당 결합된 데이터의 분포도를 추산하여 인덱스를 선정한다.
  • 갱신이 자주 발생하지 않는 컬럼인가?
    • update가 발생하면 index를 갱신하기 때문에 성능에 좋지 않지만! 꼭 필요한 경우에는 복합인덱스로 해야 한다. ( 검색 조건에 필요한 경우에 )
  • 조건절에서 자주 사용되는 컬럼인가?
    • 조건절에 있다고 무조건 인덱스를 설정해선 안된다. 쿼리의 사용 빈도를 측정후 해당 쿼리에 사용되는 조건절의 컬럼에 대해서만 인덱스를 추가해줘야 한다. 
    • 만일 하루 10번 실행 / 1000번 실행되는 두개의 쿼리에서 포함된 조인절이 있다면 해당 조건절의 인덱스, 1000번 실행되는 쿼리의 인덱스만 추가해줘도 된다. (과도한 인덱스 추가는 성능의 저하를 가져온다.)
  • 조인의 연결고리에 사용되는 컬럼인가?
  • 소트 발생을 제거하는 컬럼인가?
    • ex) select * from 주문 
      where 상품코드 = ‘’ and 배송여주  = ‘’
      order by 주문일자 desc
 일 경우 두가지 인덱스를 고민해야 한다. 
       인덱스1 : 상품코드 + 배송여부
       인덱스2 : 상품코드 + 배송여부 + 주문일자
소트부하가 크다면 2번으로 인덱스부하가 크다면 1번으로 해야 한다. ( 통계적으로 알수 없으니 대부분2번으로 한다. )


2. 인덱스 생성시 유의사항
  • 인덱스 생성시 유사 인덱스가 있는지 확인
    • 유사 인덱스끼리의 경합에 의해 더 느린 인덱스를 실행하여 성능문제 발생
  • 미사용 인덱스 일 경우에만 삭제하기


3. RBO / CBO
  • RBO(Rule Based Optimizer) - 현재는 사용되지 않음
  • CBO ( Cost Based Optimizer) - 주기적으로 통계정보(AO : Analyze Object)를 갱신하여 가장 적게드는 실행계획을 결정


4.  쿼리와 인덱스
  • select * from 주문, 고객
    where 주문.고객번호 = 고객.고객번호
    and 주문.주문일자 = ?
    and 고객.고객명 = ?
  • 위와 같은 쿼리에선 인덱스를 주는 방법은 
    • 주문일자로 검색할 경우 : 주문일자 + 고객.고객번호 
    • 고객명으로 검색할 경우 : 고객명 + 주문.고객번호
    • 주문일자+고객명으로 검색할 경우 : 주문일자 + 고객.고객번호 + 주문.고객번호 + 고객명
    • 위의 세가지 경우 3번은 optimizer가 최소 비용으로 선택하지만, 1, 2의 검색일 경우 타지 않을 수 있다
    • 검색의 조건에 따라 인덱스가 필요하며, 필요한 경우 힌트를 이용해 강제로 인덱스를 지정해야 한다


5. 테이블 수정과 인덱스
select * 
from 사원, 교육계획, 과목, 강사, 교육평가
where 사원.사원번호 = 교육계획.사원번호
and 교육계획.과목번호 = 과목.과목번호
and 교육계획.강사번호 = 강사.강사번호(+)
and 교육계획.교육번호 = 교육평가.교육번호
and 사원.성명 = ‘홍길동’
and 과목.과목명 = ‘수학’
and 교육평가.평정 = ‘A+’

위의 쿼리를 수정및 인덱스 추가 일 경우
  1. 최초 진입형 테이블 우선
    1. join의 첫번째 사원 -> 교육계획 -> ? -> ? -> ?
  2. outer 도바 inner가 먼저 
    1. 강사 테이블의 경우 outer이므로 사원 -> 교육계획 -> ? -> ? -> 강사
  3. where절에서 데이터를 축소 할수 있는것 부터
    1. 과목.과목명 = ‘수학’ 은 몇개의 과목명 분포가 있는지 알수 없음 반면 교육평가.평점 = ‘A+’일 경우 F~A까지의 분포가 예상되므로 먼저 불러들어 데이터 축소를 할수 있음  사원 -> 교육계획->교육평가->과목->강사 순으로 쿼리 수정
  4. 최종적으로 다음과 같이 수정
    1. select * from 사원, 교육계획, 교육평가, 과목, 강사
      where 사원.사원번호 = 교육계획.사원번호
      and 교육계획.교육번호 = 교육평가.교육번호
      and 교육계획.과목번호 = 과목.과목번호
      and 교육계획.강사번호 = 강사.강사번호(+)
      and 사원.성명 = ‘홍길동
      and 교육평가.평점 = ‘A+
      and 과목.과목명 = ‘수학



6. 수직분할 / 수평분할
    만약 한 테이블에 수많은 컬럼이 존재 한다면 디스크의 여러 블록에 데이터가 저장되므로 I/O 성능 저하를 불러온다. 
- 로우체이닝 : 길이가 너무 커서 하나의 블록에 저장되지 못하고 다수의 블록에 나누어져 저장
- 로우마이그레이션 : 수정된 데이터를 해당 테이터 블록에 저장하지 못하고 다른 블록의 빈 공간에 저장

- 수직분할 : 컬럼을 기준으로 분할하는 것으로 일반적으로 정규화에 속한다 
- 수평분할 : 대용량 테이블을 같은 테이블을 여러개 생성하여 일정한 구분에 따라 데이블을 나누는 것으로 보통 시간적(일별 / 월별 / 연도별 데이터), 지역별(서울, 경기 등 ) 으로 나누어 테이블을 관리하여 성능을 향상시킨다.

+ 하나의 테이블에 대량의 데이터가 있다면 파티션 분할을 통해 성능 개선에 도움을 줄수 있다.
  

    



WRITTEN BY
No.190
세계정복의 시작점

트랙백  0 , 댓글  0개가 달렸습니다.
secret



ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value


Mysql 버전이 높아지면서 보안관련 인한 오류


User 생성시 Host, User ,Password, ssl_cipher, x509_issuer, x509_subject 를 입력 필수


ssl_cipher, x509_issuer, x509_subject 값은 '' 빈값을 입력.



$ insert into user (Host, User, Password, ssl_cipher, x509_issuer, x509_subject ) values('localhost','사용자명',password('비밀번호'),'','','');




ERROR 1364 (HY000): Field 'authentication_string' doesn't have a default value


* mysql 5.5 에서 user 생성시 authentication_string 필드 추가 필수. '' 값으로 넣기.



$ insert into user (Host, User, Password, ssl_cipher, x509_issuer, x509_subject, authentication_string) values('localhost','사용자명', password('비밀번호'),'','','','');



WRITTEN BY
No.190
세계정복의 시작점

트랙백  0 , 댓글  0개가 달렸습니다.
secret

SET sql_mode = ''


or


set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';



WRITTEN BY
No.190
세계정복의 시작점

트랙백  0 , 댓글  0개가 달렸습니다.
secret

mysql int bigint

Database/DB 2016.06.20 11:51

mysql을 사용하면서  몰랐던 정보들을 알아서 적어본다. 


int / bigint 에 관한 내용인데 


먼저 int / bigint 의 최대값은 unsigned 일 경우 각각 4억과 4천경이다(저만큼 넣을 데이터가 있는건가..)......


int는 4바이트(자릿수 10자리)


bigint는 8바이트로 (자릿수 20자리) 로 생각면 된다. 


자세한 사항은 공식 홈피 확인


https://dev.mysql.com/doc/refman/5.5/en/integer-types.html




두번째로 대부분 많은 분들이 테이블 선언시 int(4) 하면 4자리까지만 들어간다고 생각하실수도 있는데 (실은 내가 그랬다.)


만일 3자리 숫자 999 를 넣었다면 출력될때 0999 로 해당 4자리이하일때 앞에 0을 붙여서 내보낸다. (zerofill 옵션)


물론 저장할때엔 그냥 999로 저장함. 


그러니 테이블 생성할때 int(숫자)라면 단순히 zerofill 옵션이니 필요없다면 굳이 사용안해도 된다. (자릿수를 위한거라면 TINYINT / SMALLINT / MEDIUMINT 을 써야 옳다.)





WRITTEN BY
No.190
세계정복의 시작점

트랙백  0 , 댓글  0개가 달렸습니다.
secret


재미있는것을 발견( 지금까지 몰랐던것을 발견)!!



테이블간의 관계인 fk( Foreign Key Constraint) 가 설정되어 있을때 

fk 생성시 해당 칼럼을 not null 속성을 넣지 않았다. (이건 가능함)

헌데 not null  속성을 넣을려면


먼저 해당 fk 를 지운후 alter 로 notnull 속성을 넣어준후 다시 fk 속성을 넣어줘야 한다. 


여기까진 문제가 없다. 

이번엔 unsigned 속성을 넣어보려 한다. 

헌데  fk의 기본이 되는 pk 속성중에 unsigned 속성이 없다면 어떻게 되느냐?!


아까와 같이 

"먼저 해당 fk 를 지운후 alter 로 unsigned 속성을 넣어준후 다시 fk 속성을 넣어줘야 한다. "

에서 unsigned 속성을 넣은후 다시 fk 속성을 넣을 때 에러가 발생한다!!!

왜냐하면 fk의 pk의 속성엔 unsigned 속성이 없으니까!!

문제는 이때 fk는 지워졌지만 unsigned 속성은 정상적으로 들어가 있다. (fk 주기 전에 속성을 변경했으므로)


그래서 "어라?! 에러가 났는데 잘 되어 있네?!" 라고 생각하도 진행하다가 fk가 없어진거 발견.

헌데 fk를 넣을려고 하면 그냥 해당 FK넣을수 있는 칸이 생성되질 않는다. (mysql workbench 시)

이게 뭐야.. 하면서 몇시간을 허비.. 


이래서 IDE자동화가 무서운 겁니다. 

오늘의 교훈!! IDE를 너무 믿진 마세요!!



- 아마 콘솔로 작업했으면 에러 메시지 보고 바로 해결했을 경우이다. 





WRITTEN BY
No.190
세계정복의 시작점

트랙백  0 , 댓글  0개가 달렸습니다.
secret



spark 내 maven 으로 하둡관련 설치 시  아래와 같이 에러가 난다면 


 [WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireMavenVersion failed with message:

Detected Maven Version: 3.0.5 is not in the allowed range 3.3.3.

[INFO] ------------------------------------------------------------------------

[INFO] Reactor Summary:

[INFO] 

[INFO] Spark Project Parent POM .......................... FAILURE [2:25.599s]

[INFO] Spark Project Launcher ............................ SKIPPED

[INFO] Spark Project Networking .......................... SKIPPED

[INFO] Spark Project Shuffle Streaming Service ........... SKIPPED

[INFO] Spark Project Unsafe .............................. SKIPPED

[INFO] Spark Project Core ................................ SKIPPED

[INFO] Spark Project Bagel ............................... SKIPPED

[INFO] Spark Project GraphX .............................. SKIPPED

[INFO] Spark Project Streaming ........................... SKIPPED

[INFO] Spark Project Catalyst ............................ SKIPPED

[INFO] Spark Project SQL ................................. SKIPPED

[INFO] Spark Project ML Library .......................... SKIPPED

[INFO] Spark Project Tools ............................... SKIPPED

[INFO] Spark Project Hive ................................ SKIPPED

[INFO] Spark Project REPL ................................ SKIPPED

[INFO] Spark Project YARN ................................ SKIPPED

[INFO] Spark Project Assembly ............................ SKIPPED

[INFO] Spark Project External Twitter .................... SKIPPED

[INFO] Spark Project External Flume Sink ................. SKIPPED

[INFO] Spark Project External Flume ...................... SKIPPED

[INFO] Spark Project External Flume Assembly ............. SKIPPED

[INFO] Spark Project External MQTT ....................... SKIPPED

[INFO] Spark Project External MQTT Assembly .............. SKIPPED

[INFO] Spark Project External ZeroMQ ..................... SKIPPED

[INFO] Spark Project External Kafka ...................... SKIPPED

[INFO] Spark Project Examples ............................ SKIPPED

[INFO] Spark Project External Kafka Assembly ............. SKIPPED

[INFO] Spark Project YARN Shuffle Service ................ SKIPPED

[INFO] ------------------------------------------------------------------------

[INFO] BUILD FAILURE

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 2:29.749s

[INFO] Finished at: Tue May 17 12:55:42 KST 2016

[INFO] Final Memory: 21M/52M

[INFO] ------------------------------------------------------------------------

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:1.4:enforce (enforce-versions) on project spark-parent_2.10: Some Enforcer rules have failed. Look above for specific messages explaining why the rule failed. -> [Help 1]



spark 으로 다운받은 maven 이 버전이 낮아서 생기는 에러라고 합니다. 


헌데 spark 최신버전에서도 이게 고쳐지지가 않다는....(어쩌라는거지??)


허면 직접 maven 을 설치해서 실행하면 됩니다. (maven 3.3.3 이상 버전으로 설치 해야 합니다.)



sudo apt-get purge -y maven


$ wget http://apache.cs.utah.edu/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz


$ tar -zxf apache-maven-3.3.3-bin.tar.gz


$ sudo cp -R apache-maven-3.3.3 /usr/local


$ sudo ln -s /usr/local/apache-maven-3.3.3/bin/mvn /usr/bin/mvn


$ echo "export M2_HOME=/usr/local/apache-maven-3.3.3" >> ~/.profile


$ source ~/.profile


$ echo "Maven is on version `mvn -v`"



Maven is on version Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T20:57:37+09:00)

Maven home: /usr/local/apache-maven-3.3.3

Java version: 1.7.0_101, vendor: Oracle Corporation

Java home: /usr/lib/jvm/java-7-openjdk-amd64/jre

Default locale: en_US, platform encoding: UTF-8

OS name: "linux", version: "3.19.0-25-generic", arch: "amd64", family: "unix"



버전 확인 완료.


다시 스팍 설치 


$ mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package 


설치 됨!!!!


'Database > spark' 카테고리의 다른 글

spark maven error  (0) 2016.05.19

WRITTEN BY
No.190
세계정복의 시작점

트랙백  0 , 댓글  0개가 달렸습니다.
secret


replica set(이하 리플리카셋)은 여러 대의 서버에 원본을 복사해 두고,

장애가 발생시  자동으로 장애 이외의 디비 중 하나를 선택하여 원본 디비처럼 사용할 수 있도록 있습니다. 이로 인해 서비스를 끊기지 않고 지속적으로 유지할 수 있습니다. 

리플리카셋에서 첫번째 입력을 담당하는 서버를 primary 서버라 부르며 그밖의 서버를 secondary 서버라 부릅니다. 프라이머리 서버는 세컨더리 서버를 2초 마다 상태 체크하여 데이터 동기화를 하기 위해 HeartBeat(일종의 ping 확인)를 확인합니다. 이때 세컨더리서버가 사용할수 없더라도 프라이머리 서버는 살아있으므로 서비스는 유지 됩니다. 

만일 프라이머리 서버에 이상이 생길 경우 세컨더리서버 끼리의 선거를 통해 프라이머리서버를 선출하여 작동하게 됩니다. 이때 세컨더리->프라이머리 서버로 변환시 디비에 대한 입출력데이터는 손실될수 있습니다. 

리플리카셋 또한 샤딩과 마찬가지로 저장할 공간을 만들고 서버 셋팅만 해주면 됩니다.

 $ mkdir repl1 repl2 repl3

먼저 리플리카셋에 저장할 디렉토리를 생성합니다. 

$ sudo mongod --replSet replicasetTest -dbpath /data/repl1 -port 10000

$ sudo mongod --replSet replicasetTest -dbpath /data/repl2 -port 10001

$ sudo mongod --replSet replicasetTest -dbpath /data/repl3 -port 10002


서버를 실행하였으니 이제 접속하여 리플리카셋을 설정해 줍니다. 먼저 첫번째 서버에 접속합니다. 

$ sudo mongo localhost:10000

> var config={_id:'replicasetTest', members:[{_id:0, host:'localhost:10000'}, {_id:1, host:'localhost:10001'}, {_id:2, host:'localhost:10002'}] };

리플리카셋으로 지정할 서버들의 목록을 만들어준 후 

> rs.initiate(config);

리플리카셋으로 등록합니다. 


등록후 위와 같이 현재 첫번째 서버가 프라이머리서버가 되었음을 확인할수 있습니다. 

> exit


두번째 서버로 접속하여 확인해 보면 

$ sudo mongo localhost:10001


위와 같이 세컨더리 서버가 되었음을 확인할수 있습니다. 

>exit

$ sudo mongo localhost:10000

다시 첫번째 프라이머리 서버로 들어가서 서버를 종료시켜 보겠습니다. 

> use admin;

> db.shutdownServer();

프라이머리 서버 셧다운 후 두번째 혹은 세번째 서버로 접속해 보면 (어떤 서버가 프라이머리 서버가 됐는지는 접속해야 알수 있습니다. 서버 셋팅시 서버에 대한 우선순위를 지정하여 어떤 서버가 다음 프라이머리 서버가 될수 있도록 할수 있으나 실제 서비스 상에서는 어떤 서버가 프라이머리 서버가 되든 서비스가 죽지 않기 때문에 알 필요가 없습니다. )

$ sudo mongo localhost:10001 

혹은 

$ sudo mongo localhost:10002


저의 경우엔 세번째 서버가 프라이머리 서버가 되어 동작함을 확인 할수 있습니다. 

이렇듯 끊임없는 서비스 제공을 위해서 레플리카셋은 꼭 필요한 기능입니다. 

'Database > Nosql' 카테고리의 다른 글

mongodb Replica Set  (0) 2016.05.12
mongodb sharding  (0) 2016.05.11
mongodb 기본 CRUD  (0) 2016.05.10
mongodb 기초 쿼리  (0) 2013.03.03
초간단 ubuntu 에 mongodb 설치하기  (0) 2013.03.01

WRITTEN BY
No.190
세계정복의 시작점

트랙백  0 , 댓글  0개가 달렸습니다.
secret

mongodb sharding

Database/Nosql 2016.05.11 23:50


mongodb sharding( 이하 샤딩으로 표기) 은 mongodb끼리의 데이터 복제함으로서 다른 서버와의 동기화 및 빅데이터를 저장하기 위해서 분산 저장을 하는것이  샤딩의 목적입니다. 





샤딩은 mongodb 두대로도 가능하지만 최소 3대를 권장하며, 실질적인 데이터 복제가 아닌 mongodb내의 oplog에 의한 명령어를 복사/ 실행함으로서 데이터를 유지합니다. 


여기서는 한 컴퓨터에서 서버를 3대를 실행합니다.

먼저 저장소가 서로 다르게 되어야 하므로 폴더를 따로 만들어 줍니다.

$ mkdir shard1 shard2 shard3


$ sudo ./mongod -shardsvr -dbpath /data/shard1 -port 40001

$ sudo ./mongod -shardsvr -dbpath /data/shard2 -port 40002

$ sudo ./mongod -shardsvr -dbpath /data/shard3 -port 40003




총 3대의 mongo서버를 실행하며 각각 저장 폴더 경로와 포트가 달라야 합니다. 

이제 위의 3대의 샤딩 서버의 설정을 감독하는 config 서버를 만들어줍니다. config 서버는 샤딩서버들에 어떤 데이터들이 어떤 식으로 분산되는지 감독하는 기능을 합니다. 

$ mkdir config


$ sudo mongod --configsvr -dbpath /data/config -port 50001

config 서버도 폴더와 포트를 다르게 하여 실행합니다. 



$ sudo ./mongos --configdb localhost:50001 --port 50000 --chunkSize 1

이제 mongos 로 서버를 실행하는데 config의 패스와 청크파일사이즈를 지정해야 합니다. 청크파일은 파일이 저장되는 파일의 단위이며 기본 단위는 M입니다. 



이제 서버로 접속합니다. 

$ sudo ./mongo localhost:50000

기존엔 디폴트 포트로 접속하였으나 이번엔 50000포트로 지정하였으니 위와 같이 경로:포트를 지정해서 접속합니다. 

이제부터는 샤딩에 관한 설정을 해 줘야 합니다. 

> use admin;


>  db.runCommand({addshard:"localhost:40001"});

>  db.runCommand({addshard:"localhost:40002"});

>  db.runCommand({addshard:"localhost:40003"});

샤딩으로 쓰이는 서버들을 등록해 줍니다. 다음으로 샤딩할 콜렉션을 지정해 줍니다. 

> db.runCommand({ listShards : 1});

> db.runCommand({enablesharding: 'person'});

> db.runCommand({ shardcollection : 'persion.users', key :{ _id:1}});

이로써 모든 준비가 완료 되었습니다. 




이제 부터는 어떻게 샤딩이 되는지 알아보겠습니다. 

> use person;

> for(i=0; i<1000000; i++){ db.users.save({name : 'name'+i}); }

users 콜렉션에 10만개의 데이터를 집어 넣어 봅니다. ( 입력되는데 사양에 따라 시간이 걸립니다. )

> db.users.find({name:'name999'}).explain();

뒤에 explain()을 붙여주면 해당 데이터의 샤딩 정보를 보여줍니다. 




위의 이미지에서 보는 바와 같이 name999는 샤딩 서버1 / 서버2 / 서버3 모두 데이터가 있는것으로 나옵니다. 사실 3대의 서버 어느 한곳에 데이터가 있지만 분산서버이기 떄문에 한서버처럼 행동하기때문에 사용자/개발자 입장에서는 한대의 서버로 운영하는것과 같이 작동합니다. 


> sh.status();

현재 샤딩에 대한 정보를 볼수 있습니다.




위의 이미지에서 아래쪽에 chunks의 갯수가 보입니다. 각 서버의 청크(데이터단위)는 각 서버에 거의 동일하게 들어가지만 몇개의 차이가 당연히 날수 있습니다. 데이터를 분산해서 저장하기 때문에 어느 한쪽에 몇개의 데이터가 더 저장될수 있습니다. 


> use admin;

> db.runCommand({ removeshard : 'localhost:40001' });

서버1의 샤딩을 멈췄습니다. 이제 서버1에 있던 청크들은 서버2와 서버3로 최대한 균등하게 이동하게 됩니다.  콘솔창을 보시면 분주하게 복사하는게 보입니다. ( 약간의 시간이 걸립니다.)

> sh.status();





다시 샤딩의 상태를 보면 서버1에 있던 청크들이 다른 서버들로 이동하여 청크의 갯수가 달라졌음을 확인할수 있습니다. 

'Database > Nosql' 카테고리의 다른 글

mongodb Replica Set  (0) 2016.05.12
mongodb sharding  (0) 2016.05.11
mongodb 기본 CRUD  (0) 2016.05.10
mongodb 기초 쿼리  (0) 2013.03.03
초간단 ubuntu 에 mongodb 설치하기  (0) 2013.03.01

WRITTEN BY
No.190
세계정복의 시작점

트랙백  0 , 댓글  0개가 달렸습니다.
secret



1. insert (save)

>  db.scores.save({num:99}); 

db.scores.save({num:99}) -> scores 콜렉션에 num:99 를 넣으시요. 

데이터 확인 find()

db.scores.find();


db.scores.find(); -> scores 콜렉션에 있는 모든 데이터를 가져오시오.


>  for(i=0; i<10; i++){ db.scores.save({num:i, name:"name"+i}); }

scores에 num과 name 값을 열번 넣으시요.

db.scores.find();





2. Read (find)


> db.scores.find({num:0});

db.scores.find({num:0}); -> num이 0인것을 찾으시오

_id는 mongodb가 각각의 데이터에 부여하는 객체 id 값 입니다. (고유값) 해당 id로 찾기 위해선 objectid 로 변환해줘야 합니다. 





db.scores.find( {num: {$gt:5}} );

db.scores.find({num: {$gt:5}}); -> num의 값중 5보다 큰값을 찾으시오.



db.scores.find( {num: {$lt:5}} );

db.scores.find({num: {$lt:5}}); -> num의 값중 5보다 작은 값을 찾으시오.



db.scores.find({num: {$gte:5, $lte:7}});

db.scores.find({num: {$gte:5, $lte:7}}); -> num의 값중 5보다 크거나 같으며 7보다 작거나 같은 값들을 찾으시오.


db.scores.find({ $or : [{num : {$gt: 1, $lt : 3} }, { num : {$gte: 7, $lt : 9}}] });

db.scores.find({ $or : [{num : {$gt: 1, $lt : 3} }, { num : {$gte: 7, $lt : 9}}] });

-> num에서 1보다 크며 3보다 작은 값과 7보다 크거나 같으며 9보다 작은 값들을 모두 보여주시오. 



db.scores.find({ num : { $in : [0, 99]} });

db.scores.find({ num : { $in : [0, 99]} }); -> num의 값중 0과 99인 값을 찾아 보여주시오.


db.scores.find({ num : { $nin : [0, 99]} });

db.scores.find({ num : { $nin : [0, 99]} }); -> num의 값중 0과 99인 값을 제외한 값을 찾아 보여주시오.





3. Update 


db.scores.update({num: 9} , {num: 9, name : "name99"});

db.scores.update({num: 9} , {num: 9, name : "name99"}); -> num이 9 인 데이터의 name를 name99로 변경하시오.



4. Delete(remove)


db.scores.remove({num:99});

db.scores.remove({num:99}); -> num이 99인 값을 삭제하시오.



'Database > Nosql' 카테고리의 다른 글

mongodb Replica Set  (0) 2016.05.12
mongodb sharding  (0) 2016.05.11
mongodb 기본 CRUD  (0) 2016.05.10
mongodb 기초 쿼리  (0) 2013.03.03
초간단 ubuntu 에 mongodb 설치하기  (0) 2013.03.01

WRITTEN BY
No.190
세계정복의 시작점

트랙백  0 , 댓글  0개가 달렸습니다.
secret



만일 mysql 이 설치가 되었고 ps -ef | grep mysql 현 상태에서 서비스가 실행중이라면 

실행하고 다시 접속하면 정상적으로 실행된다. 

<pre class="brush:javascript">

mysqld_safe --user=root &

</pre>




WRITTEN BY
No.190
세계정복의 시작점

트랙백  0 , 댓글  0개가 달렸습니다.
secret