2012-10-17 2 views
2

AIR 프로젝트에서 SQLite DB를 사용하려고하는데 인터넷에서 특히 모범 사례와 관련된 답변을 찾을 수없는 몇 가지 질문이있는 것 같습니다.Adobe Air SQLite 오해

  1. 첫 번째 문제는 동일한 애플리케이션 인스턴스에 여러 개의 연결이 있다는 것입니다. 일부 응용 프로그램 프로세스는 1 초 동안 db를 사용해야하며 동기식 코드 흐름 (try {} catch() {})이 더 잘 처리 할 수 ​​있습니다. 일부 프로세스는 다소 시간이 걸릴 수 있으며 AsyncResponder를 사용하여 비동기 코드 흐름에 더 잘 서비스 할 수 있습니다.

    이 때문에 저는 여러 개의 async 인스턴스와 하나의 동기화 SQLConnection 클래스 인스턴스가있는 ConnectionPoolManager를 가지고 있다고 생각했습니다. 이것은 괜찮은, 좋은 또는 절대적으로 끔찍한 생각입니까? 이것은 나의 다음 요점으로 인도한다.

  2. 동시에 여러 개의 비동기 연결에서 비동기 문을 실행하는 데 문제가 있습니까? 어떤 사람들은 DB가 잠겨 있다는 것에 대해 불평하는 것을 보았습니다. 그리고 한 번에 하나의 문장 만 쓸 수 있다는 것을 읽었습니다.

    다른 하나가 사용 중일 때 write 문 (새 비동기 ...)을 호출하려면 어떻게됩니까? 오류가 발생하거나 시간이 초과 될 때까지 기다릴 것입니까?

이 문제에 대한 설명은 크게 감사하겠습니다. 나는 일종의 대답에 대한 답변을 원천으로하고 있지만 특히 나의 질문에 대해서는 계속 대답하지 않고있다. 보통 나는 스스로 시험해 볼 것이지만, 나는 무거운 사용 수준에서만 나타낼 수있는 함정 오류를 재현 할 수 없을지 모른다는 걱정이 듭니다.

편집 : 다음은 반나절 낭비 한 후 발견 한 문제에 관한 문서입니다. Adobe Doc

답변

2

SQLite에는 쓰기 동시성이 없습니다. 작가는 다른 모든 독자와 작가를 차단합니다.

그런 충돌이 발생하면 ID가 3119 인 SQLError이 발생합니다. 이 경우 응용 프로그램은 대기하고 다시 시도해야합니다. SQLite는 대기를 자동으로 수행하는 내장 설정을 가지고 있지만 이것은 Air에 의해 노출되지 않습니다. 코드에서 수동으로 수행해야합니다 (is not easy).

따라서 SQLite에 단일 연결을하는 것이 더 쉽습니다. 비동기 적으로 사용하려면 Mutex을 사용하여 액세스를 관리해야합니다.

+0

고맙습니다. 이것은 db와 함께 작업 할 때 훨씬 더 복잡한 작업이 필요하기 때문에 일종의 우울함입니다. 필자는 Adobe 포럼에 게시하여이 문제에 대한 설계 팁이 있는지 알아 본 후 처음으로이 문제를 다루는 사람이 아님을 알았습니다. 시간 초과 매개 변수를 노출하는 방법이 있었으면합니다. –