2011-08-17 2 views
0

현재 서버에서 mysql 데이터베이스를 사용하고 응용 프로그램에서 로컬 sqlite를 사용하고 있습니다. 로컬 데이터베이스에 많은 문제가 있습니다. 때때로 데이터베이스 잠금, 업데이트 할 수 없습니다.Mac 응용 프로그램의 데이터베이스 옵션

Mac 응용 프로그램에 로컬로 데이터를 저장하기위한 핵심 데이터 및 Sqlite 이외의 옵션이 있습니까?

답변

3

데이터베이스를 다른 데이터베이스로 바꾸면 잠금 문제가 해결되지 않을 수 있습니다. SQLite 및 CoreData (종종 SQLite를 사용함)는 대부분의 Mac 응용 프로그램은 아니지만 많은 Mac 응용 프로그램에서 사용되는 견고한 기술입니다.

발생하는 잠금에 대한 자세한 정보가 없으면 데이터베이스를 잘못 사용하고있는 것일 가능성이 큽니다. 다중 스레드에서 데이터베이스에 액세스하려고합니까? 준비된 진술 문을 정확하게 닫고 있습니까?

0

코어 데이터가 가장 좋습니다. 왜 이걸 쓰지 않으 시죠? XML로 항목을 저장할 수도 있습니다. 이것은 작은 것들을 저장하는 데 아주 편리합니다. 이 같은 예를 들어 dicitionary을 저장할 수 있습니다

[dict writeToFile:@"YOUR_PATH" atomically:NO]; 

당신은 구현하여 다시 사전을 얻을 수 있습니다

NSDicionary* dict = [NSDictionary dictionaryWithContentsOfFile:@"YOUR_PATH"]; 
2

당신은 다른 스토리지 백엔드를 코어 데이터를 사용하지만 계속 사용할 수있는, 예를 들어, 이진 (Binary) 암호 (일반적으로 잠금 및 트랜잭션 안전성과 관련하여 덜 문제가 있어야 함). 다양한 종류의 영구 저장소 코디네이터에 대해서는 Core Data Programming Guide을 참조하십시오.

관련하여 Stephen Darlington's Answer : 동의하지 않습니다. SQLite의 Concurrency Control (Optimistic Concurrency Control)에 따라 트랜잭션은 현재 "사용중인"데이터를 수정하기 때문에 중단 될 수 있습니다. 이것은 심지어 단일 관계의 데이터베이스 입도에서 발생할 수 있습니다. 이 경우, 바이너리 스토어와 같은 「트랜잭션 (transaction)를 적게 사용하는 안전한」백엔드를 사용하는 것으로, 벌써 충분합니다. 이것은 일관성을 관리하기 위해 당신에게 부담을 주지만 거래가 충돌하지 않는다고 확신하는 경우에는 괜찮습니다.

+0

나는 "가능성이 없다"고 말했습니다. 자신의 거래를 관리하는 것이 해결책 인 유스 케이스가 있습니다. 그러나 질문의 ​​표현 방식 (세부 사항 부족)으로 인해 이것이 하나가 아닌 것으로 의심됩니다. –

관련 문제