5

상황 : 과학 데이터의 테이블을 표시하고 업데이트하기 위해 상호 작용하는 데이터베이스와 웹 앱이 있습니다. 내 작업에 대한 jQuery Mobile의 오프라인/온라인 데이터베이스 인증/동기화

  • 다운로드 식별 데이터를

    1. 인증하는 사용자를 허용하는 모바일 응용 프로그램을 구성하고 (캐시에 저장된 미리 정의 된 다이나믹 한 사용자 계정 및 권한을 사용) 오프라인 추적 목적 을 위해 자신을 식별하는 것입니다 (인터넷 접속없이) 필드에서
    2. 만들기 및 저장 관찰
    3. 나중에
    에서 온라인 데이터베이스에 관찰 동기화 (인터넷 접속) 분야에서 일

    질문 : 일관된 인터넷 액세스와 무관하게 이러한 응용 프로그램을 관리하는 데 필요한 데이터를 인증/다운로드/저장/업로드하는 가장 좋은 방법은 무엇입니까? 두 사람이 동일한 읽기를 조정하고 동기화 사이에 하나의 업데이트가 발생하면 어떤 테이블과 값이 변경되었는지 추적하고 변경 사항이 손실되지 않도록하려면 어떻게해야합니까?

    생각의 현재 기차 : 충돌 제어에 나의 현재 임시 전략은 sessionStorage에 저장된 모든 온라인 데이터베이스 트랜잭션을 나타내는 JSON 객체를 저장하는 "동기화"테이블을 유지하고 응용 프로그램은 지속적으로 이전 데이터를 업로드에 그 동기를 확인해야 할 ,이 개체를 검사하여 특정 기본 키에 대한 업데이트 충돌 가능성을 확인합니다. 편집 단계에있을 때 튜플을 잠글 수는 있지만 일관성없는 인터넷 액세스에서는 불가능한 것처럼 보입니다. 이것은 newb 질문의 비트가

    미안 해요 ...

    TL 전체 모바일 앱 개발 일에 새로운 해요, 박사가 어떻게 모바일 앱에서 데이터베이스로 비동기 변경을 방지 할 동일한 데이터베이스에 대한 다른 개인의 변경 사항을 덮어 쓰거나 충돌하는 것과 동시에 온라인 및 오프라인으로 이동합니까? 그리고 네트워크 연결없이 사용자를 인증하려면 어떻게해야합니까?

  • +0

    동시성은 많은 앱과 데이터 부족 문제입니다. 모바일과의 게시 및 기술면에서 더 긴 간격이 있지만 그다지 다르지 않습니다. – JeffO

    +1

    @JeffO 내 질문에 정말로 답하고 있지 않다. 동시성과 데이터 충돌은 내가 확인한 문제이다. 사실이지만 그 중 무엇인가? – XaxD

    답변

    2

    - 오픈 -source 라이브러리는 JSON 문서를 여러 유형의 저장소에서 동기화 할 수 있으며 매우 간단한 API를 가지고 있습니다.

    사용할 수있는 커넥터가 많으며 (webDav, S3, xwiki 등) 사용할 수있는 커넥터가 있으며 JSON 데이터를 제공하려는 JIO를 연결하기 위해 자체 커넥터를 작성할 수도 있습니다.

    그런 다음 클라이언트에서 당신은 예를 들어 창고로 복제-개정 클라이언트 로컬 호스트를 사용하여 저장 및 원격 스토리지를 설정할 수 있습니다 다음 storage_list

    var jio_instance = jIO.newJio({ 
        "type": "replicaterevision", 
        "storage_list": [{ 
        "type": "revision", 
        "sub_storage": {<storage spec for your localhost storage>} 
        }, { 
        "type": "revision", 
        "sub_storage": {<storage spec for your remote storage>} 
        }] 
    }); 
    

    모든 창고가 자동으로 버전과 동기화됩니다. 따라서 사용자가 오프라인 일 때 문서를 가져 와서 편집하고 저장하면 (사용자가 오프라인 일 때 localstorage에만 해당) jIO는 다음 번에 온라인에있을 때 사용자가 파일에 액세스하려고 할 때 충돌이 발생합니다. remote-storagelocalstorage이 다릅니다.

    그렇다면 여러 사용자가 온라인/오프라인에서 문서를 편집하면서 발생하는 충돌을 해결하기위한 루틴을 작성하는 것만으로도/유지/병합 할 버전입니다.

    문서에 대한 액세스는 매우 간단합니다. JSON 문서 메타 데이터와 attachements을 가지고 있고 당신은 당신의 JSON 문서를 수정하려면 다음 명령을 사용할 수 있습니다

    POST > generate a new document 
        PUT > update existing document 
        GET > retrieve a document 
        REMOVE > delete a document 
        ALLDOCS > retrieve all documents 
        PUTATTACHEMENT > add an attachment to a document 
        GETATTACHEMENT > retrieve an attachment from a document 
        REMOVEATTACHEMENT > delete an attachement from a document 
    

    호출이 등이 :

    jio_instance.get({"_id":"your_doc_id"}, function (err, response) { 
        // do something 
        }); 
    

    JIO 또한 데이터베이스를 실행할 수있는 complex-queries 모듈을 가지고 귀하의 저장소에 대한 쿼리를 좋아하십시오. 따라서 다음과 같이 할 수 있습니다.

    options = { 
    query: '(author:"% Doe") AND (format:"pdf")', 
    limit: [0, 100], 
    sort_on: [['last_modified', 'descending'], ['creation_date', 'descending']], 
    select_list: ['title'], 
    wildcard_character: '%' 
    }; 
    
    // run query 
    jio_instance.allDocs(options, function (error, response) { 
        // do sth 
    }); 
    

    궁금한 점이 있으면 알려주세요. 사용자 인증을위한

    2

    아약스 전화로 "경쟁 조건"[1]에 대해 들었습니까? [2] 해결책이 있습니다. 동시성 대신 순차적으로 서버에 대한 ajax 호출을 수행하는 방법은 순차적으로 실행됩니다. 이것은 비동기 연결에서 작동하므로 다른 동기화 작업은 필요하지 않습니다.

    여기서 유용한 트릭은 jQuery ajaxQueue [3]을 사용하는 것입니다.

    내 소스 :

    [1] jIO를 살펴 가질 수 동기화와 같이 http://en.wikipedia.org/wiki/Race_condition

    [2] How to make all AJAX calls sequential?

    [3] http://plugins.jquery.com/ajaxqueue/

    2

    내가 경로를 따라 제안합니다 네트워크에 연결되지 않은 상태 : 포인트 # 2에서

    당신이 인터넷을 통해 식별 데이터를 다운로드 할 수 있습니다. 따라서 분명히 사용자 이름과 암호 쌍을 로컬 저장소에 암호화 된 형식으로 저장해야합니다. 원격지, 즉 오프라인 모드에서 애플리케이션에 액세스하는 동안 동일한 기기에서 동일한 사용자를 인증하는 데 도움이되는 유일한 것입니다. 궁극적으로 핸드 헬드 장치는 사용자별로 있으며 응용 프로그램은 해당 사용자의 기록 만 유지합니다. 나는 그런 시나리오에서 절대적으로 좋다고 생각한다.

    충돌을 피하기 위해; 장치가 주 서버와 동기화되는 횟수를 늘리도록 제안합니다. 사용자가 네트워크에 있고 데이터를 수정하면 백그라운드 동기화 작업이 주 서버에 대한 변경 사항을 동기화해야하며 다른 사용자는 미리 정의 된 간격 후에 동기화해야합니다. 데이터를 동기화하는 데 더 많은 시간이 필요합니다. 갈등의 가능성은 적습니다. 그러나 사용자가 오프라인 모드에있는 동안 데이터에 발생한 수정 사항에 대한 문제는 여전히 남아 있습니다. 이를 위해 우리는 아무 것도 할 수 없습니다. 충돌 관리 코드에는 어떤 데이터 사본이 더 선호하는지와 같은 정보가 있어야합니다 (예 : 보안 역할을 가진 X 사용자로부터 오는 데이터 또는 B 보안 역할을 갖는 Y 사용자로부터 오는 데이터 또는 이와 유사한 데이터).