SQL Server에서 MongoDB로 이동해야 하는 이유와 반대하는 이유
저는 이것이 중요한 질문이라는 것을 알고 있고, 그렇다고 대답하지도 않지만, 우리는 웹 앱을 개발하고 지속성 솔루션을 위해 MongoDB를 사용하는 것을 검토하고 있습니다.객체 저장을 위해 MongoDB와 NoRM을 결합합니다.
제가 묻고 싶은 것은 SQL에서 mongo로 전환하는 과정에서 어떤 위험을 겪었냐는 것입니다.mongo가 단순히 올바른 솔루션이 아니며 mongodb의 장점이 SQL에서 개발을 옮기기에 충분할 때는 언제입니까?
스토리지 백엔드를 선택할 때는 데이터 형식이 가장 중요하다고 생각합니다.당신은 본질적으로 관계가 있는 데이터를 가지고 있습니까?만약 그렇다면, 문서에 있는 데이터를 모델링하는 것이 가능합니까?관계형 데이터베이스에서와 마찬가지로 문서 데이터베이스에서도 데이터 모델링이 중요합니다.당신은 얼마나 많은 종류의 물체를 가지고 있고 그것들은 어떻게 연관되어 있습니까?Mongodb에 있는 DBrefs가 트릭을 할 수 있습니까, 아니면 외국 키를 너무 그리워해서 고통스러울 것입니까?데이터에 대한 액세스 패턴은 무엇입니까?필드 값으로 필터링된 한 유형의 데이터를 가져오는 것입니까, 아니면 복잡한 가져오기 모드가 있습니까?
ACID 트랜잭션 무결성이 필요합니까?도메인이 데이터에 많은 제약을 가합니까?문서 데이터베이스의 확장성 요소가 필요합니까? 아니면 "멋진" 요소만 필요합니까?
일관성 및 데이터 무결성 요구사항은 무엇입니까?일부 NoSQL 솔루션과 특히 MongoDB는 성능을 얻기 위해 쓰기 일관성이 상당히 느슨합니다.NoSQL은 통일된 환경과 다른 제품이 아닙니다. 예를 들어, CouchDB는 이 부서의 다른 특징을 가지고 있습니다.일부는 조정할 수도 있습니다.
이 모든 질문은 스토리지 선택에 포함되어야 합니다.
몇 가지 경험
- MongoDB 또는 문서 데이터베이스를 사용하는 경우 저장된 데이터에 대한 광범위한 보고를 수행하는 것이 더 어려울 수 있으며 일부 사용 사례에서는 이러한 목적으로 RDBMS와 document-db를 결합하고 있습니다.
- (매우) 다른 쿼리 모델입니다.MongoDB는 다른 document-db와도 다릅니다.
- 개발 중에 데이터 형식/스킴을 유연하게 변경 가능
- 미지의 영역
- 드라이버 및 프레임워크의 다양한 성숙도
- 빠른
- 여러 RDBMS 제품에 비해 (여러 가지 면에서) 더 단순한 제품 및 관리 툴
- 임피던스 불일치가 더 이상 없습니다.스토리지는 데이터에 적합하지만 그 반대는 아닙니다.
- 마찰이 적고 데이터에 대한 직접적인 액세스가 가능합니다.
- 지속성과 더 관련된 도메인(NoRM의 ORM "수준", 백엔드를 추상화하는 정도에 따라 다름)NoRM을 사용해본 적이 없어서 답변을 드릴 수 없습니다.
단점들
- (비전이 없음/다른) 내구성 (http://www.mikealrogers.com/2010/07/mongodb-performance-durability) 참조)
- 트랜잭션 없음
- 제약 없음
- MapReduce를 사용한 집계는 느리고 그룹별로 코드를 작성해야 합니다.
- 보고하는 것이 더 어렵고 개발자는 관계를 정의하지만 비즈니스 분석가는 자체 쿼리를 작성할 수 없습니다. 예를 들어 '마이너스'(sql server lango의 경우 'except')를 수행할 수 없습니다.
전문가들
- 당신은 쉽게 새로운 'filename'과 'filename'을 추가할 수 있습니다.
- 속도
- 샤딩(아직 베타 버전)
- 문서는 관계형 테이블 집합보다 객체에 더 가깝게 일치하므로 매핑이 더 쉬워집니다.
- 그것은 마음을 넓힙니다.
마일리지는 다양할 수 있지만, 인덱스가 있는 여러 "테이블 행"(MongoDB의 비계층 플랫 문서)을 업데이트하는 속도를 비교하기 위해 작성한 빠른 그래프입니다.
며칠 전부터 그것을 가지고 여기저기 뒤적거리고 있습니다.이것이 제가 그것에 대해 말할 수 있는 것입니다.
대상:
- 더 이상 SQL 문이 없습니다.
- 데이터베이스가 클래스와 비슷하지만 그 반대는 아닙니다.
- "schema"가 더 유연합니다.
- 확장성이 좋습니다.
- 시작하기 매우 쉽습니다.
- <의견>멋져요 </의견>
반대:
- 현재 mongo 앱에 대한 사용자 지정 멤버십 제공자 및 역할 제공자를 구현하려고 하지만 어떻게든 내 멤버mongo에서 검색하려고 할 때 Ship user class에 NULL 필드가 있습니다.
- C# 드라이버에 대해 읽은 적이 있는 곳에서 비교적 젊지만 안정적이므로 몇 가지 변화를 기대하십시오. (비록 이것이 나를 방해하지는 않겠지만)
튜토리얼에서 누락된 점이 하나 있습니다.개체 내에서 목록을 초기화합니다. 그렇지 않으면 .save(yourrobj)를 시도하는 동안 오류가 발생합니다.가장 안전한 방법은 클래스에서 개체 내부에 NULL 개체가 없는지 확인하는 생성자를 작성하는 것입니다.이렇게 하면 무언가를 잊어버려도 오류가 발생하지 않습니다.
NoSQL 시작하기에서 NoSQL 데이터베이스(MongoDB 포함) 사용에 대한 몇 가지 장단점을 찾을 수 있습니다.간단히 요약하면, 다른 데이터 모델(객체 모델에서 "이 새로운 모델"로의 매핑이 필요한지 생각해 보십시오), 다른 쿼리 모델(MongoDB 쿼리는 다른 모델과 비교했을 때 상당히 성능이 좋습니다), 트랜잭션이 없습니다(그러나 일부 원자적 작업이 있습니다).
어쨌든, 제 관점에서 가장 중요한 변화는 데이터 모델과 이 새로운 접근 방식으로 앱을 설계하는 방식입니다.
AWS의 Atlas 클라우드에서 실행되는 MongoDB를 수개월 동안 사용해 왔으며 다음과 같은 두 가지 주요 이점이 있습니다.
- 우리의 관계형 dbs에 비해 터무니없이 빠릅니다.저는 유럽 횡단 왕복을 포함하여 15ms 이상의 시간 내에 반환되는 문서를 거의 보지 못합니다.
- 우리는 스키마나 비정규화에 대한 관심을 그만 두었습니다. 우리는 c# 객체 도메인 모델을 가져와서 데이터베이스에 직렬화하면 꽤 잘 작동하는 것 같습니다.
언급URL : https://stackoverflow.com/questions/3287966/reasons-for-and-against-moving-from-sql-server-to-mongodb
'programing' 카테고리의 다른 글
Dapper 오류가 발생한 IEnumberable 컬렉션을 "class는 Dapper에서 지원하지 않습니다."로 삽입합니다. (0) | 2023.05.15 |
---|---|
Postgres에서 한 데이터베이스에서 다른 데이터베이스로 표 복사 (0) | 2023.05.15 |
심층 복제 개체 (0) | 2023.05.15 |
Postgresql에 제목이 있는 CSV로 테이블을 내보내는 방법은 무엇입니까? (0) | 2023.05.15 |
WPF 컨트롤의 여백 속성의 일부만 바인딩 (0) | 2023.05.15 |