Home
Posts filed under OrientDB
2016년 12월 17일 토요일
Record ID
Record ID
이제 여러분은 OrientDB에서 데이터를 어떻게 클래스로 모델링 할 것인가에 대해 이해하며 그러한 클러스 내의 데이터를 구성하는 클러스터가 어떻게 구성하는지 이해했을 것이고, 레코드들이 물리적으로 어떻게 저장되고 검색되는지 이야기 할 수 있을 것입니다. 이번 섹션에서는 아래와 같은 것을 배울 것입니다.
- 각 레코드들이 데이터베이스 내에서 고유한 레코드가 되는가
- OrientDB에서는 얼마나 많은 데이터를 관리할 수 있는가(수천조)
- console과 studio에서 Record ID를 이용해 데이터베이스의 레코드를 직접적으로 어떻게 접근할 수 있는가
OrientDB에서 각 레코드는 RecordID 혹은 RID라고 불리는 자신에게 할당된 고유의 ID를 가지고 있다. RID는 두 부분으로 구성된다.
#<cluster-id>:<cluster-position>즉
<cluster-id>
클러스터 ID<cluster-position>
클러스터내에서 데이터의 위치
Each database can have a maximum of 32,767 clusters, or 215 - 1. Each cluster can handle up to 9,223,372,036,780,000 records, or 263, namely 9,223,372 billion records.
각 데이터는 최대 32,767개의 클러스터를 가질 수 있으며, 각 클러스터는 9,223조 3,720 억개의 record를 가질 수 있다.
각 데이터는 최대 32,767개의 클러스터를 가질 수 있으며, 각 클러스터는 9,223조 3,720 억개의 record를 가질 수 있다.
한 데이터베이스의 최대 레코드량은 하드웨어 제약으로 인해 2^78개이지만, OrientDB는 그렇게 많은 수의 레코드를 테스트해보지 않았다. 그러나 수십억 레코드 범위에서 OrientDB를 사용하는 사용자들이 있다.
Record 불러오기
각 레코드는 Record ID를 가지고 있는데, 그것은 database내에서 물리적 위치를 알려준다. 이는, 여러분이 RID로 record를 불러올 때, 다른 조건으로 불러올 때보다 매우 빠르다는 것을 의미한다.
document db나 관계형 db에서 많은 데이터를 가질수록, database의 응답은 느려진다. OrientDB는 record를 가리키는 물리적 링크로 관계를 처리한다. edge가 생성될 때, 관계가 할당되며, 그래서 RID로 찾는 것은 O(1)시간 복잡도가 소요된다. 이는, 매번 O(log N)의 시간 복잡도를 갖는 관계형 데이터베이스와 비교된다. OrientDB에서는 데이터의 양이 탐색 시간에 영향을 미치지 않는다. 레코드가 한 개이건, 수천억이건, 탐색 시간은 계속 상수 시간이다. 빅데이터 시대에 이것은 매우 중요한 특징이다.
document db나 관계형 db에서 많은 데이터를 가질수록, database의 응답은 느려진다. OrientDB는 record를 가리키는 물리적 링크로 관계를 처리한다. edge가 생성될 때, 관계가 할당되며, 그래서 RID로 찾는 것은 O(1)시간 복잡도가 소요된다. 이는, 매번 O(log N)의 시간 복잡도를 갖는 관계형 데이터베이스와 비교된다. OrientDB에서는 데이터의 양이 탐색 시간에 영향을 미치지 않는다. 레코드가 한 개이건, 수천억이건, 탐색 시간은 계속 상수 시간이다. 빅데이터 시대에 이것은 매우 중요한 특징이다.
콘솔로 불러오기
레코드를 불러오기 위해서는 LOAD RECORD 명령을 이용하라.
orientdb> LOAD RECORD #34:0
DOCUMENT @class:Company @rid:#34:0 @version:2
+----+-----------+---------------------+
|# |NAME |VALUE |
+----+-----------+---------------------+
|0 |id |4 |
|1 |created |2016-09-01 00:00:00 |
|2 |name |Microsoft4 |
|3 |salary2 |0.0 |
|4 |checkpoint |true |
|5 |initialized|false |
|6 |salary |0.0 |
|7 |addresses |[NOT LOADED: #31:0] |
|8 |employees |100004 |
+----+-----------+---------------------+
LOAD RECORD 명령은 이 레코드에 대한 여러 유용한 정보를 반환한다.
- 이 레코드는 document이다. The record is a document. OrientDB supports different types of records, but document is the only type covered in this chapter.
- It belongs to the
Company
class. - Its current version is
2
. OrientDB uses an MVCC system. Every time you update a record, its version increments by one. - We have different field types:
- floats for
salary
andsalary2
- integers for
employees
andid
- string for
name
- booleans for
initialized
andcheckpoint
- date-time for
created
.
- floats for
- The field
addresses
has beenNOT LOADED
. It is also aLINK
to another record,#31:0
. This is a relationship. For more information on this concept, see Relationships.
Studio Load
OrientDB studio does not support the
LOAD RECORD
command. You will use SQL syntax in order to retrieve the a record by record ID when using Studio. We haven't gotten to OrientDB's SQL yet but for now you should just know that OrientDB does support it's own flavor of SQL. In it you do not have to you the *
to project all columns of a record.
To do a direct look-up by Record ID we simply go to the browser window in Studio and type the following into the query editor:
select from #34:0
Then press the green 'run' button, to see the record you selected.
This code tells OrientDB to project all attributes and values of the record whose ID is passed in.

2016년 12월 4일 일요일
Cluster
Cluster
Cluster 는 record 뭉치가 저장되는 장소입니다. Class처럼 , 그것은 기존의 Document 데이터베이스의 Collection과 비교되고, 관계형 데이터베이스에서 Table과 비교됩니다. 그러나,Table과의 완전히 일치하지 않는 느슨한 비교인데, cluster는 서로 다른 물리적인 위치에 클래스의 데이터를 저장할 수 있도록 해준다.
이 튜토리얼에서는 cluster가 무엇이고 그것을 데이터베이스에서 어떻게 사용하는지 배우게됩니다.
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
모든 중국 고객을 포함하는 클러스터가 된다..
여기서 default 클러스터는
USA_customers 입니다.
. 그래서, '클러스터 선택'이 'default'이면, INSERT시
별도로 명시하지 않는 한 'USA_customers'에 기록될 것이다. 선택 전략이 'default'의 경우이면서 다른 cluster에 삽입하길 원하는 경우 INSERT문에 데이터를 삽입할 클러스터 지정하는 것이 필요하다.
만약 우리가 중국과 미국에서 고객 서비스를 하는 서로 다른 원격 서버가 있는 경우, Cluster Selection을 'local'로 하는 것이 맞을 수 있다. 그렇게 하면, customer class의 변경은 수정이 발생한 서버와 관련된 cluster의 수정을 유발한다.
OrientDB는 클래스와 관련된 모든 클러스터를 검색합니다.
당신이 데이터가 저장되어있는 클러스터를 알고 있는 경우, 모든 다른 클러스터 스캔 방지하기 위해 직접 그 클러스터를 조회하여 최적화 할 수있다.
여기서, 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 매개변수가 함께 사용되며
이루어집니다.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
OrientDB는 기본 class의 데이터를 저장하는 여러 기본 클러스터를 가지고 있다.
To see records stored in 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
결과는 OUser클래스에서
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] |
----------+--------------------------------------------+
피드 구독하기:
글 (Atom)