MongoDB 또는 기타 문서 지향 데이터베이스 시스템을 언제 사용합니까?[닫은]

StackOverflow https://stackoverflow.com/questions/1476295

  •  16-09-2019
  •  | 
  •  

문제

우리는 비디오 및 오디오 클립, 사진, 벡터 그래픽을 위한 플랫폼을 제공합니다.우리는 데이터베이스 백엔드로 MySQL을 시작했고 최근에는 몽고DB MongoDB가 요구 사항에 더 적합하기 때문에 파일의 모든 메타 정보를 저장합니다.예를 들어:사진에는 엑시프 정보, 비디오에는 메타 정보를 저장하려는 오디오 트랙이 있을 수도 있습니다.비디오 및 벡터 그래픽은 일반적인 메타 정보 등을 공유하지 않습니다.그래서 저는 MongoDB가 구조화되지 않은 데이터를 저장하고 검색 가능하게 유지하는 데 완벽하다는 것을 알고 있습니다.

그러나 우리는 계속해서 플랫폼을 개발하고 기능을 추가하고 있습니다.이제 다음 단계 중 하나는 사용자에게 포럼을 제공하는 것입니다.이제 제기되는 질문은 다음과 같습니다.포럼 및 포럼 게시물 등을 저장하는 데 적합한 MySQL 데이터베이스를 사용하십시오.아니면 MongoDB도 사용하시나요?

질문은 다음과 같습니다.MongoDB를 사용할 때와 RDBMS를 사용할 때.선택할 수 있다면 mongoDB 또는 MySQL 중 무엇을 선택하시겠습니까? 그리고 왜 선택하시겠습니까?

도움이 되었습니까?

해결책

~ 안에 NoSQL:그렇게 쉬웠더라면, 저자는 MongoDB에 대해 다음과 같이 씁니다.

MongoDB는 키/값 저장소가 아니며 그 이상입니다.확실히 RDBMS도 아닙니다.저는 프로덕션에서 MongoDB를 사용하지 않았지만 테스트 앱을 구축하는 데 조금 사용했는데 매우 멋진 키트입니다.성능이 매우 뛰어난 것으로 보이며 내결함성 및 자동 샤딩(확장 가능)을 갖추고 있거나 곧 갖게 될 것입니다.내 생각에는 Mongo가 지금까지 본 RDBMS 대체품 중 가장 가까운 것일 수 있습니다.모든 데이터 세트와 액세스 패턴에 작동하지는 않지만 일반적인 CRUD용으로 구축되었습니다.본질적으로 거대한 해시를 저장하고 해당 키 중 하나를 선택할 수 있는 것이 대부분의 사람들이 관계형 데이터베이스를 사용하는 이유입니다. DB가 3NF이고 조인을 수행하지 않는 경우(대부분의 사람들이 웹 앱에서 수행하는 작업과 같이 테이블 여러 개를 선택하고 모든 객체를 함께 모으는 것임) MongoDB가 아마도 큰 도움이 될 것입니다.

그런 다음 결론적으로:

실제로 지적해야 할 점은 데이터베이스를 선택할 수 없기 때문에 아주 멋진 것을 만드는 데 방해가 된다면 잘못하고 있다는 것입니다. mysql을 아시는 분은 그냥 사용해 보세요.실제로 필요할 때 최적화하세요.k/v 스토어처럼 사용하고, RDBMS처럼 사용하세요. 하지만 제발 킬러 앱을 만들어보세요!이 중 어느 것도 대부분의 앱에 중요하지 않습니다.Facebook은 아직도 MySQL을 많이 사용하고 있습니다.Wikipedia에서는 MySQL을 많이 사용합니다.FriendFeed는 MySQL을 많이 사용합니다. NoSQL은 훌륭한 도구이지만 확실히 경쟁 우위가 될 수는 없으며 앱을 인기 있게 만들지도 않을 것이며 무엇보다도 사용자는 이에 대해 전혀 신경 쓰지 않을 것입니다.

다음 앱은 무엇을 기반으로 구축할 예정인가요?아마도 포스트그레스일 겁니다.NoSQL을 사용할 것인가?아마도.Hadoop과 Hive를 사용할 수도 있습니다.모든 것을 플랫 파일에 보관할 수도 있습니다.아마도 Maglev 해킹을 시작할 것입니다. 나는 그 일에 가장 좋은 것을 사용할 것이다. 보고가 필요한 경우에는 NoSQL을 사용하지 않을 것입니다. 캐싱이 필요하다면 아마도 Tokyo Tyrant를 사용할 것입니다. ACIDity가 필요하면 NoSQL을 사용하지 않을 것입니다. 카운터가 너무 많이 필요하면 Redis를 사용하겠습니다. 트랜잭션이 필요하면 Postgres를 사용하겠습니다. 단일 유형의 문서가 너무 많다면 아마도 Mongo를 사용할 것입니다. 하루에 10억 개의 개체를 작성해야 한다면 아마도 Voldemort를 사용할 것입니다.전체 텍스트 검색이 필요하다면 아마도 Solr를 사용할 것입니다.변동성이 큰 데이터에 대한 전체 텍스트 검색이 필요하다면 아마도 Sphinx를 사용할 것입니다.

나는 이 기사를 좋아하고, 매우 유익하다고 생각하며, NoSQL 환경과 과대 광고에 대한 좋은 개요를 제공합니다.하지만 이것이 가장 중요한 부분입니다. RDBMS와 NoSQL 중에서 선택할 때 올바른 질문을 스스로에게 묻는 것이 정말 도움이 됩니다.IMHO를 읽어볼 가치가 있습니다.

기사에 대한 대체 링크

다른 팁

소셜 앱에 MongoDB를 2 년 동안 사용한 후, 나는 SQL RDBMS없이 사는 것이 실제로 무엇을 의미하는지 목격했습니다.

  1. 다른 테이블/컬렉션에서 데이터를 결합하는 것과 같은 작업을 수행하기 위해 작업을 작성하게됩니다. RDBMS가 자동으로 수행 할 수있는 일입니다.
  2. NOSQL을 사용한 쿼리 기능이 크게 무너졌습니다. MongoDB는 SQL에 가장 가까운 일이지만 여전히 매우 뒤쳐져 있습니다. 날 믿어. SQL 쿼리는 매우 직관적이고 유연하며 강력합니다. MongoDB 쿼리는 아닙니다.
  3. MongoDB 쿼리는 하나의 컬렉션에서만 데이터를 검색하고 하나의 색인 만 활용할 수 있습니다. 그리고 MongoDB는 아마도 가장 유연한 NOSQL 데이터베이스 중 하나 일 것입니다. 많은 시나리오에서 이는 관련 레코드를 찾기 위해 서버로 더 많은 왕복을 의미합니다. 그런 다음 데이터를 정규화하여 데이터를 시작합니다. 이는 배경 작업을 의미합니다.
  4. 관계형 데이터베이스가 아니라는 사실은 데이터가 일관되게 유지하기 위해 외국 키 제약을받지 못한다는 것을 의미합니다. 나는 이것이 결국 데이터베이스에서 데이터 불일치를 생성 할 것이라고 확신합니다. 준비하십시오. 아마도 데이터베이스를 일관성있게 유지하기 위해 프로세스 나 수표 작성을 시작할 가능성이 높습니다. 이는 RDBMS가 귀하를 위해 수행하도록하는 것보다 성능이 좋지 않을 것입니다.
  5. 최대 절전 모드와 같은 성숙한 프레임 워크를 잊어 버리십시오.

나는 모든 프로젝트의 98%가 아마도 NOSQL보다 일반적인 SQL RDBM에서 훨씬 나을 것이라고 생각합니다.

이 구조화되지 않은 데이터를 저장합니다

당신이 말했듯이, MongoDB는 구조화되지 않은 데이터를 저장하는 데 가장 적합합니다. 그리고 이것은 데이터를 문서 형식으로 구성 할 수 있습니다. 이 rdbms altenatives는 호출되었습니다 NOSQL 데이터 저장소 (MongoDB, couchdb, Voldemort)는 대규모로 확장하고 이러한 빅 데이터 스토어에서 더 빠른 데이터 액세스가 필요한 애플리케이션에 매우 유용합니다.

이러한 데이터베이스의 구현은 일반 RDBM보다 간단합니다. 이들은 간단한 키 값 또는 문서 스타일 이진 개체이기 때문에 디스크에 직접 직렬화되기 때문입니다. 이 데이터 저장소는 시행되지 않습니다 산성 특성, 그리고 어떤 것도 스키마. 이것은 아무것도 제공하지 않습니다 거래 능력. 따라서 이것은 크게 확장 될 수 있으며 더 빠른 액세스를 달성 할 수 있습니다 (읽기 및 쓰기 모두).

그러나 반면에 RDBM은 데이터에서 산과 스키마를 시행합니다. 구조화 된 데이터로 작업하고 싶다면 RDBM을 진행할 수 있습니다.

나는 선택할 것이다 MySQL 창조를 위해 포럼 이런 종류의 것들을 위해. 이것은 크게 확장되지 않기 때문입니다. 그리고 이것은 데이터 간의 관계를 구조화 한 매우 간단한 (일반적인) 응용 프로그램입니다.

Mongo는 본질적으로 JSON을 저장합니다. 앱이 많은 JS 객체 (중첩 포함)를 다루고 있고 이러한 객체를 지속하려면 Mongo를 사용하는 것에 대한 매우 강력한 주장이 있습니다. DAL 및 MVC 레이어는 모든 JS 객체 특성을 포장하지 않고 자연스럽게 맞지 않는 구조 (스키마)에 강제로 맞추려고 노력하기 때문에 DAL 및 MVC 레이어를 매우 얇게 만듭니다.

우리는 여러 가지 복잡한 JS 객체가있는 시스템을 가지고 있으며, 우리는 모든 것을 실제로 쉽게, 쉽게 지속 할 수 있기 때문에 Mongo를 좋아합니다. 우리의 대상은 또한 다소 비정질하고 구조화되지 않았으며, 몽고는 깜박임없이 그 합병증을 흡수합니다. 우리는 인간 소비에 대한 비정질 데이터를 해독하는 맞춤형보고 계층을 가지고 있으며, 이는 개발하기가 어렵지 않았습니다.

복잡한 트랜잭션이 필요한 경우 RDBMS를 사용한다고 말합니다. 그렇지 않으면 나는 MongoDB와 함께 갈 것입니다 - 더 유연하게 작업 할 수 있으며 필요할 때 확장 할 수 있다는 것을 알고 있습니다. (나는 편견이있다 - 나는 Mongodb 프로젝트에서 일한다)

누가 배포 된 포럼이 필요합니까? 어쩌면 Facebook이지만 Facebook 경쟁자를 만들지 않는 한 MySQL, Postgres 또는 가장 편한 것을 사용하십시오. Mongodb를 시도하고 싶다면, OK, 그러나 그것이 당신을 위해 마술을 할 것으로 기대하지 마십시오. 당신이 이미 그것을 실제로 일하고 있다면 이미 발견했다고 확신하기 때문에 그것은 기발한 것과 일반적인 성가신 것입니다.

물론, MongoDB는 과장되어 표면에서 쉽게 보일 수 있지만, 더 성숙한 제품이 이미 극복 한 문제가 발생할 수 있습니다. 그렇게 쉽게 유인하지 말고 "NOSQL"이 성숙하거나 죽을 때까지 기다리십시오.

개인적으로, 나는 "NOSQL"이 세트 표준이 없기 때문에 "NOSQL"은 시들고 파편화로 죽을 것이라고 생각합니다 (거의 정의에 따라). 그래서 나는 장기 프로젝트에 대해 개인적으로 베팅하지 않을 것입니다.

내 책에서 "NOSQL"을 저장할 수있는 유일한 것은 루비 또는 유사한 언어에 원활하게 통합 될 수 있고 코딩과 디자인의 오버 헤드없이 언어를 "지속적으로"만드는 것입니다. 그것은 지나갈 수 있지만, 그때까지는 지금까지 기다릴 것입니다. 물론 더 성숙해야합니다.

BTW, 왜 처음부터 포럼을 만들고 있습니까? 차세대 포럼을 실제로 만들지 않는 한 대부분의 요구 사항에 맞게 조정할 수있는 수많은 오픈 소스 포럼이 있습니다 (의심 할 여지가 없습니다).

많은 회사에서 응용 프로그램 로그에서 실시간 분석을 위해 MongoDB를 사용하는 것을 보았습니다. 레코드 스키마가 시간마다 변경되는 경향이있는 응용 프로그램 로그에 실제로 스키마 프라이드가 적합합니다. 또한, 그것 캡핑 된 컬렉션 기능은 기존 데이터를 자동으로 제거하여 데이터를 메모리에 맞게 유지하기 때문에 유용합니다.

그것은 내가 MongoDB가 실제로 맞는 영역이지만, MySQL/PostgreSQL은 일반적으로 더 권장됩니다. 웹에는 기능과 견고성뿐만 아니라 많은 문서와 개발자 리소스가 있습니다.

몽고를 선호하고 싶은 두 가지 주된 이유는

  • 스키마 설계의 유연성 (JSON 유형 문서 저장소).
  • 확장 성 - 노드를 추가하면 수평으로 확장 할 수 있습니다.

빅 데이터 응용 프로그램에 적합합니다. RDBMS는 빅 데이터에 적합하지 않습니다.

합류와 '복잡한 거래'에 관한이 모든 것들을 알고 있습니다. 그러나 몇 년 전, Commit / Rollback에 대한 "필요"를 설명했던 것은 Monty 자신이었습니다. 어쨌든 (데이터베이스가 아님) - 다시 한번 같은 것입니다. 필요한 것은 웹 앱이하는 일의 99%에 대한 멍청하지만 엄청나게 깔끔하고 빠른 데이터 저장/검색 엔진입니다.

앞에서 말했듯이 많은 선택 중에서 선택할 수 있습니다. 모든 선택을 살펴보십시오.http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

내가 제안하는 것은 최선의 조합을 찾는 것입니다 : MySQL + memcache는 산이 필요하고 일부 테이블에 가입하려면 정말 좋습니다 MongoDB + redis는 문서 저장에 적합합니다. Neo4J는 그래프 데이터베이스에 적합합니다.

내가하는 일 : 나는 사용하기 때문에 MySQL + memcache로 시작하고 다른 데이터베이스 프레임 워크를 사용하기 시작합니다. 단일 프로젝트에서는 예를 들어 MySQL과 MongoDB를 결합 할 수 있습니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top