EC2 서버의 MongoDB 또는 AWS SimpleDB?
MongoDB가 설치된 여러 EC2 인스턴스를 호스팅하거나 Amazon SimpleDB 웹 서비스를 훨씬 더 사용하는 시나리오는 무엇입니까?
MongoDB에서 EC2 인스턴스를 여러 개 사용할 때 인스턴스를 직접 설정하는 문제가 있습니다.
SimpleDB를 사용할 때 Amazons 데이터 구조에 나를 가두는 문제가 있습니다. 그렇죠?
개발 측면에서 어떤 차이가 있습니까?서비스 계층의 DAO를 전환하여 MongoDB 또는 AWS SimpleDB에 기록할 수 있어야 하지 않습니까?
SimpleDB에는 몇 가지 확장성 제한이 있습니다.샤딩으로만 확장할 수 있으며 mongodb나 cassandra보다 대기 시간이 길고 처리량 제한이 있으며 다른 옵션보다 가격이 높습니다.확장성은 수동입니다(샤드해야 함).
더 광범위한 쿼리 옵션이 필요하고 읽기 속도가 높고 데이터 mongodb가 너무 많지 않다면 더 좋습니다.그러나 내구성을 위해 최소 2개의 mongodb 서버 인스턴스를 마스터/슬레이브로 사용해야 합니다.그렇지 않으면 데이터의 마지막 순간이 손실될 수 있습니다.확장성은 수동입니다.단순화된 b보다 훨씬 빠릅니다.자동 차단은 1.6 버전에서 구현됩니다.
Cassandra는 쿼리 옵션이 약하지만 postgresql만큼 내구성이 있습니다.그것은 mongo만큼 빠르고 더 높은 데이터 크기에서 더 빠릅니다.쓰기 작업은 카산드라에서 읽기 작업보다 빠릅니다.ec2 인스턴스를 실행하여 자동으로 확장할 수 있지만 구성 파일을 조금 수정해야 합니다(제가 올바르게 기억한다면).테라바이트의 데이터를 가지고 있다면 카산드라가 가장 좋습니다.데이터를 셰이딩할 필요가 없습니다. 첫날부터 배포하도록 설계되었습니다.모든 데이터에 대한 복사본을 여러 개 가질 수 있으며, 일부 서버가 비활성화되면 활성 서버의 결과가 자동으로 반환되고 비활성 서버의 데이터가 다른 서버에 배포됩니다.내결함성이 높습니다.인스턴스를 여러 개 포함할 수 있으므로 다른 옵션보다 훨씬 쉽게 확장할 수 있습니다.강력한 .net 및 Java 클라이언트 옵션이 있습니다.연결 풀링, 로드 밸런싱, 정지된 서버 표시 등이 있습니다.
또 다른 옵션은 빅 데이터를 위한 하둡이지만 다른 것들만큼 실시간이 아니기 때문에 데이터 웨어하우징에 하둡을 사용할 수 있습니다.카산드라와 몽고 모두 트랜잭션이 없으므로 트랜잭션이 필요하다면 postgresql이 더 적합합니다.또 다른 방법은 Amazon RDS인데 성능이 안 좋고 가격도 비싸요.데이터베이스 또는 simpledb를 사용하려면 데이터 캐싱(예: memcached)도 필요할 수 있습니다.
웹 앱의 경우 데이터가 작으면 몽고를 추천하고, 큰 카산드라가 더 좋습니다.몽고나 카산드라가 있는 캐싱 계층이 필요하지 않습니다. 이미 속도가 빠릅니다.저는 simplifiedb를 추천하지 않습니다, 그것은 또한 당신이 말한 것처럼 당신을 아마존에 고정시킵니다.
c#, java 또는 scala를 사용하는 경우 인터페이스를 작성하여 mongo, mysql, cassandra 또는 기타 데이터 액세스 계층용으로 구현할 수 있습니다.동적 언어(예: rub, python, php)에서는 더 간단합니다.필요에 따라 두 개의 프로바이더를 작성하여 스토리지를 변경할 수 있습니다. 스토리지를 런타임에 변경하는 것은 구성 변경만으로 가능합니다.mongo, cassandra 및 simpledb를 사용한 개발은 데이터베이스보다 쉽고 스키마가 없으며 사용 중인 클라이언트 라이브러리/커넥터에 따라 다릅니다.가장 간단한 것은 몽고입니다.카산드라는 테이블당 인덱스가 하나밖에 없어서 다른 인덱스를 직접 관리해야 하는데 0.7 릴리스의 카산드라 2차 인덱스는 가능할 것으로 알고 있습니다.또한 이들 중 하나로 시작하여 필요한 경우 나중에 교체할 수도 있습니다.
당신은 시간과 속도 둘 다에 대한 질문을 가지고 있다고 생각합니다.
MongoDB / Cassandra는 훨씬 더 빠를 것이지만, 당신은 그것들을 진행하기 위해 $$$를 투자해야 할 것입니다.즉, 모든 서버 인스턴스를 실행/설정하고 작동 방식을 파악해야 합니다.
반면, "거래별" 비용을 직접 지불할 필요는 없으며, 대규모 서비스의 경우 더 효율적인 하드웨어 비용만 지불하면 됩니다.
Cassandra / MongoDB 싸움에서 여러분은 이것을 발견할 것입니다(지난 며칠 동안 제가 개인적으로 관여한 테스트를 바탕으로 함).
카산드라:
- 확장성/중복성이 매우 중요합니다.
- 구성이 매우 복잡할 수 있음
- 보고를 수행하려면 맵 축소가 필요하며, 이를 위해 하둡 계층을 실행해야 합니다.이는 구성해야 하는 번거로움과 성능을 향상시켜야 하는 더 큰 어려움이었습니다.
MongoDB:
- 비교적 쉬운 구성(새 샤딩의 경우에도 이번 주)
- 중복성이 여전히 "실현" 중임
- 맵리듀스가 내장되어 있어 데이터를 쉽게 꺼낼 수 있습니다.
솔직히, 10GB의 데이터에 필요한 구성 시간을 감안할 때 MongoDB를 사용했습니다.SimpleDB를 사용하여 "반드시 실행해야 하는" 사례를 상상할 수 있습니다.그러나 MongoDB를 실행하도록 노드를 구성하는 것은 매우 간단하므로 "SimpleDB" 경로를 건너뛸 가치가 있습니다.
DAO 측면에서는 이미 Mongo를 위한 수많은 도서관이 있습니다.카산드라를 위한 절약 프레임워크는 잘 지원됩니다.연결을 추상화하기 위해 간단한 논리를 작성할 수 있습니다.하지만 단순한 CRUD보다 더 복잡한 것들을 추상화하는 것은 더 어려울 것입니다.
5년이 지난 지금 어떤 OS에서도 Mongo를 설정하는 것은 어렵지 않습니다.문서화는 따라하기 쉬우므로 Mongo를 설정하는 것이 문제가 되지 않습니다.다른 답변에서는 확장성에 대한 질문을 다루었기 때문에 개발자의 관점에서 질문을 다루려고 합니다(각 시스템에 어떤 제한이 있는지).
S는 SimpleDB, Mongo는 M을 사용하겠습니다.
- M은 C++로 작성되고, S는 Erlang으로 작성됩니다(가장 빠른 언어가 아님).
- M은 오픈 소스이고, 모든 곳에 설치되어 있고, S는 독점적이며, 오직 아마존 AWS에서만 실행될 수 있습니다.당신은 또한 S에 대한 직원 전체에 대한 비용을 지불해야 합니다.
- S는 많은 이상한 한계를 가지고 있습니다.M 제한은 훨씬 더 합리적입니다.가장 이상한 제한 사항은 다음과 같습니다.
- 도메인(테이블)의 최대 크기는 10GB입니다.
- 속성 값 길이(필드 크기)는 1024바이트입니다.
- 응답 선택의 최대 항목 수 - 2500
- 선택에 대한 최대 응답 크기(S에서 반환할 수 있는 최대 데이터 양) - 1Mb
- S는 몇 가지 언어(자바, php, 파이썬, 루비, .net)만 지원하고, M은 훨씬 더 많은 언어를 지원합니다.
- 둘 다 REST를 지원합니다.
- S에는 SQL과 매우 유사한 쿼리 구문이 있습니다(그러나 훨씬 덜 강력함).M으로 당신은 json처럼 보이는 새로운 구문을 배울 필요가 있습니다(기본을 배우는 것도 간단합니다).
- M으로 당신은 당신의 데이터베이스를 어떻게 설계하는지 배워야 합니다.많은 사람들이 스키마가 없다는 것은 데이터베이스에 정크를 버리고 쉽게 추출할 수 있다는 것을 의미한다고 생각하기 때문에 정크 인, 정크 아웃 격언이 작동하는 것에 놀랄 수 있습니다.저는 S에도 동일한 것이 있다고 가정하지만, 확실하게 주장할 수는 없습니다.
- 둘 다 대/소문자를 구분하지 않는 검색을 허용하지 않습니다.M에서 정규식을 사용하면 추가 소문자 필드/응용 프로그램 논리를 도입하지 않고도 이 제한을 어떻게든 극복할 수 있습니다.
- S에서 정렬은 한 필드에서만 수행할 수 있습니다.
- S의 5배 제한 횟수 때문에 이상하게 행동할 수 있습니다.5초가 지나도 쿼리가 완료되지 않으면 쿼리를 계속할 수 있는 부분 번호와 토큰이 표시됩니다.응용프로그램 논리는 이 모든 데이터를 수집하고 요약합니다.
- 모든 것이 UTF-8 문자열이므로 S에서 문자열이 아닌 값(숫자, 날짜 등)으로 작업하는 것은 골치 아픈 일입니다.M형 지원은 훨씬 풍부합니다.
- 둘 다 트랜잭션이 없고 조인이 없습니다.
- M은 압축을 지원하므로 동일한 필드 이름이 처음부터 다시 저장되는 nosql 저장소에 매우 유용합니다.
- 단일 인덱스만 지원하고, M은 단일, 복합, 다중 키, 지리 공간 등을 가지고 있습니다.
- 복제 및 샤딩 모두 지원
고려해야 할 가장 중요한 사항 중 하나는 SimpleDB가 매우 기본적인 쿼리 언어를 가지고 있다는 것입니다.▁things것들도▁like▁even▁basic인적과 같은 기본적인 것들도.group by
,sum
average
,distinct
데이터 조작이 지원되지 않기 때문에 Redis/Memcached보다 기능이 훨씬 풍부하지 않습니다.반면에 Mongo는 풍부한 쿼리 언어를 지원합니다.
언급URL : https://stackoverflow.com/questions/3391586/mongodb-on-ec2-server-or-aws-simpledb
'programing' 카테고리의 다른 글
MongoDB: 지난 24시간 동안 작성된 문서만 가져오시겠습니까? (0) | 2023.05.25 |
---|---|
"이 작업을 수행하는 동안 오류가 발생했습니다." (0) | 2023.05.25 |
따옴표와 별표가 있는 문자열로 저장된 bash 명령 실행 방법 (0) | 2023.05.25 |
PostgreSQL CASE...여러 조건으로 종료 (0) | 2023.05.25 |
Node.js를 통해 Postgres에 연결하는 방법 (0) | 2023.05.25 |