단일 페이지 애플리케이션에서 작업하면서 서버 측 데이터와 동기화하기 위해 많은 상용구 코드를 작성해야합니다.
PouchDB 는 클라이언트 측에서 로컬로 데이터에 액세스 할 수 있도록이 문제에 대한 우아한 솔루션을 제공합니다.
내가 이해하지 못하는 것은 데이터베이스가 너무 커서 브라우저 메모리에 완전히 맞지 않는 경우 Pouch가 데이터베이스 프록시로 적합한 지 여부입니다.
내가 읽을 수있는 한 Pouch는 전체 원격 데이터베이스를 복제하여 작동하므로 전체 데이터베이스가 브라우저 메모리에 맞는 경우에만 사용할 수 있습니다.
모든 Wikipedia 기사가 포함 된 데이터베이스가 있고 클라이언트 측에서 그 일부를 조작하고 싶다고 가정 해 보겠습니다. 복제는 갈 길이 아닙니다. 필요한 것은 프록 싱입니다. 예를 들어 쿼리가 클라이언트 측에서 로컬로 실행되면 일치하는 결과 만 전송되어야합니다. 전체 데이터베이스를 로컬로 복제 할 수 없기 때문에 복제 된 값에 대해서만 쿼리를 실행하는 것은 불가능합니다.
PouchDB 동기화가 원하는 것을 실제로 수행하지 않는다는 것이 맞습니다. 전체 데이터베이스 또는 서버 측 디자인 문서를 사용하여 데이터베이스의 미리 정의 된 하위 집합을 동기화하도록 설계되었습니다.
내가 당신이라면 아마도 PouchDB를 사용 하겠지만 수동으로 동기화를 처리 할 것입니다. 이 같은:
var localDB = new PouchDB('localDB');
var remoteDB = new PouchDB('http://some-site.com:5984/somedb');
function searchForDocs(docId) {
// try the local DB first
localDB.get(docId).catch(function (err) {
if (err.name !== 'not_found') {
throw error;
}
// not found, so fall back to the remote DB
return remoteDB.get(docId).then(function (doc) {
// cache in the local DB
delete doc._rev;
return localDB.put(doc).then(function () {
return doc;
});
});
}).then(function (doc) {
// do something with our doc
}).catch(function (err) {
// handle any errors along the way
});
}
여기서 사용 get()
은 약간 간단합니다. Wikipedia의 경우 allDocs({startkey: query, endkey: query + '\uffff'})
ID가 쿼리로 시작하는 모든 문서를 찾고 싶을 것입니다 . 또는 보조 인덱스를 사용할 수 있습니다.
따라서 PouchDB의 내장 동기화의 이점을 얻지 못하더라도 클라이언트와 서버에 대해 동일한 코드를 작성할 수 있다는 이점과 PouchDB의 브라우저 간 지원이 제공됩니다. 그래서 나는 이것이 그것에 대해 나쁜 방법이라고 생각하지 않습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다