12월, 2017의 게시물 표시

(MongoDB) Update

* Update는 인자값이 두개가 아니라 총 4개가 있다. 예) db.test.update( { 조건 } , { 변경값 }, true|false, true|false) 1번인자 : 조건 2번인자 : 변경조건 3번인자 : upsert(upsert란? 있으면 업데이트 없으면 insert하라는 것, 기본값은 false) 4번인자 : 멀티라인 조건여부(기본값 false) * 몽고디비 업데이트시 새로운 필드를 추가하는 경우는 $set을 사용하고, 기존에 있는 필드에 다른 값을 더 추가하고 싶은 경우 $push나 $addToSet를 사용한다. 단, $addToSet은 값을 추가할 때, 중복되지 않도록 확인한다.

(ElasticSearch) 파일을 이용한 데이터 처리

*curl 명령을 이용해 데이터를 입력할 때에는 입력할 데이터의 내용을 -d 뒤에 추가하는 형식으로 입력했다. 이외에도 입력할 데이터의 내용을 미리 파일에 기록한 뒤 다음과 같이 @{파일명}을 지정해 입력할 수 있다. curl -X{메소드} "http://host:port/{인덱스}/{타입}/{도큐먼트id} -d @{파일명}

(ElasticSearch) 데이터 처리

* 삽입 curl -XPUT "http://localhost:9200/books/book/1" -H 'Content-Type:application/json' -d ' {     "title" : "ElasticSearch Guide"    ~~~ } ' 해당 데이터만 보고 싶은 경우는 뒤에 _source를 붙인다. * 조회 curl -XGET http://localhost:9200/books/book/1/_source _source를 붙이지 않은 경우는  메타 정보도 함께 표시된다. * 삭제 curl -XDELETE "http://localhost:9200/books/book/1" 이때는 도큐먼트 데이터를 삭제한 것으로 도큐먼트의 메타정보는 여전히 남아있다. 이후 해당 도큐먼트에 다시 데이터를 업데이트 하면 _version 이 증가 하는 것을 볼 수 있다. 그러나 모든 도큐먼트를 일괄 삭제하면 curl -XDELETE "http://localhost:9200/books/book" 메타 정보도 삭제되는 것을 볼 수 있다. *데이터 업데이트(_update) API 도큐먼트 데이터 업데이트 API는 두 개의 매개변수인 doc와 script를 이용해서 데이터를 제어할 수 있다. doc매개변수는 도큐먼트에 새로운 필드를 추가하거나 기존 필드 값을 변경하는 데 사용한다. script매개변수는 좀 더 복잡한 프로그래밍 기법을 사용해서 입력된 내용에 따라 필드의 값을 변경하는 등의 처리에 사용한다. curl -XPOST http://host:port/{인덱스}/{타입}/{도큐먼트 id}/_update -d '{업데이트 명령어}' 예를들어, 기존의 값에 "Category"필드를 추가하겠다.

(ElasticSearch) 데이터 구조 비교

관계형 DB          엘라스틱서치 데이터베이스      인덱스(Index) 테이블(Table)     타입(Type) 열(Row)          도큐먼트(Document) 행(Column)        필드(Field) 스키마(Schema)  매핑(Mapping) curl -X{메소드} http://host:port/{인덱스}/{타입}/{도큐먼트id} -d '{데이터}'

(ElasticSearch) 엘라스틱서치 환경설정 (Elasticsearch.yml)

* 클러스터 cluster.name : elasticsearch 별도로 설정하지 않으면 클러스터명은 elasticsearch 가 된다. 이름을 변경할 떄 주의할점은 cluster.name 의 콜론 (:) 뒤에 반드시 공백이 있어야 한다. yaml 문법을 사용해서 다음과 같이 설정할 수 있다. cluster :   name : elasticsearch 결과를 확인해보려면 curl -XGET localhost:9200/_cluster/stats?pretty=true 여기서 pretty=true는 결과를 보기 좋게 바꾸어준다. * 게이트웨이  게이트웨이는 엘라스틱서치의 전체 클러스터의 상태를 저장하는 저장소다. 엘라스틱 서치 전체의 클러스터가 종료된 후 재실행 될 때, 게이트웨이에 저장된 상태값을 읽어들여 노드와 인덱스 등에 대해 새로 설정하는데, 이 과정을 리커버리라 한다. * 리커버리 제한 리커버리는 엘라스틱서치의 전체 클러스터가 재실행되거나 노드, 인덱스 등이 추가/삭제될 때 설정된 클러스터의 상태를 유지하기 위해 데이터를 복사하고 재배치하는 활동이다. 설정할 수 있는 항목은 다음과 같다. cluster.routing.allocation.node_initial_primaries_recoveries: -> 이 항목은 클러스터의 재실행 후 처음 리커버리가 실행될 떄 몇개의 샤드 및 복사본을 동시에 재배치하는 작업을 할지 설정한다.

(어노테이션)

@Retention -> 얼마나 오랫동안 어노테이션 정보가 유지되는지 설정할 수 있다. SOURCE  : 어노테이션 정보가 컴파일시 사라짐, 바이트코드에서는 존재하지 않음  예) @Override, @SuppressWarnings CLASS : 클래스 파일에 존재하고 컴파일러에 의해 사용가능, 가상머신 (런타임)에서는 사라짐 RUNTIME : 실행시 어노테이션 정보가 가상머신에 의해서 참조가능, 자바리플렉션에 의해 사용가능 ========================================================= @Target 자신이 만든 어노테이션이 사용되게 될 자바 요소를 지정할수 있다. 예) @Target({ElementType.METHOD}) public @interface MyAnnotation {  String value(); } ========================================================== @Inherited @Inherited 어노테이션은 이 어노테이션을 사용한 슈퍼클래스를 상속한 서브클래스에서도 해당 어노테이션을 갖도록 한다. 예) @Inherited public @Interface MyAnnotation { } @MyAnnotation public class MySuperClass {....} public class MySubClass extends MySuperClass {....} ======================================================= @Documented 이 어노테이션은 지정된 대상의 JavaDoc에 이 어노테이션의 존재를 표기하도록 지정 @Documented public @interface MyAnnotation { }

(Spring) @RequestMapping

@RequestMapping에서 특정 파라미터가 없는 경우에만 인식하도록 하려면 @RequestMapping(value = "/user/edit", params = "!type") -> params는 배열로 선언되어 있으므로 하나 이상 지정 가능하다.

(Ant) Ant 스타일 패턴 정리

<사용되는 의미> ? : 1개의 문자와 매칭 * : 0개이상의 문자와 매칭 ** : 0개 이상의 디렉토리와 파일 매칭 예) "/static/???.jpg ->3개의 문자와 매칭 "/static/* -> 0개 이상의 문자와 매칭 "/static/**" ->즉, static으로 시작하는 디렉토리 파일과 매칭

(SQL) 조인관련 자료

이미지

(하둡) HDFS의 개념

1. 블록 물리적인 디스크에는 블록크기란 개념이있다. 블록 크기는 한번에 읽고 쓸 수 있는 데이터의 최대량이다. 단일 디스크를 위한 파일시스템은 디스크 블록 크기의 정배수인 파일시스템 블록 단위로 데이터를 다룬다. 파일시스템의 블록크기는 보통 수 킬로바이트이고, 디스크 블록크기는 기본적으로 512바이트이다. 사용자는 파일크기에 관계없이 파일을 읽고 쓸 수 있으며, 특정 파일 시스템에 구애받지도 않는다. HDFS도 기본적으로 블록개념을 가지고 있다. 그러나 HDFS블록은 기본적으로 128MB와 같이 굉장히 큰 단위이다. HDFS의 파일은 단일 디스크를 위한 파일시스템처럼 특정 블록 크기의 청크(chunk)로 쪼개지고 각 청크는 독립적으로 저장된다. 단일 디스크를 위한 파일시스템은 디스크 블록 크기보다 작은 데이터라도 한 블록 전체를 점유하지만, HDFS파일은 블록크기보다 작은 데이터일 경우 전체 블록크기에 해당하는 하위 디스크를 점유하지 않는다. 예를들어, HDFS의 블록크기가 128MB고 1MB 크기의 파일을 저장한다면 128MB의 디스크를 사용하는 것이아니라 1MB크기만 사용한다. 분산파일 시스템에서 블록 추상화의 개념을 도입하면서 얻게 된 몇몇 이득이 있다. 첫번쨰 이득은 파일하나의 크기가 단일디스크 용량보다 더 커질수 있다는 것이다. 하나의 파일을 구성하는 여러개의 블록들이 동일한 디스크에만 저장될 필요가 없으므로 클러스터에 있는 어떤 디스크에도 저장될 수 있다. 두번째 이득은 파일단위보다 블록 단위로 추상화를 하면 스토리지의 서브 시스템을 단순하게 만들 수 있다는 것이다. 2. 네임노드와 데이터노드 HDFS 클러스터는 마스터-워커 패턴으로 동작하는 두 종류의 노드(마스터인 하나의 네임노드와 여러개의 데이터노드로 구성되어 있다.) 네임노드는 파일시스템의 네임스페이스를 관리한다. 네임노드는 파일시스템 트리와 그 트리에 포함된 모든 파일과 디렉토리에 대한 메타데이터를 유지한다. 이 정보는 네임스페이스 이미지와 에디터