1. SELECT 구문


1.1 SELECT

     ▼ 아랑고에서는 SQL을 AQL 이라 명명합니다. 사용해본 느낌은 AQL이 더 RDB보다 직관적인 문법이란 생각이 들더군요
     - Filter : where 이며 TSQL과 똑같은 방법으로 비교 연산자가 가능
     - Sort  : 정렬이며 TSQL과 똑같은 방법으로 정렬 가능
     - Limit : Mysql에 Limit와 사용법이 같다. Mysql로 같은 방법에 페이징이 가능 (좋은소식)
     - Return : select 절 Aliases 된 콜렉션을 사용해 컬럼을 지정하는 방식 또한 TSQL과 같습니다.

FOR cur IN col
   FILTER cur.gender == "m"
or cur.gender == "f"   /* where  */
   
SORT cur.age desc, cur.name asc                /* order by  */
   
Limit 1,10                                     /* Limit (Top) , (몇번째부터, 몇개까지)  */
   
RETURN {                                       /* select */
       
name:cur.name,
        gender:cur.gender,
        age:cur.age
}

/* select *  AQL JSON 형태 그대로 노출한다.*/
FOR cur IN col
RETURN cur


     - select 된 데이터 화면은 아래와 같습니다.
     - Json 형식에 데이터와, 테이블 구조의 데이터 두가지 방식으로 볼수 있습니다. 




2. INSERT 구문


2.1 인터페이스에 메뉴 구성

     - COLLECTIONS  메뉴 : 테이블과 같은 역할을 하는 부분
     - QUERIES 메뉴 ;  질의 작성기 부분
     - INSERT를 하기 위해 COLLECTIONS  메뉴에 접근


2.2 COLLECTIONS 생성
     
     ▼ 컬렉션(테이블)을 작성을 해보겠습니다.  name에 원하는 명을 넣고 Type은 document를 설정합니다.
     - 그러면 JSON 형태의 데이터를 저장하는 NO-SQL 콜렉션이 create 됩니다.
     

     ▼ 잠깐 데이터를 생성해보자 컬렉션 상세 페이지에 오른쪽 위에 (+)를 누르면 _key를 입력하는 창이 나옵니다.
     - 해당 키는 자동으로 DB에서 고유한 PK를 생성해주지만 임의적으로 생성할수 있다. 숫자+스트링 조합도 가능합니다.
     - 논클러스터 INDEX 이기도 합니다.



     - 데이터는 이처럼 빈값이더라도 키만 있으면 존재하는 특징이 있습니다. (NO-SQL은 역시)


2.3 INSERT 

     ▼ QUERIES 창을 열어 아래 INSERT 구문 입력 예제를 입력해보자
     - JSON처럼 키와 값으로 입력하는 특징이 보이네요.
/* 여러개의 INSERT Query AQL */
FOR cur IN [    /* "cur" RDB ALIAS(as)와 비슷한 역할을 한다. 추후에 inner join 등에 쓰일때 다시 알아보자 */
            {name: "GV", gender: "m", age: 13}, /* colunm : data 식으로 키와 쌍으로 이루어진 Json 그대로 입력 */
            {name: "HIRE",gender: "f" ,age: 15},
            {name: "RAEBU",gender: "m" ,age: 19}
]
INSERT cur INTO col

/* 한개의 data  INSERT AQL*/
INSERT { name: "GV", gender: "m", age:13 }
INTO col
    

     - 컬렉션에서 Col을 확인해보면 해당처럼 Json 형태로 데이터가 입력되어 있습니다.. 
     - 클릭해보면 데이터의 상세화면이 나오고 -, +를 통해 데이터를 편집할 수 있다.


2.4 INSERT SELECT 

     ▼ AQL은 셀렉트 인설트롤 지원합니다. 기존 return 자리에 insert를 넣으면 select insert 문이 됩니다.
     - 고유 PK (_key)값도 같이 복사되기 때문에 반복 입력하게 되면 unique constraint violated 오류가 발생합니다.
FOR cur IN col
  FILTER
( cur.gender == "m" or cur.age > 10 ) and  /* TSQL과 같은 비교 연산자 가능 */
           cur.name like "G%"                       /* LIKE 방식으로 사용 */
/*   RETURN cur    리턴 자리에 insert into를 쓰면  insert select */
INSERT cur INTO backup /* col as cur에 데이터를 backup에 넣는다. */
 

     
2.5 변수를 활용한 루프 INSERT

     ▼ For문으로 반복하여 insert 하는 방법을 기술 했습니다.
     - 기존 TSQL에서 쓰던 함수인 FOR을 사용 가능하네요
     - concat : 문자열을 합치는 함수다.
     - 삼항연산이 가능하다. 
     - CEIL : 올림 함수 소수점 상관없이 무조건 올림
     - RAND() : 랜덤함수로 숫자를 무작위로 추출한다.      
FOR i IN 1..1000  /* 반복문 루프될 숫자만 정해주면 된다.*/
 
INSERT {
   
name: CONCAT("name_", i),         /* CONCAT 문자열 연결 */
    gender: (i % 2 == 0 ? "f" : "m"), /* 삼항연산 가능 */
    age : CEIL(RAND() * 30)          /* 랜덤으로 1~30까지 */
  }
  INTO col




3. INNER JOIN


1-1. Inner join 문 
     - TSQL과 마찬가지로 테이블에 관계 있는 컬럼과 컬럼으로 컬렉션과 inner join 할 수 있습니다. 
     - 간단하고 익숙한 방법으로 noSQL 에 inner join을 제공됩니다.


FOR cur1 IN argdb
 
FOR cur2 IN argdb_addr            /* join할 테이블*/
  
FILTER cur1.name == cur2.name    /* 여기서 On 을 하면 된다. */
  
SORT cur1.age desc               /* 여기서 부터 기존과 똑같은 select 방법으로  */
      
RETURN {   
          
name:cur1.name 
           ,age:cur1.age   
           ,age:cur1.age   
           ,favorites:cur1.favorites
           ,addr:cur2.addr          
/* 명명자로 구분해서 TSQL이랑 상당히 흡사 */
}





마무리

욕심이 과했는지 이번 강의에 많은걸 담아 냈습니다. 매력 넘치는 AQL문에 빠져보시죠


댓글을 달아 주세요



1. 유저 및 DB 생성


1.1 접속

 ▼  해당 아이콘을 눌러 실행시킨다. 설치시 입력한 암호로 로그인 (tiger)

 


1.2 유저 생성
     ▼ 쉘에서 해당 명령어를 쳐보자 한줄 치고 엔터 눌러 개행이 되어도 세미콜론(;)을 만날때 까지 명령어 입력이 가능하다.
var users = require("@arangodb/users") //유저를 생성할 준비 명령어
users.save("admin@test","test");       //유저 생성 어드민 계정에 test라는 아이디 그리고 비번은 test

      명령 성공시에 화면 


      이제 쉘에서 유저에게 DB권한을 부여해보자.
users.grantDatabase("admin@test","sampledb"); //해당 유저에게 sampledb에 권한을 부여한다. db가 아직 생성안되어 있어도 부여가능
 
1.3 DB생성
     ▼ 이번엔 데이터 베이스를 생성해보자
db._createDatabase("sampledb");//데이터베이스를 생성한다

     ▼ 성공시화면




2. 웹 인터페이스 접속 

2.1 접속
     -  해당 아이콘을 클릭 
     
▼ 아이디는 [권한]@[아이디]을 입력한다. 선행했던 거처럼 우리의 아이디는 admin@test 비밀번호는 tiger         



     ▼ 접속이 완료되면 유저에게 권한이 주어진 DB가 보여진다. 앞서서 sampledb에 권한을 부여했다.



1.3 쿼리창 사용방법

     ▼ 쿼리 편집기와 같은 방법으로 사용합니다.
     - Remove all results  : 결과 삭제
     - explain : 쿼리 플랜 (조금 오류가 있는듯 합니다. 가끔 무한 로딩이..)
     - excute : 쿼리실행
     - 실행 단축키 : ctr + space + enter 부분 실행, 즉 드래그한 부분만 실행합니다. 

    

     ▼ 그리고 코드 어시던트를 제공합니다. 좋은 웹 GUI네요.
     - 쿼리창에서  ctr+space 를 누르면 아래 같은 창이 뜨고 자동완성 기능이 제공 됩니다. 초기에는 굉장히 도움이 되니 자주 애용합시다.





마무리

 웹 GUI가 직관성이 편하게 되어 있어서 마음에 듭니다. 아랑고쉘도 자바스크립트 같은 느낌이어 사용하기 편하네요. 하지만 오류가 종종 보이는거 보니 안정성은 아직이란 생각이 듭니다. 
     


댓글을 달아 주세요




0. ArangoDB란

   IT 는 점점 RDB 에서 NoSQL로 나아가는 추세입니다. 하지만 각 기업에서는 NoSQL이 스키마가 없는 관계로 사용을 고려하거나 특정 데이터(Json)를 노출해주는 방식으로 사용하고 있을 것 입니다. 이에 단점을 보완한 아랑고디비가 나왔지만 아직 스타트업에 불과한 DB이지만 새로운 가능성이 보여 리뷰를 진행 하게 되었습니다. 이외에도 IT 경력자로 그동안 에버노트에 쌓아 놓았던 정보들을 정리하여 업로드 할 예정입니다.

     - NoSQL 이지만 inner join이 가능하다.  
     - 차세대 빅데이터 DB로 떠오르고 있다. 



1. ArangoDB 설치파일 


아래에 링크에서 다운로드 받자
https://www.arangodb.com/download-major/windows/



1.1 파일 ArangoDB3-3.1.22-1_win64.exe 를 설치한다.

     - ​설치 파일을 업로드 할려고 하니 10mb가 최대 용량이라 링크를 남깁니다. 파일이 필요하시면 댓글로 이메일 주소를 남기시면 보내드리겠습니다.
     - Community Edition 버전은 무료평가판, 비상업, 학습자 용입니다.
     - 회사 이메일 주소를 남기고 받을 수 있는 Enterprise Edition 버전은 SmartGraphs, SSL 암호화 기능들이 포함되어 있습니다. 저흰 학습용이기에 커뮤니티 버전으로 진행하겠습니다.
     

1.2 설치시 Root 계정 비밀번호를 입력

     - 설치는 단순히 다음 다음만 입력하면 완료 된다.
     - 중간에 root 계정에 비밀번호 입력 부분이 나온다. 고민된다면 그냥 만능 비번 tiger를 입력하자





2. ArangoDB 설치후 아이콘 

     - 설치 후 두개의 아이콘이 바탕화면에 보이네요.


2.1 Arango Shell

     - Shell 입력 커맨드 창
     - 여기서 관리자 접속과 각정 커맨드로 명령을 내릴 수 있습니다.

2.2 Arango Management Interface
     


     - Arango Web interface 
     - WEB으로 아랑고를 컨트롤 할수 있습니다. 웹으로 된 GUI 툴입니다.
     - 접속을 위해서는 shell 에서 사용자와 권한 그리고 DB를 추가해줘야 한다.
     - 해당 클릭시 연결되는 인터페이스 기본 주소



3. 마무리

     - windows 설치 과정은 최신 DB 답게 단순한 설치로 완료로 GUI까지 설치가 완료 되었습니다.
     - 다음편에서는 유저와 DB 생성 과정을 설명하겠습니다.



댓글을 달아 주세요