2016년 12월 4일 일요일

Cluster

Tags

Cluster

Cluster 는 record 뭉치가 저장되는 장소입니다. Class처럼 , 그것은 기존의 Document 데이터베이스의 Collection과 비교되고, 관계형 데이터베이스에서 Table과 비교됩니다. 그러나,Table과의 완전히 일치하지 않는 느슨한 비교인데, cluster는 서로 다른 물리적인 위치에 클래스의 데이터를 저장할 수 있도록 해준다.
이 튜토리얼에서는 cluster가 무엇이고 그것을 데이터베이스에서 어떻게 사용하는지 배우게됩니다.
시스템에 구성된 모든 클러스터를 나열하려면 CLUSTERS 명령을 콘솔에서 사용해라
orientdb> CLUSTERS

CLUSTERS :
------------- + ------ + ----------- + ----------- +
 NAME | ID | TYPE | RECORDS |
------------- + ------ + ----------- + ----------- +
 account | 11 | PHYSICAL  | 1107 | actor | 91 | PHYSICAL  | 3 | address | 19 | PHYSICAL  | 166 | animal | 17 | PHYSICAL  | 0 | animalrace | 16 | PHYSICAL  | 2 | .... | .... | .... | .... |
------------- + ------ + ----------- + ----------- +
 TOTAL 23,481 |
-------------------------------------------- +

클러스터 이해

버전 2.2부터, OrientDB은 병렬처리의 성능 향상을 위해, 각 Class당 여러 클러스터를 자동으로 만들 수 있습니다. 클래스마다 생성 된 클러스터의 개수는 서버에서 사용할 수 있는 CPU 코어의 수와 동일하다. 또한 클래스 당 여러 클러스터를 가질 수 있습니다. 데이터베이스에 있는 클러스터의 수는 32,767 (또는 2 15 - 1)개로 제한된다. 클래스와 클러스터를 이해하면 새로운 데이터베이스를 설계시 고유한 힘을 발휘할 수 있다.
기본 전략은 각 클래스는 각각의 CPU 코어에 대해 하나의 클러스터를 사용하도록 매핑되지만, 클래스는 더 적을 수도 있고, 더 많을 수도 있다. 예를 들어, 분산 서버 환경에서 여러 물리적 위치에 record를 기록함으로써 여러 클러스터를 만든다.

클러스터에 대한 하나의 주요 기능은 '클러스터 선택'입니다. 이 지정은 새로운 record가 어떤 클러스터에 추가될 지 명시할 수 있습니다. 클러스터 선택 'round robin', 'default', 'balanced'또는 'local'이 될 수 있습니다.
Customer라는 두 개의 클러스터로 된 class가 있다고 가정하자
  • USA_customers모든 미국 고객을 포함하는 클러스터가 된다.
  • China_customers모든 중국 고객을 포함하는 클러스터가 된다..
Class-Custer
여기서 default 클러스터는 USA_customers 입니다.그래서, '클러스터 선택'이 'default'이면,  INSERT시 별도로 명시하지 않는 한 'USA_customers'에 기록될 것이다. 선택 전략이 'default'의 경우이면서 다른 cluster에 삽입하길 원하는 경우 INSERT문에 데이터를 삽입할 클러스터 지정하는 것이 필요하다.
Class-Cluster
만약 우리가 중국과 미국에서 고객 서비스를 하는 서로 다른 원격 서버가 있는 경우, Cluster Selection을 'local'로 하는 것이 맞을 수 있다. 그렇게 하면, customer class의 변경은 수정이 발생한 서버와 관련된 cluster의 수정을 유발한다. 
예를 들어, 당신이 Customer에서SELECT 쿼리를 실행하면 
Class-Cluster
OrientDB는 클래스와 관련된 모든 클러스터를 검색합니다.
당신이 데이터가 저장되어있는 클러스터를 알고 있는 경우, 모든 다른 클러스터 스캔 방지하기 위해 직접 그 클러스터를 조회하여 최적화 할 수있다.
Class-Cluster
여기서, OrientDB는 Customer 클래스를 검색하기 위해 China_customers 클러스터만 스캔한다. 

클러스터 작업

OrientDB에서 클러스터는 두 가지 유형이 있습니다 :
  • 물리적 클러스터 (= local) : 파일 시스템에 직접 기록하는 영속적 클러스터
  • 메모리 클러스터 : 모두 휘발성이며, 데이터베이스가 원격인 경우 프로세스나 서버의 종료시 손실됩니다
데이터베이스가 지속적해야하기 때문에 대부분의 경우, 물리적 클러스터가 바람직하다. OrientDB는 기본적으로 물리적 클러스터를 만듭니다.
You may also find it beneficial to locate different clusters on different servers, physically separating where you store records in your database. The advantages of this include
당신은 또한 데이터베이스 저장하는 레코드를 서로 다른 서버, 다른 클러스터에 물리적으로 분리하여 저장하는 것이 이점이 있다는 것을 알 것이다.. 이것의 장점은 다음과 같습니다 :
  • 최적화 당신이 클래스에서 클러스터의 서브 세트만 검색하면 주어진 클러스터에 대한 빠른 쿼리 실행할 수 있음.
  • 인덱스 좋은 파티션으로, 인덱스의 사용을 줄이거나 제거 할 수 있습니다.
  • 병렬 쿼리 : 여러 디스크에 데이터를 만들 때 쿼리를 병렬로 실행할 수 있습니다.
  • 샤딩 : 여러 인스턴스에서 큰 데이터 세트를 샤딩 수 있습니다.

클러스터 추가

당신이 클래스를 만들 때, OrientDB는 같은 이름의 기본 클러스터의 세트를 만듭니다. 당신이 클러스터의 힘을 활용하기 위해서는, 클래스에 클러스터를 추가해야 합니다. 이 작업은 ALTER CLASS와 함께 ADDCLUSTER 매개변수가 함께 사용되며 이루어집니다.
Customer클래스에 cluster를 추가하기 위해서 ALTER CLASS구문을 콘솔에 입력해라.
orientdb> ALTER CLASS Customer ADDCLUSTER UK_Customers
Class updated successfully
이제 Customer 클래스에는 영국에 있는 고객들을 다룰 세 번째 클러스터가 생겼다.

클러스터에서 Record보기

OrientDB에서 Cluster는 class에 포함된 record를 저장한다. 당신은 BROWSE CLUSTER명령을 사용하여 클러스터에 속한 모든 record를 볼 수 있으며, 특정 레코드에 속하는 데이터는 DISPLAY RECORD명령을 통해 볼 수 있다.
위의 예에서, 전 세계의 고객들의 위치에 기반하여 고객정보를 저장하는 record를 위한 class의 클러스터를 추가했지만, 어떠한 고객정보 데이터도 만들지 않았다. 그 결과, Customer class에서는 아무런 결과를 반환하지 않습니다. 대신, 아래의 예제에서 ouser cluster를 보자.
OrientDB ships with a number of default clusters to store data from its default classes. You can see these using the CLUSTERS command. Among these, there is the ouser cluster, which stores data of the users on your database.
OrientDB는 기본 class의 데이터를 저장하는 여러 기본 클러스터를 가지고 있다. CLUSTERS명령을 통해 확인할 수 있다. 이 중, ouser 는 데이터베이스에 사용자의 데이터를 저장하는 클러스터이다.
To see records stored in the ouser cluster, run the BROWSE CLUSTER command:
ouser에 저장된 records를 확인하려면 BROWSE CLUSTER명령을 이용한다.
orientdb> BROWSE CLUSTER OUser

---+------+--------+--------+----------------------------------+--------+-------+
 # | @RID | @CLASS | name   | password                         | status | roles |
---+------+-------+--------+-----------------------------------+--------+-------+
 0 | #5:0 | OUser | admin  | {SHA-256}8C6976E5B5410415BDE90... | ACTIVE | [1]   |
 1 | #5:1 | OUser | reader | {SHA-256}3D0941964AA3EBDCB00CC... | ACTIVE | [1]   |
 2 | #5:2 | OUser | writer | {SHA-256}B93006774CBDD4B299389... | ACTIVE | [1]   |
---+------+--------+--------+----------------------------------+-
The results are identical to executing BROWSE CLASS on the OUser class, given that there is only one cluster for the OUser class in this example.
결과는 OUser클래스에서 BROWSE CLASS를 실행한 것과 동일하며, 이 예제에서는 OUser 클래스에서 한 클러스터만 표시되었다.
이 예제에서, 데이터베이스의 모든 사용자를 나열한다. 예제로서는 괜찮지만, 보안상으로는 좋지 않다. production환경에서 보안을 개선하기 위해서는 Security를 확인하라

BROWSE CLUSTER를 실행했을 때, 결과의 첫 칼럼은 고유숫자를 나타내는데 특정 레코드에 대한 정보를 자세히 보기 위해 사용할 수 있다.
OUser의 첫 번째 record를 보기 위해서는 DISPLAY RECORD명령을 이용하라.
orientdb> DISPLAY RECORD 0

DOCUMENT @class:OUser @rid:#5:0 @version:1
----------+--------------------------------------------+
     Name | Value                                      |
----------+--------------------------------------------+
     name | admin                                      |
 password | {SHA-256}8C6976E5B5410415BDE908BD4DEE15... |
   status | ACTIVE                                     |
    roles | [#4:0=#4:0]                                |
----------+--------------------------------------------+


EmoticonEmoticon

:)
:(
hihi
:-)
:D
=D
:-d
;(
;-(
@-)
:o
:>)
(o)
:p
:-?
(p)
:-s
8-)
:-t
:-b
b-(
(y)
x-)
(h)