YugabyteDB의 Directus

다음은 YugabyteDB에서 실행하려는 첫 번째 시도Directus입니다.

현재 YugabyteDB는 지원되는 데이터베이스 중 하나가 아니지만 PostgreSQL과 호환되기 때문에 시도해 볼 가치가 있지 않습니까?

Directus는 https://directus.io/에 다음과 같이 설명되어 있습니다.

Directus is the world's first Open Data Platform for instantly turning any SQL database into an API and beautiful no-code app



제 생각에는 Oracle Database로 많은 작업을 해왔기 때문에 이것은 개방형 APEX와 동등한 것으로 해석됩니다 😎

YugabyteDB에서 Directus 프로젝트를 직접 초기화하려고 하면 다음과 같은 오류가 발생할 수 있습니다.

alter table "directus_relations" alter column "sort_field" type varchar(64) using ("sort_field"::varchar(64))
 - This ALTER TABLE command is not yet supported.


YugabyteDB(2.13)의 현재 버전에는 아직 지원되지 않는 일부 DDL이 있기 때문입니다. 지원 추적 위치: https://github.com/yugabyte/yugabyte-db/issues/1124

YugabyteDB는 SQL 처리 계층에 PostgreSQL 코드를 재사용하여 PostgreSQL과 호환됩니다. 그러나 분산 환경에서 카탈로그를 유지하려면 더 많은 고려 사항이 필요하며 ALTER TABLE에 대한 지원을 하나씩 고려해야 하는 이유입니다.

이 DDL은 Knex.js을 사용하는 Directus 데이터베이스 마이그레이션 스크립트에 의해 생성됩니다. 각 배포에 대한 데이터 모델의 수명을 재생하는 열렬한 팬은 아닙니다. DDL은 결코 저렴하지 않지만 민첩성을 이해합니다.

문제 없습니다. 일부 DDL이 아직 지원되지 않더라도 호환 가능할 때 한 데이터베이스에서 다른 데이터베이스로 쉽게 이동할 수 있습니다. PostreSQL에서 초기화하고 YugabyteDB로 옮기겠습니다. PostgreSQL에 머물지 않는 이유를 물을 수 있습니다. YugabyteDB는 분산되어 있습니다. 노드를 추가하여 확장할 수 있습니다. 연결, SQL 처리, 읽기 및 쓰기, 데이터가 자동으로 균형을 이룹니다. 그리고 애플리케이션 연속성과 함께 고가용성을 위해 복제됩니다.

PostgreSQL 데이터베이스를 시작합니다.

podman run --name pg -d \
 -e POSTGRES_PASSWORD=secret \
 -p 5432:5432 \
 postgres

podman exec pg psql -h localhost -U postgres \
 -c "create database directus"



Directus 프로젝트를 초기화합니다.

npm init directus-project example-project



데이터베이스 연결 정보를 입력합니다.


이것은 데이터베이스를 초기화하는 것 외에도 다음으로 이동하는 프로젝트 디렉토리를 생성합니다.

cd example-project



이제 YugabyteDB 데이터베이스를 시작합니다:

podman run --name yb -d \
 -p 5433:5433 \
 yugabytedb/yugabyte:latest \
 bin/yugabyted start --daemon=false

podman exec yb ysqlsh -h localhost -U yugabyte \
 -c "create database directus"



물론 Yugabyte 클라우드( free tier )와 같이 데이터베이스가 이미 있을 수 있으며 연결 정보만 사용할 수 있습니다.
pg_dump를 사용하면 PostgreSQL에서 YugabyteDB로 스키마를 쉽게 복사할 수 있습니다.

podman exec    pg pg_dump    -h localhost -U postgres -d directus | 
podman exec -i yb bin/ysqlsh -h localhost -U yugabyte -d directus



프로젝트 디렉토리에서 .env 파일은 모든 연결 정보를 보유합니다. PostgreSQL 데이터베이스용으로 생성되었으므로 YugabyteDB로 변경합니다.

sed \
 -e '/DB_PORT=/s/5432/5433' \
 -e '/DB_USER=/s/postgres/yugabyte'
 -i .env



Directus 시작(나는 Quickstart Guide을 팔로우하고 있습니다):

npx directus start



다음을 시작할 때 http 포트가 언급됩니다.


이제 로그인할 수 있는 GUI에 오신 것을 환영합니다(초기화 중에 언급되고 데이터베이스에 저장된 자격 증명 사용).



실제로 데이터베이스의 테이블인 컬렉션을 만들 수 있습니다.

시퀀스 또는 UUID에 의해 생성된 기본 키를 선택할 수 있습니다. 둘 다 작동하고 확장 가능합니다. 기본적으로 HASH가 있는 YugabyteDB는 첫 번째 기본 키 열에 배포됩니다.

테이블의 행인 항목을 추가할 수 있습니다.


이 모든 것은 데이터베이스에서 볼 수 있습니다. 이것이 바로 그 아름다움입니다. 실제 SQL 항목, 여기서 인덱스, 트리거 또는 최적화에 필요한 모든 PostgreSQL 기능을 추가할 수 있습니다.

[opc@dev example-project]$ psql -h localhost -p 5433 -U yugabyte directus
psql (13.5, server 11.2-YB-2.13.0.0-b0)
Type "help" for help.

directus=# \d "Franck"

                                          Table "public.Franck"
    Column    |            Type             | Collation | Nullable |               Default
--------------+-----------------------------+-----------+----------+--------------------------------------
 id           | integer                     |           | not null | nextval('"Franck_id_seq"'::regclass)
 status       | character varying(255)      |           | not null | 'draft'::character varying
 sort         | integer                     |           |          |
 user_created | uuid                        |           |          |
 date_created | timestamp with time zone    |           |          |
 date_updated | timestamp with time zone    |           |          |
 my_date      | timestamp without time zone |           |          |
Indexes:
    "Franck_pkey" PRIMARY KEY, lsm (id HASH)
Foreign-key constraints:
    "franck_user_created_foreign" FOREIGN KEY (user_created) REFERENCES directus_users(id)

directus=# select * from "Franck";

 id | status | sort |             user_created             |        date_created        | date_updated |       my_date
----+--------+------+--------------------------------------+----------------------------+--------------+---------------------
  1 | draft  |      | 05ba2305-d788-4a6b-af35-e75ee69b862c | 2022-04-01 15:12:54.236+00 |              | 2022-04-01 17:12:00
(1 row)

directus=#



마지막으로 테이블을 기반으로 하는 간단한 대시보드는 다음과 같습니다.


이것이 No Code 데이터베이스 애플리케이션 개발의 장점입니다. 데이터의 일관성과 가용성은 SQL 데이터베이스에 의해 보장되며 그 위에 프레젠테이션 계층을 구축하는 것이 쉽고 좋습니다.

좋은 웹페이지 즐겨찾기