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

时间:2011-01-24 02:07:06

标签: database web-applications plugins html5

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


更新为什么我真的需要这个,有很多评论。这是我的想法。告诉我,如果我很傻:

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

8 个答案:

答案 0 :(得分:27)

答案 1 :(得分:5)

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

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

......这可能完全可以满足您的需求(并将我带到第二点)。

  • 您的数据项之间是否需要明确或隐含的关系?
  • 查询所述项目的能力如何?
  • 或太空5 MB以上?

如果对上述所有问题的回答都是“否”,请使用localStorage,避免出现WebSQL和IndexedDB API的问题。好吧,也许只是后者头痛,因为前has been deprecated

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

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

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

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

答案 2 :(得分:4)

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

另一种方法是,您可以使用Flash和本地共享对象,它可以存储比cookie更多的信息,可以在所有浏览器中使用Flash(几乎所有浏览器),并存储类型化数据。您不必在Flash中执行整个应用程序,您只需编写一个小实用程序来读取/写入LSO数据。这可以使用没有任何框架的直接ActionScript项目来完成,并且会给你一个5-15kb的小swf。

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

<强>共享对象

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

<强> ExternalInterface的

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

这些链接适用于Flex引用,但为此您只需创建一个不需要Flex框架的ActionScript项目,因此可以大大减少swf大小。有许多好的IDE,包括像FlashDevelop这样的免费开源。

<强>的FlashDevelop

http://www.flashdevelop.org/

答案 3 :(得分:3)

我遇到了一个JavaScript数据库http://www.taffydb.com/,我自己也在试用它,希望这有帮助。

答案 4 :(得分:3)

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

它也是开源的,不断更新新功能,并且它周围的社区正在快速增长。

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

答案 5 :(得分:2)

使用PouchDB

它有助于构建在线和离线工作的应用程序。

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

答案 6 :(得分:1)

查看HTML5本地存储:

http://people.w3.org/mike/localstorage.html

您可能还会发现这有用: HTML5 database storage (SQL lite) - few questions

当Windows 98首次出现时,我们中有很多人仍然坚持使用MS-DOS 6.22。当然,新的操作系统上有很酷的功能,无法在MS-DOS中运行。

有一段时间必须留下一些东西来为创新腾出空间。如果您的应用程序非常具有创新性并且将提供使用最新和最好的技术的酷炫新功能,那么一些旧的浏览器自然需要被抛在后面。

您拥有的优势在于,与升级操作系统不同,从IE7升级到Chrome 8或Firefox 3.6对于应用的普通用户来说是一个更容易实现的目标,特别是如果您提供链接和升级说明。 / p>

答案 7 :(得分:1)

我会尝试Mozilla的localForage。 https://mozilla.github.io/localForage/