어떻게 되는 겁니까?

응용 프로그램에서 LiteSync 코드가 포함된 SQLite 라이브러리의 수정된 버전을 사용하여 데이터베이스에 액세스하십시오.

SQLite 라이브러리의 수정사항은 내부적이며 인터페이스는 동일하다.

LiteSync 라이브러리는 트랜잭션 데이터를 교환하면서 서로 통신할 것이다.






복제

앱을 처음 열면 다른 노드에 연결하여 데이터베이스의 새 사본을 다운로드한다.

중앙 위상에서는 기본 노드가 데이터베이스 복사본을 보조 노드로 전송한다.

다운로드되면 노드는 동기화를 시작한다.



동기화

노드가 동일한 기본 데이터베이스를 가지고 있으면 오프라인일 때 실행된 트랜잭션을 교환한다.

이 후 온라인 모드로 전환되고, 노드에서 새로운 트랜잭션이 실행되면 연결된 노드에서 실행되도록 전송된다.

노드가 오프라인 상태일 경우 트랜잭션은 나중에 교환할 로컬 로그에 저장된다.



앱 코드를 변경해야 하는가?

몇 가지 단계가 있지만 기본적으로 데이터베이스 오프닝의 URI 문자열을 다음과 같이 변경해야 한다:

"file:/path/to/app.db"

다음과 같은 경우로:

"file:/path/to/app.db?node=secondary&connect=tcp://server.ip:1234"

좋은 소식은 LiteSync가 네이티브 SQLite3 인터페이스를 사용한다는 것이다. 그것은 우리가 다른 API를 사용할 필요가 없다는 것을 의미한다.



연결

각 노드에는 두 가지 옵션이 있다:

주소에 바인드를 한다
피어 주소에 연결한다

그래서 어느 쪽이 다른 쪽에 연결될 것인지 선택할 수 있다. 이것은 한 쪽이 라우터나 방화벽 뒤에 있을 때 유용하다.



지원되는 토폴로지


중앙 집중식 별 토폴로지


이 토폴로지에는 다른 모든 노드가 연결될 노드가 있으므로 동기화가 이루어지려면 온라인 상태여야 한다.

다음은 몇 가지 구성 예:


기본 노드는 주소에 바인딩할 수 있고 보조 노드는 주소에 연결할 수 있다.

기본 노드:

"file:/home/user/app.db?node=primary&bind=tcp://0.0.0.0:1234"

보조 노드: (각각 별도의 장치에)

"file:/home/user/app.db?node=secondary&connect=tcp://server:1234"


기본 노드는 보조 노드에도 연결할 수 있다.

기본 노드:

"file:/home/user/app.db?node=primary&connect=tcp://address1:port1,tcp://address2:port2"

보조 노드: (각각 별도의 장치에)

"file:/home/user/app.db?node=secondary&bind=tcp://0.0.0.0:1234"


우리는 이 두 가지 옵션을 혼합해서 사용할 수도 있다.

기본 노드:

"file:/home/user/app.db?node=primary&bind=tcp://0.0.0.0:1234&connect=tcp://address1:port1"

보조 노드 1:

"file:/home/user/app.db?node=secondary&connect=tcp://server:1234"

보조 노드 2:

"file:/home/user/app.db?node=secondary&bind=tcp://0.0.0.0:1234"



동기화 상태

다음 명령을 사용하여 동기화 상태를 확인할 수 있음:

PRAGMA sync_status

JSON 문자열을 반환한다.



데이터베이스가 준비되었는지 확인

앱이 장치에서 처음으로 열려 있는 경우 다른 노드에서 데이터베이스의 새 사본을 다운로드할 수 있다. 끝날 때까지 데이터베이스에 접근할 수 없다.

동기화 상태를 검색하고 db_is_ready 변수를 확인할 수 있다.

아래 기본 앱 예제를 확인하십시오.



내 앱에서 어떻게 사용하는가?

세 가지 단계가 있다:

1  SQLiteSync가 포함된 라이브러리로 교체

2  URI 연결 문자열 변경

3  데이터베이스 준비 상태 확인

C 및 C++ 앱을 컴파일할 때는 응용프로그램을 LiteSync 라이브러리에 연결해야 한다.

다른 언어의 경우 적절한 래퍼를 설치해야 한다.



기본 노드 예제

기본 노드는 보조 노드와 정확히 동일한 앱이지만 다른 URI를 사용하는 일반 애플리케이션일 수 있다.

아니면 우리는 기본 노드가 되는 전용 앱을 사용할 수 있다.

중앙 데이터베이스 노드를 유지하기 위한 목적으로만 사용되는 기본 독립형 애플리케이션은 다음과 같다:

언어 선택 -->



기본 앱 예제

로컬 데이터베이스에 쓰는 기본 앱은 다음과 같다:

언어 선택 -->



보안

LiteSync는 비밀 키를 사용한 암호화를 통해 어떤 노드가 네트워크의 일부가 될 수 있는지 제어하기 위해 "공유 비밀" 방식을 사용합니다

데이터베이스와 노드 간 통신에 대해 암호화를 활성화하는 것이 가능하며 권장됩니다

암호화에 대한 설명을 확인하세요



현재 제한 사항

1  비결정적 함수(호출할 때마다 다른 값을 반환하는 함수)는 random()date('now')와 같이 차단됩니다. 앱에서 생성된 명시적인 값을 사용하세요

2  AUTOINCREMENT 키워드는 지원되지 않습니다 - 하지만 그것이 필요하지 않습니다! (자세한 내용은 비디오를 확인하세요)

3  단일 애플리케이션만이 동시에 데이터베이스에 접근할 수 있습니다. 각 인스턴스는 자신의 데이터베이스를 사용해야 하며, 그런 다음 LiteSync를 사용하여 복제되고 동기화됩니다