2013-11-20 4 views
0

좋아요, 그래서 iOS 및 Android 모바일 브라우저 (~ 30MB)를위한 상당히 큰 로컬 데이터베이스를 구현해야합니다. 옵션을 연구 중이며 WebSQL (사용하고 싶은 옵션)이 적극적으로 포기되고있는 것처럼 보입니다. 또한 IndexedSQL이 완전히 지원되지 않는 것 같습니다.사용할 브라우저 SQL 데이터베이스는 무엇입니까?

로컬 브라우저 데이터베이스에는 어떤 것이 좋습니다? 감사!

답변

1

나는 indexeddb를 사용하는 것 외에 다른 선택의 여지가 없다고 생각합니다. WebSQL은 더 이상 사용되지 않으며 localstorage는 작고 필요에 부응하기 위해 공연하지 않습니다.

나는 linq와 같은 인터페이스를 구현하는 라이브러리를 작성했습니다. 메소드를 사용하여 데이터베이스를 쉽게 조회 할 수 있습니다. 예 :

linq2indexeddb.from("store").where("field").equals("value").select() 

indexededdb가 비동기이므로 약속을 되 찾을 수 있습니다.

당신은 IndexedDBShim (WebSQL에 대한 polyfill)의 사용과 codeplex

2

색인화에서 내 라이브러리를 찾을 수 있는지 외모에 대한 귀하의 요구 사항을 충족합니다. 하지만 IOS 장치는 최대 50MB의 저장 공간을 허용한다는 점에 유의하십시오.

나는 당신과 비슷한 요구 사항을 다뤄 왔으며이 조합은 모든 최신 브라우저에서 작동했습니다.

0

나는이 질문에 답한 후 2 년 후인 2016 년과 deprecation of WebSQL still stands과 관련된 모든 내용을 회신합니다. 반면에 IndexedDB는 enjoys the support of all of the major browser vendors입니다.

"IndexedSQL"은 IndexedDB의 대체 이름도 아니며 기존의 다른 클라이언트 측 데이터베이스의 이름도 아닙니다. :) IndexedDB는 비 관계형 문서 저장소이므로 SQL을 기본적으로 지원하지 않습니다.

당신이 무엇을 부르든 관계없이 IndexedDB는 현재 W3C 표준 트랙의 유일한 데이터베이스이므로 클라이언트 측 데이터베이스를 선택하는 모든 사람들을위한 미래의 유일한 옵션입니다.

그러나 GemK에 의해 암시 된 바와 같이, 그러한 결정은 반드시 만들어 져야하는 것이 아닙니다. 클라이언트 컴퓨터에서 사용할 수있는 데이터베이스를 사용하는 라이브러리를 간단하게 선택하거나 만들 수 있습니다.

BakedGoods은 이미 여러 가지 방법으로 여기에 제안 된 라이브러리와 다릅니다. 가장 적절하게는, 개발자가 다른 요소 (예 : 성능 특성)를 의사 결정 프로세스에 도입 할 수 있도록 명시 적으로 지정되도록 사용되는 저장 유형을 허용합니다. 문제이다 지원 데이터베이스 유형 중 스토리지 동작들을 수행 그걸로

...

... 모두 데이터베이스 유형에 대한 적절한 작업 옵션과 등가 CONFIGS 지정 :

//If the operation is a set(), and the referenced structures 
//don't exist, they will be created automatically. 

var webSQLOptionsObj = { 
    databaseName: "Example_DB", 
    databaseDisplayName: "Example DB", 
    databaseVersion: "", 
    estimatedDatabaseSize: 1024 * 1024, 
    tableData: { 
     name: "Main", 
     keyColumnName: "lastName", 
     columnDefinitions: "(lastName TEXT PRIMARY KEY, firstName TEXT)" 
    }, 
    tableIndexDataArray: [name: "First_Name_Index", columnNames: "(firstName)"] 
}; 

var indexedDBOptionsObj = { 
    databaseName: "Example_DB", 
    databaseVersion: 1, 
    objectStoreData: { 
     name: "Main", 
     keyPath: lastName, 
     autoIncrement: false 
    }, 
    objectStoreIndexDataArray: [ 
     {name: "First_Name_Index", keyPath: "firstName", unique: false, multiEntry: false} 
    ], 
}; 

var optionsObj = { 
    conductDisjointly: false, 
    webSQL: webSQLOptionsObj, 
    indexedDB: indexedDBOptionsObj 
}; 

... 그리고 작업 수행 :

bakedGoods.set({ 
    data: [ 
     {value: {lastName: "Obama", firstName: "Barack"}}, 
     {value: {lastName: "Biden", firstName: "Joe"}} 
    ], 
    storageTypes: ["indexedDB", "webSQL"], 
    options: optionsObj, 
    complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){} 
}); 

그것의 간단한 인터페이스와 타의 추종을 불허하는 저장 시설 지원은 지원 절 부족의 비용에 온다 일부 저장 장치 특정 구성의 경우.예를 들어 다중 컬럼 기본 키가있는 WebSQL 테이블에서 저장 영역 조작을 지원하지 않습니다.

이러한 유형의 기능을 많이 사용하는 경우 다른 곳을 찾아 볼 수 있습니다.

아, 완벽한 투명성을 위해 BakedGoods가 귀하의 것으로 진정 유지됩니다. :)

관련 문제