YugabyteDB를 사용한 임베디드 FerretDB: 분산 SQL의 MongoDB API 🚀☁
5602 단어 sqlyugabytedbpostgresmongodb
최신 버전의 FerretDB에는 임베디드 FerretDB라는 흥미로운 기능이 도입되었습니다. 이 프록시는 상태 비저장이므로 별도의 프로세스로 실행하는 것보다 embed it 것이 좋습니다. 그들은 간단한 예를 제공했습니다: https://github.com/FerretDB/embedded-example PostgreSQL 대신 YugabyteDB 데이터베이스로 실행하겠습니다.
YugabyteDB Quick Start을 보고 데이터베이스를 시작하십시오. 가장 쉬운 방법은 YugabyteDB Managed Cloudhttps://cloud.yugabyte.com의 무료 관리 데이터베이스로 AWS 또는 GCP의 모든 지역에서 프로비저닝할 수 있습니다. 테스트를 위해 무료 데이터베이스를 선택하고 "연결"에서 연결 정보를 확인합니다.
admin
의 암호는 여기에 표시되지 않으며 클러스터를 생성할 때 제공했습니다. 물론 추가로 데이터베이스와 사용자를 생성해야 하지만 이것은 예시이므로 쉽게 합시다.FerretDB 예제 코드에는
main.go
에 PostgreSQLURL
로 하드코딩된 연결 문자열이 있습니다. 간단한 sed
명령을 실행하여 내 YugabyteDB Managed 클라우드 연결 문자열로 교체하겠습니다: postgres://admin:MyPassword@eu-west-1.77d36171-1337-4116-93ff-587a5ea344be.aws.ybdb.io:5433/yugabyte
git clone https://github.com/FerretDB/embedded-example.git
cd embedded-example
sed -e '/PostgreSQLURL/s?".*"?"postgres://admin:MyPassword@eu-west-1.77d36171-1337-4116-93ff-587a5ea344be.aws.ybdb.io:5433/yugabyte"?options=-c%20enable_nestloop%3Doff' -i main.go
go run main.go
FerretDB가 information_schema를 여러 번 쿼리하고 YugabyteDB 마스터에 대기 시간이 있을 때 속도가 느려질 수 있기 때문에
enable_nestloop=off
를 추가했습니다(문제 #7745 ). FerretDB가 현재 버전에서 인덱스를 생성하지 않기 때문에 중첩 루프를 비활성화해도 괜찮습니다. information_schema 쿼리가 남아 있는 경우 해결책은 힌트/*+ Set(enable_nestloop off) */
로 이를 수행하는 것이지만 당시 YugabyteDB 측에서 최적화될 수 있습니다.출력은 새 문서가 삽입되었음을 알려줍니다.
mongodb
엔드포인트를 노출하지만 YugabyteDB에서 제공하는 Cloud Shell에서 SQL로 쿼리할 수도 있습니다.보시다시피 PostgreSQL 데이터베이스 대신 YugabyteDB 데이터베이스로 실행하는 것이 훨씬 쉽습니다. YugabyteDB Managed를 사용하면 엔드포인트가 로드 밸런서가 됩니다. 즉, YugabyteDB가 제공하는 확장성, 고가용성 및 지리적 분포의 이점을 얻기 위해 애플리케이션에서 변경할 사항이 없습니다.
로드 밸런서 없이 온프레미스 배포로 실행하는 경우 유일한 변경 사항은 Yugabyte의 PGX 드라이버를 사용하는 것입니다.
git clone https://github.com/FerretDB/FerretDB.git
cd FerretDB
sed -e 's?"github.com/jackc/pgx/v4"?"github.com/yugabyte/pgx/v4"?' \
-i $(grep -rl "github.com/jackc/pgx/v4")
Yugabyte PGX 드라이버를 사용하면 YugabyteDB 클러스터의 모든 노드인 하나의 엔드포인트만 제공하며 자동으로 다른 노드를 검색하여 새 연결의 균형을 맞춥니다. 그러면 추가 구성 요소 없이 분산 데이터베이스의 탄력성을 활용할 수 있습니다.
성능은 어떻습니까?
현재 버전(FerretDB 0.5.1)에서는 인덱스가 생성되지 않으며 여기에는 포인트 테스트 성능이 없습니다. 인덱싱 방법에서 언급했습니다. 물론 갈 길은 "_id"에 기본 키가 있지만 MongoDB와 호환 가능하고 ID는 다른 유형을 가질 수 있습니다. 문제Support field extraction into separate columns #226 는 "코드/기능", "준비되지 않음"으로 태그가 지정됩니다. 문제Support simple query pushdown for Postgres #896도 이전 게시물에서 했던 것처럼 인덱스를 보고 있습니다. 따라서 성능은 여전히 진행 중이며 테이블이 정말 간단하기 때문에 확장하려면 인덱스에 대해 스스로 생각해야 하는 순간입니다.
yugabyte=> \d test.test_afd071e5
Table "test.test_afd071e5"
Column | Type | Collation | Nullable | Default
--------+-------+-----------+----------+---------
_jsonb | jsonb | | |
현재로서는 (
pg_stat_statement
에서) 쿼리를 보고 올바른 인덱스를 만드는 것이 가장 좋습니다. 물론 이를 위해서는 스키마를 미리 알아야 합니다.인덱스가 없으면 모든 쿼리는 Seq 스캔이 되며 술어 푸시다운을 활성화하여 스토리지 노드(테이블 서버)에서 쿼리를 처리하는 노드(PostgreSQL 백엔드)로 행이 전송되는 것을 방지할 수 있습니다.
yugabyte=> alter user admin set yb_enable_expression_pushdown = on;
ALTER ROLE
Reference
이 문제에 관하여(YugabyteDB를 사용한 임베디드 FerretDB: 분산 SQL의 MongoDB API 🚀☁), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/yugabyte/embedded-ferretdb-with-yugabytedb-mongodb-api-on-distributed-sql-jbi텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)