로컬 HTML5 DB (WebSQL 스토리지, SQLite)를 서버와 동기화하는 가장 좋은 방법 (양방향 동기화) [닫기]


151

로컬 데이터베이스 (html5 웹 저장소 사용)가있는 모바일 웹 응용 프로그램 (iPhone 및 Android 용)을 개발 중이므로 사용자가 오프라인 상태 일 때도 내 앱을 계속 사용할 수 있습니다.

이것은 완벽하게 작동하지만 로컬 데이터를 서버에 저장하고 싶습니다. 따라서 로컬 DB를 서버의 DB와 동기화해야합니다. 동기화는 한 가지 방법 일 수 있지만 앞으로는 양방향 (서버 <-> 로컬 DB)으로 동기화하고 싶습니다.

이 요구 사항은 매우 일반적으로 보이거나 향후 모바일 웹 앱에서 일반적으로 보일 수 있지만 그렇게하는 라이브러리를 찾을 수 없습니다.

Google이 모바일 웹 앱 (예 : gmail)에서 그렇게하고 있다는 것을 알고 있으며 WSPL 프로젝트 는 Google 프로젝트이지만 소스는 다운로드 할 수 없습니다.

솔루션을 찾을 수 없으면 한 가지 방법으로 동기화가 어려워 보이지 않으므로 다른 솔루션이 있는지 궁금해하는 라이브러리를 만듭니다.


2
libs가 있는지 모르겠지만 가장 쉬운 방법은 수정 타임 스탬프를 저장하고 다른 쪽의 레코드보다 새로운 레코드로 변경 사항을 전송하고 마지막 동기화 이후 추가 및 삭제를 전송하는 것 같습니다. 로컬 및 서버 시계가 동기화되어 있지 않으면 미쳐 버릴 수 있지만 무언가를 생각할 것입니다. -도움이되지 않아 답변을 제공하지 않으므로 주석으로 게시
Ivan Vučica

고마워 Ivan. 로컬 및 서버 시계가 동기화되어 있지 않으면 혼란 스러울 수 있습니다 ... 방금 발견 : quickconnect.pbworks.com/Using-Enterprise-Synchronization 로컬 HTML 5 DB를 서버의 DB. 더 깊이 살펴보고 QuickConnect 프레임 워크 외부에서 실행할 수 있는지 확인해야합니다.
Samuel

다른 해결책을 찾았습니다 : impel.simulacre.org/blog/… 좋아 보이지만 Mootools 라이브러리와 Impel ORM을 사용해야합니다.
Samuel

1
CouchDB는 어떻습니까? couchdb.apache.org
julianm

4
주제는 토론 을위한 것이며, Stack Exchange는 질문을 위한 입니다. 어느 시점에서 이와 같은 게시물은 Stack Exchange에서 수락되었지만 더 이상 허용되지 않았습니다.
casperOne

답변:


70
  • 로컬 WebSql DB를 서버 (클라이언트 <-> 서버)와 동기화하기 위해 WebSqlSync 라는 작은 JS lib를 만들었습니다 . 코드에서 사용하고 통합하기가 매우 쉽습니다.

https://github.com/orbitaloop/WebSqlSync

  • 오픈 소스 프로젝트 QuickConnect 에는 로컬 HTML5 SQLite DB를 서버 DB (MySQL 또는 기타)와 동기화하기위한 JS 라이브러리가 포함되어 있습니다.

http://quickconnect.pbworks.com/Using-Enterprise-Synchronization

이 lib를 사용하려면 프레임 워크의 DataAccessObject를 사용하여 DB에 액세스해야합니다. DB에 적용된 모든 SQL 요청을 저장하고 (물론 선택 제외) 서버로 전송하여 작동합니다. 삭제를 관리하는 것이 좋지만 업데이트가 많고 서버가 동일한 SQL 언어를 사용해야하는 경우 약간 무겁습니다 ...

  • QuickConnect의 또 다른 프로젝트 는 네이티브 SQLite 동기화입니다 (iOS 또는 Mac OS 용 Objective C 및 Android 용 Java).

http://www.quickconnectfamily.org/qcdbsync/ (모든 SQL 요청의 히스토리도 저장한다고 생각합니다)

  • 그리고 방금 또 다른 유망한 JS 라이브러리를 찾았습니다 : persistenceJS

https://github.com/zefhemel/persistencejs

"persistence.js는 비동기 자바 스크립트 객체 관계형 매퍼 라이브러리입니다. 브라우저뿐만 아니라 서버에서도 사용할 수 있습니다 (그리고 데이터 모델을 서로 공유 할 수 있음)."

그들은 DB synch 모듈을 가지고 있습니다 : DOC of persistence.synch.js

(클라이언트에서는 HTML5 DB SQLite 또는 Google Gears, 서버에서는 MySQL에서 작동)

  • 그리고 Impel.inTouch있습니다 . 사용하기 매우 쉬운 것처럼 보이지만 (php 파일 포함) 클라이언트 측에서 Mootools 프레임 워크를 사용해야합니다.

http://impel.simulacre.org/api/Impel.inTouch

  • Sencha는 Sencha.io 동기화 서비스도 제공 합니다. 멋지지만 Sencha Touch 프레임 워크에 의존합니다.

http://www.sencha.com/products/io/


사무엘 안녕하세요, JS 라이브러리가 당신을 위해 일했습니까?
Mathias Conradt

DB 동기화는 현재 우선 순위가 아니기 때문에 더 표준적이고 강력한 솔루션을 기다리는 것을 포기했습니다 ...
Samuel

3
그것들을 모두 테스트 한 후에 WebSQL을 서버 DB와 동기화하기 위해 작은 JS 라이브러리를 개발할 것이라고 생각합니다. 이중 동기화 (로컬 <-> 서버)이며 종속성이 없습니다. 코드가 완성되면 여기에 링크를 게시하겠습니다
Samuel

2
WebSqlSync라는 자체 동기화 솔루션의 첫 번째 버전을 커밋했습니다 : github.com/orbitaloop/WebSqlSync (아래 답변 참조)
Samuel

1
안녕하세요 여러분, 편안한 동기화를 위해 persistencejs 플러그인을 시작했습니다. 여전히 개발 중이지만 누군가가 그것을 확인하고 싶다면 : github.com/robertokl/persistencejs 및 루비 온 레일이있는 서버 / 클라이언트 측의 실제 예제 : github.com/robertokl/persistencejs-restfulSync-example
robertokl

18

WebSqlSync 라는 일반 동기화 솔루션을 개발했습니다 .

그것은 어떤 프레임 워크에 의존하지 않습니다. 여기에서 사용할 수 있습니다 : https://github.com/orbitaloop/WebSqlSync

README 파일의 추출 :

WebSqlSync

로컬 WebSql 데이터베이스 (네비게이터의 SQLite)를 서버에 자동으로 동기화합니다. (양방향 동기화 : 클라이언트 <-> 서버)

기존 앱에 매우 쉽게 통합하고 사용하기 매우 쉽습니다 (호출 기능 : initSync 및 syncNow)

용법

초기화

lib를 초기화해야합니다 (예 : 각 시작시).

자동으로 2 개의 테이블을 생성하고 (존재하지 않는 경우 새로운 또는 수정 된 모든 요소를 ​​저장하는 테이블 (new_elem 테이블), 마지막 동기화 날짜를 저장하는 테이블 (table sync_info), SQLite 트리거도 생성합니다. 동기화하려는 테이블에서 INSERT 또는 UPDATE를 보려면 new_elem 테이블에 수정 된 요소를 자동으로 삽입하십시오.

DBSYNC.initSync(TABLES_TO_SYNC, webSqlDb, sync_info, 'http://www.myserver.com', callBackEndInit);

여기서 TABLES_TO_SYNC는 서버와 동기화하려는 테이블 목록입니다 (예 :

TABLES_TO_SYNC = [
    {tableName : 'table1', idName : 'the_id'},
    {tableName : 'table2'} //if idName not specified, it will assume that it's "id"
];

동기화

동기화를 시작하려면 syncNow 함수를 호출해야합니다. X 초마다 또는 다음과 같이 약간의 변경 후에 호출 할 수 있습니다.

DBSYNC.syncNow(callBackSyncProgress, function(result) {
     if (result.syncOK === true) {
         //Synchronized successfully
     }
});

그리고 이것이 클라이언트에서해야 할 전부입니다. 서버 측에서는 자체 솔루션을 코딩해야하지만 복잡하지는 않습니다. 그리고 PHP & Java에 몇 가지 예가 있습니다. 다시 한 번 기부를 환영합니다.


1 년 후 요약하면 이것이 당신에게 얼마나 효과적이라고 말하겠습니까? 브라우저와 모바일 장치에서 작동하는 좋은 클라이언트 측 DB를 찾고 있습니다.
Niklas

1
WebSQLSync는 프로덕션 (iOS 및 Android)에서 25 개 이상의 앱과 잘 작동합니다. WebSQL은 정말 훌륭하고 빠릅니다. iOS, Android, Blackberry (최신 버전) 및 Chrome 및 Safari에서 작동합니다. 그러나 API는 W3C에 의해 감가 상각 되었기 때문에 IE와 firefox에서 작동하지 않습니다.
Samuel

좋습니다. 거기에는 긍정적 인면과 부정적인면이 있습니다. 요약 해 주셔서 감사합니다!
Niklas

2
WebSQL이 아닌 localStorage와 비슷한 것이 있습니까?
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.