source

Choosing MongoDb/CouchDb/RavenDb - performance and scalability advice

manycodes 2023. 5. 26. 21:12
반응형

Choosing MongoDb/CouchDb/RavenDb - performance and scalability advice

We are looking at a document db storage solution with fail over clustering, for some read/write intensive application.

We will be having an average of 40K concurrent writes per second written to the db (with peak can go up to 70,000 during) - and may have around almost similiar number of reads happening.

We also need a mechanism for the db to notify about the newly written records (some kind of trigger at db level).

What will be a good option in terms of a proper choice of document db and related capacity planning?

Updated

More details on the expectation.

  • On an average, we are expecting 40,000 (40K) Number of inserts (new documents) per second across 3-4 databases/document collections.
  • The peak may go up to 120,000 (120K) Inserts
  • The Inserts should be readable right away - almost realtime
  • Along with this, we expect around 5000 updates or deletes per second
  • Along with this, we also expect 500-600 concurrent queries accessing data. These queries and execution plans are somewhat known, though this might have to be updated, like say, once in a week or so.
  • The system should support failover clustering on the storage side

if "20,000 concurrent writes" means inserts then I would go for CouchDB and use "_changes" api for triggers. But with 20.000 writes you would need a stable sharding aswell. Then you would better take a look at bigcouch

And if "20.000" concurrent writes consist "mostly" updates I would go for MongoDB for sure, since Its "update in place" is pretty awesome. But then you should handle triggers manually, but using another collection to update in place a general document can be a handy solution. Again be careful about sharding.

마지막으로, 저는 당신이 동시성만으로 데이터베이스를 선택할 수 없다고 생각합니다. 당신은 api(데이터를 검색하는 방법)를 계획한 다음 수중의 옵션을 검토해야 합니다.

저는 MongoDB를 추천합니다.제 요구 사항은 당신의 요구 사항만큼 높지는 않았지만 상당히 가까웠습니다.당신이 C#을 사용할 것이라고 가정하면, 저는 공식적인 MongoDBC# 드라이버와 안전 모드가 켜진 InsertBatch 방법을 추천합니다.말 그대로 파일 시스템이 처리할 수 있는 속도로 데이터를 쓸 수 있습니다.몇 가지 주의 사항:

  1. MongoDB는 트리거를 지원하지 않습니다(최소한 마지막으로 확인했을 때).
  2. MongoDB는 디스크에 동기화하기 전에 RAM에 데이터를 캐시합니다.내구성이 있는 실시간 요구사항이 필요한 경우에는 fsync를 더 낮게 설정하는 것이 좋습니다.이는 상당한 성능 저하를 가져올 것입니다.
  3. C# 드라이버가 약간 어색합니다.저만 그런 건지 모르겠지만, 긴 실행 작업을 할 때마다 이상한 오류가 발생합니다.C++ 드라이버는 C# 드라이버(또는 다른 드라이버)보다 훨씬 낫고 실제로 더 빠릅니다.

그렇긴 하지만, 저는 또한 RavenDB에 대해서도 알아보는 것을 추천합니다.당신이 원하는 모든 것을 지원해 주지만, 제 목숨을 걸고는 Mongo 근처에서 공연할 수 없었습니다.

MongoDB에 근접한 유일한 데이터베이스는 Riak였습니다.키 공간을 저장하기에 충분한 메모리가 있는 한 기본 비트캐스크 백엔드는 터무니없이 빠르지만 트리거를 지원하지 않습니다.

Membase(및 곧 출시될 Couchbase 서버)는 사용자의 요구사항을 쉽게 처리하고 동적 확장성(즉시 노드 추가 또는 제거), 페일오버를 통한 복제를 제공합니다.상단에 있는 memcached 캐슁 계층은 200,000ops/sec를 쉽게 처리할 수 있으며, 여러 노드로 선형적으로 스케일아웃하여 데이터를 Disk에 지속적으로 저장할 수 있습니다.

최근 가지 벤치마크에서 대기 시간이 매우 짧다는 것을 확인했습니다(대략 높은 처리량). http://10gigabitethernet.typepad.com/network_stack/2011/09/couchbase-goes-faster-with-openonload.html

지원되는 엔터프라이즈급 제품에 엔지니어링 및 QA 리소스가 포함되어 있는 것이 얼마나 중요한지는 모르겠지만, 이 제품도 사용할 수 있습니다.

편집: 내장 트리거 인터페이스가 이미 있다는 사실을 잊고 데이터가 Disk에 도달하거나(지속적으로) 복제되는 시점을 추적하기 위해 이 인터페이스를 더욱 확장하고 있습니다.

페리

  • 읽기/쓰기 집약적인 애플리케이션을 위해 페일오버 클러스터링이 포함된 문서 DB 스토리지 솔루션을 검토 중입니다.

충분한 캐시와 솔리드 디스크가 매우 빠르다는 점에서 Google의 LevelDB 백엔드[여기 Google의 멋진 벤치마크가 있습니다]를 사용하여 Riak를 실행합니다.문서의 구조와 크기(2KB 언급)에 따라 벤치마크해야 합니다.[ 데이터를 공유할 수 있다면(비즈니스 측면에서) 단일 노드에서 40K/s 처리량을 유지할 필요가 없습니다.]

LevelDB의 또 다른 장점은 데이터 압축 => 스토리지입니다.스토리지에 문제가 없으면 압축을 사용하지 않도록 설정할 수 있습니다. 이 경우 LevelDB는 문자 그대로 실행됩니다.

2차 인덱스가 있는 Riak를 사용하면 데이터 구조를 원하는 대로 문서화할 수 있습니다. => 검색에 관심이 있는 필드만 인덱싱할 수 있습니다.

성공적이고 고통 없음Fail Over리아크의 두 번째 이름입니다여기는 정말 빛이 납니다.

  • 우리는 또한 DB가 새로 작성된 레코드에 대해 통지하는 메커니즘이 필요합니다(DB 레벨에서 일종의 트리거).

믿을 수 있습니다.pre-commit그리고.post-commit hooksRiak에서는 이러한 동작을 달성하지만, 다시 한번 트리거가 되므로 가격 => 성능/유지보수성이 제공됩니다.

  • 삽입물은 거의 실시간으로 바로 읽을 수 있어야 합니다.

Riak가 디스크에 쓰기(비동기식 MongoDB 서프라이즈 없음) =>reliably readable더 나은 일관성이 필요한 경우, 삽입에 대한 Riak의 쿼럼을 구성할 수 있습니다. 예를 들어 삽입이 성공적으로 처리되기 전에 반환해야 하는 노드 수

일반적으로, 만약에.fault tolerance/concurrency/fail over/scalabilityErlang이 수년 동안 이러한 문제를 성공적으로 해결했기 때문에 Erlang으로 작성된 데이터 저장소를 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/5258360/choosing-mongodb-couchdb-ravendb-performance-and-scalability-advice

반응형