使用哪个浏览器SQL数据库?

时间:2013-11-20 22:58:31

标签: browser indexeddb web-sql

好吧,所以我需要为iOS和Android移动浏览器(~30 MB)实现一个相当大的本地数据库。我正在研究这些选项,看起来像WebSQL(我想要使用的选项)正在被积极放弃。此外,看起来似乎并不完全支持IndexedSQL。

您对本地浏览器数据库有何建议?谢谢!

3 个答案:

答案 0 :(得分:2)

使用IndexedDBShim(用于WebSQL的polyfill)的IndexedDB,肯定会满足您的要求。但请注意,IOS设备最多允许存储50 MB。

我已经处理过与您类似的要求,这种组合适用于所有现代浏览器。

答案 1 :(得分:1)

我认为除了使用indexeddb之外别无选择。 WebSQL已被弃用,而localstorage很小,而且不能满足需求。

我写了一个实现类似linq接口的库。通过使用方法,您可以轻松查询数据库。例如:

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

因为indexededdb是异步的,所以你将获得一个承诺。

您可以在codeplex

找到我的图书馆

答案 2 :(得分:0)

我在2016年回答这个问题(在您提出这个问题后2年)以及有关deprecation of WebSQL still stands的所有内容。另一方面,IndexedDB为enjoys the support of all of the major browser vendors

现在是时候说“IndexedSQL”既不是IndexedDB的替代名称,也不是任何其他现有客户端数据库的名称:)。指出这一点可能看起来有点迂腐,但事实并非如此:IndexedDB是一个非关系型文档存储,因此本身不支持SQL。

无论您称之为什么,IndexedDB是目前W3C标准轨道上唯一的数据库,因此对于任务负责选择客户端数据库的人来说,这是唯一面向未来的选项。

然而,正如GemK所暗示的那样,这样的决定不一定是必须做出的;人们可以简单地选择(或制作)利用客户端机器上可用数据库的库。

BakedGoods与已经在这里建议的图书馆有几点不同;最有针对性的是,它允许明确指定要使用的存储类型,从而允许开发人员在决策过程中引入其他因素(如性能特征)。

有了它,支持任何数据库类型的存储操作都是......

...为两种数据库类型指定适当的操作选项和等效配置:

//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真的由你自己维护:)。