2016-07-07 18 views
0

저는 현재 간단한 데이터베이스를 작성하려고합니다. 이제 문제가 발생했습니다. 내 서버가 다음에 시작될 때 문제가 발생했는지 확인하는 방법입니다. 많은 고성능 NoSQL 데이터베이스는 로그 구조화 된 병합 트리 또는 이와 유사한 메커니즘을 사용합니다. 그래서 나는 항상 디스크와 i에 마지막 트랜잭션을 작성합니다. 이자형. 전원을 차단하면 데이터를 다시 시작할 때 얼마나 많은 데이터가 기록되었는지 어떻게 알 수 있습니까? 나는 Stackoverflow에 다른 스레드를 보았습니다.이 스레드는 저자가 말한 것처럼 지금은 더 이상 찾을 수 없습니다.이 경우 항상 일부 에너지가 보존되어 전체 블록을 쓸 수 있다고 믿습니다. 맞습니까? 이러한 상황을 어떻게 처리합니까? 그것은 비동기 * nix-API의 일부가되어야합니까? 나는 읽기 오류를보고하는데 사용하고 있습니까?공통 HDD 및 SSD가 전체 섹터를 기록하도록 보장합니까?

답변

1

동기 IO을 사용하면 쓰기 명령은 블록/파일 쓰기가 완료 될 때까지 반환되지 않습니다. 시간이 걸릴 수도 있지만 응용 프로그램에서 쓰기가 완료되고 디스크로 플러시되는 것이 보장됩니다.

더 나은 성능을 얻으려면 일반적으로 비동기 IO이 선택됩니다. OS 및 저장소 하드웨어가 쓰기를 캐시하여 IO 성능을 최적화 할 수 있습니다.

일부 배경 here와 쓰기가 당신 this Q&Athis one 설명으로 정전에 그들을 잃지 않도록 특별한 조치를 취할 필요가 당신의 OS/하드웨어 어딘가에 캐시

here.