【问题标题】:I need a client side browser database. What are my options [closed]我需要一个客户端浏览器数据库。我有什么选择[关闭]
【发布时间】:2011-06-14 06:14:05
【问题描述】:

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


更新 有很多 cmets 关于我为什么需要这个。这是我的想法。告诉我我是不是很傻:

  • 客户端将有一个庞大而复杂的状态,这需要数据库之类的东西来提供我需要的数据交互。因此(我认为)cookie 是不可能的。
  • 此数据是暂时的,因此客户端不会关心它是否会在他们关闭会话后立即被删除。但是,如果他们转到不同的网页然后返回,他们将需要保留数据。因此(我认为)以某种方式将数据存储在某种 javascript SQL 实现中是行不通的。
  • 我当然可以在服务器上做我想做的所有事情,并且服务器可以扩展以管理负载 (Facebook)。 但是(我认为)我宁愿构建一个插件也不愿为支持这种负载的基础设施付费。这是一个简单的创业公司。 (创业公司越有钱,我的骨头就会越白。)

【问题讨论】:

  • 为什么你认为它必须在客户端?请解释一下?
  • “我正在创建一个网站,我认为它必须有一个客户端数据库” - 也许描述你的实际问题,而不是你没有告诉我们的问题的感知解决方案...... .
  • @John 你想支持哪些浏览器?
  • @Kibbee 你的评论是基于人们有足够的现金/投资者来扩大规模的自负假设。例如,考虑低预算社区/开放项目。 Q 有效。
  • 我认为这里有些人没有抓住重点。客户端数据库是一种对数据进行复杂查询的方法,无需网络连接或为每个特定情况编写查询算法。它们也是在客户端上保存数据以供以后使用的绝佳方式,也是应用程序状态的中心点。在没有服务器的情况下应用程序仍可正常运行时,与服务器的数据同步可能会出现断断续续的情况。

标签: database web-applications plugins html


【解决方案1】:

【讨论】:

  • 我想要建立在这些 api 之上的数据库列表。
  • IndexedDB 一个数据库。
  • JSON 用于在服务器和浏览器之间发送数据。
  • 我还是不明白。 IndexedDB NoSQL 数据库。
  • 谢谢,不知道
【解决方案2】:

我回答这个问题大约晚了 5 年,但鉴于某些现有答案中存在错误和过时的数据,以及原始问题中未解决的问题,我想我会投入两分钱。

首先,与其他人在这里暗示的相反,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 由这个人在这里维护 :)。

【讨论】:

  • 你还在积极维护BakedGoods吗?
【解决方案3】:

使用PouchDB

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

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

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

      【讨论】:

        【解决方案6】:

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

        另一种方法是您可以使用 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

        外部接口

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

        这些链接指向 Flex 参考,但您可以只创建一个 ActionScript 项目,而不需要 Flex 框架,因此大大减小了 swf 大小。有许多优秀的 IDE,包括 FlashDevelop 等免费开源的。

        Flash 开发

        http://www.flashdevelop.org/

        【讨论】:

        • 这是一个有趣的方法。你能指点我这里的一些阅读材料吗?
        • @John Berryman,我添加了一些相关链接。
        【解决方案7】:

        查看 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 对于您的应用程序的普通用户来说是一个更容易实现的目标,尤其是在您提供链接和升级说明的情况下。

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-03-29
            • 2021-07-26
            • 2016-01-19
            • 2011-04-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多