2010-03-22 4 views

답변

2

Mongo는 복제가있는 서버에서 실행될 예정입니다. 중앙 서버의 데이터베이스에 연결하지 않는 한 데스크톱 응용 프로그램을위한 데이터베이스는 아닙니다. MongoDB 블로그에 blog post on durability이 있습니다. 일반적인 질문입니다.

쓰기가 발생하고 쓰기 명령이 리턴

, 우리는 100 %를 할 수 없다 그 순간부터 시간에 에 다른 모든 프로세스가 업데이트 된 데이터 만 볼 수 있는지 확인하십시오.

모든 드라이버에는 데이터베이스 응답을 기다리는 "안전한"삽입 또는 업데이트 옵션이 있어야합니다. 어떤 드라이버를 사용하려고하는지 알지 못합니다 (.NET 용으로는 몇 가지가 있습니다. http://github.com/samus/mongodb-csharp이 가장 공식적으로 지원됩니다). 드라이버는 안전한 옵션을 제공하지 않으므로 getLastError 명령을 실행하여 항목을 동기화 할 수 있습니다 수동으로.

MongoDB는 데이터가 하드 드라이브에 즉시 있는지 확인하지 않습니다. 결과로 서버가 쓰여지고 하드 디스크에 실제로 저장 될 때 서버가 다운 된 경우 이미 으로 작성된 데이터가 손실 될 수 있습니다. 드라이브.

정말로 원하는 경우 모든 작업 후에 실행할 수있는 fsync 명령이 있습니다. 다시 말하지만, Mongo는 "안전을위한 숫자"철학을 가지고 있으며, 프로덕션 환경에서 실행중인 모든 사람에게 백업용 슬레이브를 하나 이상 보유하도록 권장합니다.

+0

는 나쁜 생각처럼 보입니다. – Chet

+0

@Chet : 실제로이 답변을 작성했기 때문에 내구성 기록이 추가되어 더 이상 안전 문제가 발생하지 않습니다. 그러나 사용자가 (대부분의) 응용 프로그램에 대해 데이터베이스 서버를 실행하게하는 것은 여전히 ​​실용적이지 않습니다. – kristina

0

데이터베이스에 저장하려는 항목에 따라 다릅니다.

Wikipedia에 따르면;

는 MongoDB가이 문제를 설계 쉽게 스팬 여러 서버에 데이터베이스를 필요로 문제를 포함하여, 전통적인 RDBMS에 의해 가 해결되지 무거운 트랜잭션 요구 사항없이.

.NET driver이 있습니다. 그리고 here은 시작하는 데 도움이되는 정보입니다. 하지만 먼저 물어 봐야합니다. 무엇을 저장하고 싶고 그 이상의 요구 사항은 무엇입니까? (저장 프로 시저, 트리거, 예상 크기 등에 대한 지원)

+0

글쎄, MongoDB는 우리의 요구 사항을 충족 시키지만 몇 가지 이슈가 있습니다 : 1. 쓰기가 발생하고 쓰기 명령이 돌아 오면 그 순간부터 모든 다른 프로세스에 업데이트 된 데이터 만. 2. MongoDB는 데이터가 하드 드라이브에 즉시 있는지 확인하지 않습니다. 결과적으로 하드 드라이브에 쓰기와 실제 저장 사이에 서버가 다운 된 경우 이미 작성되었다고 생각되는 데이터는 손실 될 수 있습니다. – SHSE

+0

그래,하지만 통계 등을 저장하고 싶다고 생각해? 그렇다면 당연히 삽입 된 데이터가 실제로 저장되었는지, 그 문제가 속도보다 중요하지 않은지 항상 확신 할 수있는 것이 중요합니다 ... 하지만 개인적으로는; 알려진 문제로 더 나은 대안을 모색 할 것입니다.예를 들어 Oracle이나 SQL Server 또는 MySQL 또는 SQLite와 같은 큰 회사 일 수 있습니다. db에 저장하려는 내용의 양과 정도에 대해 자세히 설명해 주시겠습니까? – Rhapsody

+0

MongoDB는 빠르며, 하드 드라이브에 데이터를 즉시 저장하지 않기 때문에 더 빠릅니다. 또한 다중 노드 구성에서 전체 일관성 대신 최종 일관성을 갖기 때문에 더 빠릅니다. 트레이드 오프에 관한 모든 것입니다. 완전한 일관성과 완벽한 내구성이 필요하다면 Oracle (RAC) 또는 Sql Server를 사용해야합니다. – Theo

관련 문제