IT TIP

관계형 데이터베이스가 Node.js에 적합하지 않습니까?

itqueen 2020. 12. 25. 10:39
반응형

관계형 데이터베이스가 Node.js에 적합하지 않습니까?


최근에 저는 Node.js를 조금 가지고 놀았습니다. 저의 특별한 경우에는 MongoDB를 사용했습니다. 부분적으로는 프로젝트가 매우 간단했기 때문에 의미가 있었기 때문에 부분적으로는 Mongoose가 시작하는 매우 간단한 방법 인 것처럼 보였기 때문입니다.

Node.js를 사용할 때 관계형 데이터베이스에 대해 어느 정도 반감이있는 것 같습니다. Node.js 생태계 내의 비 관계형 데이터베이스에 비해 제대로 지원되지 않는 것 같지만 이에 대한 간결한 이유를 찾을 수 없습니다.

제 질문은 관계형 데이터베이스가 MongoDB와 같은 대안보다 Node.js 작업에 더 적합하지 않은 확실한 기술적 이유가 있습니까?

편집 : 몇 가지를 명확히하고 싶습니다.

  • 내가 구축중인 특정 애플리케이션과 관련된 세부 정보를 특별히 찾고 있지 않습니다.
  • 기술적이지 않은 이유도 찾고 있지 않습니다 (예를 들어, "Node와 MongoDB는 둘 다 새롭기 때문에 개발자가 함께 사용합니다"와 같은 답변을 원하지 않습니다.)

내가 찾고있는 것은 전적으로 기술적 인 이유입니다. 예를 들어, Node.js와 함께 사용할 때 관계형 데이터베이스가 비정상적으로 제대로 수행되지 않는 기술적 이유가 있다면 그것은 제가 찾고있는 종류 일 것입니다 (지금까지의 답변으로는 경우)


아니요, 기술적 이유가 없습니다. 대부분의 의견 일 뿐이며 Node.js와 함께 NoSQL을 사용하는 것이 현재 인기있는 선택입니다.

물론, Node의 생태계는 대부분 커뮤니티 중심 입니다. Node의 핵심 API를 넘어선 모든 것은 커뮤니티 참여가 필요합니다. 그리고 확실히 사람들은 자신의 개인적 취향에 맞는 것을지지 할 가능성이 더 높습니다.

그러나 많은 사람들이 여전히 Node.js와 함께 관계형 데이터베이스를 사용하고 지원합니다. 주목할만한 프로젝트는 다음과 같습니다.


저는 Node.js를 좋아하지만 Node 를 사용 하면 실제로는 비 관계형 DB가 아닌 RDBM을 사용하는 것이 더 합리적 입니다. noSQL / 비 관계형 솔루션을 사용하면 Node.js 코드에서 수동 조인을 수행해야하는 경우가 많으며 커밋 / 롤백 기능이있는 RDBM의 기술적 기능인 트랜잭션 부족으로 작업하는 경우도 있습니다. 다음은 비 관계형 DB + Node.js 서버 사용과 관련된 몇 가지 잠재적 인 문제입니다.

(a) Node가 C / C ++가 아니기 때문에 조인이 더 느리고 응답이 더 느립니다.

(b) 비용이 많이 드는 조인은 일부 데이터베이스 서버가 아닌 Node.js 코드에서 발생하기 때문에 이벤트 루프를 차단합니다.

(c) 조인을 수동으로 작성하는 것은 종종 어렵고 오류가 발생하기 쉽습니다. noSQL 쿼리가 쉽게 부정확하거나 조인 코드가 부정확하거나 차선책 일 수 있습니다. 최적화 된 조인은 이전에 RDBM 마스터가 수행했으며 RDBM의 조인은 대부분의 경우 수학적으로 올바른 것으로 입증되었습니다.

(d) MongoDB와 같은 일부 비 관계형 데이터베이스 는 트랜잭션을 지원 하지 않습니다 . 우리 팀의 경우에는 외부 분산 잠금을 사용해야 여러 쿼리를 원자 트랜잭션으로 그룹화 할 수 있습니다. 트랜잭션을 사용하고 애플리케이션 레벨 잠금을 피할 수 있다면 더 쉬울 것입니다.

Node.js 코드가 아닌 데이터베이스 서버의 C / C ++에서 최적화 된 조인을 수행 할 수있는보다 강력한 관계형 데이터베이스 시스템을 사용하면 Node.js 서버가 최상의 작업을 수행 할 수 있습니다.

그렇게 말하면 많은 주요 noSQL 공급 업체가 조인 (?)을 지원하지 않는 것이 어리석은 일이라고 생각합니다. 완전한 비정규 화는 제가 볼 수있는 한 꿈일뿐입니다. 그리고 거래 부족은 약간 이상 할 수 있습니다. 트랜잭션이 없으면 하나의 쿼리 만 원자 적이므로 애플리케이션 수준 잠금 메커니즘 없이는 여러 쿼리를 원자 적으로 만들 수 없습니다.

요약 :

비 관계형 지속성을 원한다면 관계형 데이터베이스를 단순히 비정규 화하지 않는 이유는 무엇입니까? 관계형 방식으로 기존 데이터베이스를 사용하도록 강요하는 사람은 없습니다.

Node.js와 함께 관계형 DB를 사용하는 경우 다음 ORM을 권장합니다. https://github.com/typeorm/typeorm

제쳐두고 저는 "noSQL"보다는 "비 관계형"이라는 용어를 선호합니다.


내 경험상 노드는 상태 비 저장 API가있는 데이터베이스에서 인기있는 경향이 있는데, 이는 노드 비동기 특성에 매우 적합합니다. 대부분의 관계형 데이터베이스는 트랜잭션에 상태 저장 연결을 사용하므로 비동기 비 블록 I / O의 주요 이점이 최소화됩니다.


선택한 데이터베이스 및 node.js에서 직면하고있는 특정 문제를 정확히 설명 할 수 있습니까?

MongoDB가 관계형 데이터베이스보다 더 인기있는 몇 가지 이유 :

  • MongoDB는 본질적으로 JSON 객체 저장소이므로 자바 스크립트 애플리케이션에 매우 적합합니다. MongoDB 함수는 자바 스크립트 함수입니다.

  • 나는 여기서 추측하고 있지만 NoSQL 데이터베이스는 더 새롭고 더 열정적 인 프로그래머가 실험을하고 있기 때문에 아마도 NPM 모듈에 더 많이 참여할 것입니다.

이 외에도 Node.js는 기술적으로 모든 종류의 데이터베이스 응용 프로그램에 완벽한 선택입니다. 저는 개인적으로 작은 Node.js / MySQL 애플리케이션에서 작업 해 왔으며 장애물에 직면하지 않았습니다.

그러나 제 요점으로 돌아가서, 우리는 하루 종일 이것에 대해 이야기 할 수 있었는데, 그것이이 포럼의 목적이 아닙니다. Node.js 및 선택한 데이터베이스의 코드에 특정 문제가있는 경우 대신 해당 질문을하십시오.

편집 : 엄격한 기술적 이유, 양쪽 모두의 JSON 호환성을 제외하고 : 없습니다.

참조 URL : https://stackoverflow.com/questions/18376042/are-relational-databases-a-poor-fit-for-node-js

반응형