我需要一个客户端浏览器数据库.我有什么选择

JnB*_*ymn 46 database html5 plugins web-applications

我正在创建一个我认为必须有客户端数据库的网站.另一种选择是将所有内容都粘在服务器上,但代价是增加了复杂性并降低了可扩展性.我有什么选择?我必须构建一个插件吗?我必须等到每个人都符合HTML5标准吗?


更新有很多关于为什么我真的需要这个的评论.这是我的想法.告诉我,如果我是愚蠢的:

  • 客户端将具有大而复杂的状态,需要像数据库这样的东西来提供我需要的数据交互.因此(我认为)饼干是不可能的.
  • 这些数据是暂时的,因此客户端无需关心它们是否在关闭会话后立即被删除.但是,如果他们转到不同的网页然后回来,他们将需要保留数据.因此(我认为)以某种方式将数据存储在某种javascript SQL实现中是行不通的.
  • 我当然可以做我想在服务器上做的所有事情,服务器可以扩展以管理负载(Facebook). 但是(我认为)我宁愿构建一个插件而不是支付基础设施来支持这种负载.这适用于裸机启动.(初创公司越富有,我的骨头就越好.)

Šim*_*das 32

索引数据库(我可以使用)
Web SQL(我可以使用)
localStorage

  • 我想要在这些apis之上构建的dbs列表. (5认同)

Kev*_*vin 7

我回答这个问题的时间已经晚了5年左右,但考虑到现有的一些答案中存在错误和过时的数据,以及原始问题中未解决的问题,我认为我会投入两分钱.

首先,与其他人在此处暗示的相反,localStorage不是数据库.它(或应该被视为)一个持久的,基于字符串的键值存储...

...这可能完全符合您的需求(并将我带到第二点).

  • 您是否需要在数据项之间建立明确或隐含的关系?
  • 查询所述项目的能力如何?
  • 或者超过5 MB的空间?

如果您对上述所有问题的回答都是"否",那么请使用localStorage,避免出现WebSQL和IndexedDB API的麻烦.好吧,也许只是后者的头痛,因为前者已被弃用.

您可能还需要查看其他几个客户端存储工具(本机和非本机),其中一些已弃用*但仍看到某些浏览器的支持:

如果您想利用这些设施中的任何一个,请查看BakedGoods,而无需编写低级存储操作代码.有了它,例如,将数据放在其中一个(或多个)中就像这样简单:

bakedGoods.set({
    data: [{key: "key1", value: "val1"}, {key: "key2", value: "val2"}],
    storageTypes: ["silverlight", "fileSystem", "localStorage"],
    options: optionsObj,
    complete: function(byStorageTypeStoredKeysObj, byStorageTypeErrorObj){}
});
Run Code Online (Sandbox Code Playgroud)

哦,为了完全透明,BakedGoods由这个人维持在这里:).


Rob*_*ans 6

如果您正在客户端上寻找 NoSQL 风格的数据库,您可以查看http://www.forerunnerdb.com。如果您希望 DOM 自动反映对数据的更改,它支持与 MongoDB 相同的查询语言并具有数据绑定模块。

它也是开源的,不断更新新功能,并且围绕它的社区正在迅速发展。

免责声明,我是该项目的首席开发人员。


Sam*_*eff 5

如果您觉得需要它,则可以将其用于支持它的客户端,并为不支持它的客户端实现服务器端回退。

一种替代方法是,您可以使用Flash和本地共享对象,它们可以存储比cookie更多的信息,并且可以在所有带有Flash的浏览器(几乎所有浏览器)中运行,并存储类型化数据。您不必在Flash中完成整个应用程序,只需编写一个微型实用程序即可读取/写入LSO数据。可以使用不带任何框架的直接ActionScript项目来完成,这将为您提供5-15kb的瑞士法郎。

您主要需要两个API。 SharedObject.getLocal()获取对LSO的访问权并读取/写入其数据,ExternalInterface.addCallback您可以使用该方法将AS3方法注册为回调来调用您的读取/写入LSO方法。

共享对象

http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/net/SharedObject.html?filter_flex=4.1&filter_flashplayer=10.1&filter_air=2

外部接口

http://help.adobe.com/zh_CN/FlashPlatform/reference/actionscript/3/flash/external/ExternalInterface.html

这些链接指向Flex引用,但是为此,您只需创建一个ActionScript项目即可,而无需Flex框架,因此可以大大减小swf的大小。有很多不错的IDE,包括免费的FlashDevelop等开源代码。

Flash开发

http://www.flashdevelop.org/


Dog*_*Bot 5

我遇到了一个JavaScript数据库http://www.taffydb.com/,还是自己尝试了一下,希望对您有所帮助。


小智 5

使用PouchDB

PouchDB是一个受Apache CouchDB启发的开源JavaScript数据库,旨在在浏览器中良好运行。

它有助于构建可在线或离线使用的应用程序。

基本上,它将最后获取的数据存储在浏览器内数据库中(使用IndexedDB,WebSQL在后台),然后在网络活动时再次进行同步。