我正处于开发应用程序的R& D阶段,具有以下关键要求:
由于配额限制,我无法使用网络存储空间 - 我正在比较SQLite和Indexed DB。
我对API的选择感到困惑。在Safari上是否还有其他SQLite替代方案或支持索引数据库?
答案 0 :(得分:14)
我认为放弃IndexedDB会是一个坏主意,因为它可能是未来的格式,因此Safari可能会停止支持WebSQL。
似乎有各种JavaScript解决方案来弥合两者之间的差距 - 在用户的浏览器上可用的任何一个节省: JavaScript Library to Bridge IndexedDB and WebSQL 我认为这可能是你最好的解决方案。
答案 1 :(得分:13)
首先,W3C弃用的是WebSQL而不是SQLite
IndexedDB -
WebSQL -
SQLite -
如果你想要一个关于SQLite的快速教程,
答案 2 :(得分:5)
是的,IndexedDB API很棒,所有浏览器都会在不久的将来支持。
我绝对推荐我自己的解决方案https://bitbucket.org/ytkyaw/ydn-db它是IndexedDB的非常薄的包装,并回退到Sqlite for safari。
答案 3 :(得分:3)
IndexedDB很可能是未来支持的数据库,最好是使用它而不是WebSQL。正如Raymond所指出的,最好参考http://www.caniuse.com来查看桌面和移动浏览器中当前/未来的支持。
根据您的解决方案的当前需求,您可以使用许多使用local storage并提供查询界面的JavaScript库中的一个。其中一个适合我的图书馆是Lawnchair。
答案 4 :(得分:2)
如果您不想在IndexedDB或WebSQL之间进行选择,可以使用Javascript库PouchDB。
我在Android Webview中使用它来存储离线数据,它运行良好。如果没有可用的Internet连接,则数据存储在本地数据库中(使用IndexedDB或WebSQL),并且在存在可用连接时与远程数据库(CouchDB数据库)同步。
如果不支持IndexedDB,PouchDB将依赖于IndexedDB但fall back to WebSQL。还可以为Cordova / PhoneGap使用SQLite插件。
答案 5 :(得分:2)
我想做一个小编辑来更新这个问题,因为如果您对websql,localStorage和indexedDB这个主题进行研究,谷歌会指导我们这个问题。编辑被拒绝了,所以我发帖作为答案。
正如其他人在他们的回答中所述,IndexedDB在支持和网络内容方面缺乏一点文档和规范。
但IndexedDB支持已vastly improved for mobile。它改进了很多,唯一没有任何支持的浏览器是Opera Mini,but it has only 0,34% of market usage。
截至2015年,我建议任何开发人员迁移到IndexedDB,因为WebSQL已被弃用,IE和Firefox停止支持它(仅这些就超过市场使用量的15%!)而且SQLite正迅速失去空间IndexedDB,现在非常好documentation sources,many。 Some official as well!一些IT公司甚至也在激励使用,例如IBM。
我打算用它,到目前为止我还没有遇到任何问题。 Safari增加了对它以及所有主流浏览器的支持。去吧!
编辑:个人附录:我尝试过IndexedDB。我是团队中的高级管理员,而IndexedDB语法对于小型存储问题来说太杂乱和复杂 - 我最后使用localstorage来保存一些简单的JSON数据并在需要时解析它。我团队中的任何人都可以更好地获得它(当然,我也是如此!)答案 6 :(得分:1)
这可能是游戏的后期,但您可以查看:SequelSphere
这是一个100%的HTML5 / JavaScript关系数据库,可跨浏览器工作,并使用本地存储来保存数据。您也可以使用SQL来查询它。它是自己的数据库引擎,不依赖于内置(WebSQL)关系数据库。因此,它适用于所有浏览器。
虽然它目前仅支持localStorage,但其目的是支持所有标准。由于浏览器支持其他类型的持久性,SequelSphere将利用它。积极的是,您只使用标准SQL对SequelSphere进行编码,并让它处理持久性。
尽管如此,请注意它是市场上的新产品,因此既有正面也有负面效果。
答案 7 :(得分:1)
正如其他人所指出的,因为这个问题已被提出,webSQL has been deprecated,而IndexedDB实现now exist in all of the major browser vendors。
所以对于那些可能发现自己面临相同决策的人来说,请使用IndexedDB。
其他人也正确地暗示,不必在两种类型的数据库之间做出选择。人们可以简单地选择(或制作)利用客户端机器上可用数据库的库。
如果您正在寻找此类图书馆,请查看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由这个人维护在这里:)。