【问题标题】:How much can SQLite store on the iPhone?SQLite 可以在 iPhone 上存储多少?
【发布时间】:2019-06-15 20:17:20
【问题描述】:

我对 iPhone 的 web 应用程序有一个想法,但我不知道有多少数据可以存储在移动 Safari 的 SQLite db 中。我尝试搜索 Apple 文档,但一无所获:

Safari Client-Side Storage and Offline Applications Programming Guide: Using the JavaScript Database

【问题讨论】:

  • 您要存储多少数据?

标签: iphone sqlite safari


【解决方案1】:

这些答案中的大多数都是完全错误的。 Safari 将不允许您创建超过 50MB 的 SQLite 数据库(或将现有数据库扩展到该大小之外)。

这是 Safari 施加的限制 - 正如其他人所指出的,SQLite 本身支持更大的数据库,您可以在本机应用程序中使用这些数据库。但是 web 应用程序被限制为 50MB。

请注意,这是针对每个数据库的 - 如果您确实需要额外的空间,您可以创建多个数据库,尽管这显然会带来很多麻烦。

【讨论】:

  • 我还确认了单个数据库的 50MB 限制。您确定这是每个数据库的限制而不是整个站点的限制吗?
  • 每个 DB 限制为 50MB。并且仅对您创建的第一个 50MB 数据库请求权限。
  • safari mobile 上的数据库大小限制是每个站点而不是每个数据库 50 mb。我已经测试过了。即使您有一个额外的空数据库,如果单个站点上所有数据库的总大小为 50 mb,您也无法添加到其中
【解决方案2】:

正如其他海报所说的那样。您只受设备驱动器空间的限制。

不过,您还需要考虑您的内存占用。 iphone 上的内存是有限的,而且一般来说它很小,因此您可以在内存中拥有的数据/水合对象的数量是您的应用程序的另一个潜在限制。

【讨论】:

  • 我认为由于 SQLite 基于平面文件,因此整体存储不会受到内存限制。显然是的,您一次可以加载到内存中的内容是有限制的,但这不应该影响文件存储吧?
  • 不,它不会影响存储,只是在任何给定时间你可以在内存中拥有的限制。我提到它是因为您听起来像是在处理一个相当大的数据集。
  • Mobile Safari 并非如此。在我的测试中,您似乎被限制为 50MB。
【解决方案3】:

有很多回答的人显然从未测试过它。我使用的是最新版本的 iOS (4.3.3),并建立了一个系统来创建多个数据库并将它们保持在 45 MB 以下,但发现 50 MB 的上限是针对整个网站的。因此,无论您将数据拆分多少,它仍然将其限制为 50 MB 的总上限。

【讨论】:

    【解决方案4】:

    safari mobile 上的数据库大小限制为每个站点 50 mb,而不是每个数据库。我已经测试过了。即使您有一个额外的空数据库,如果单个站点上所有数据库的总大小为 50 mb,您也无法添加到其中

    同样值得注意的是,字符在 websql 上保存为双字节,即 200 万个字符将是 4 兆字节而不是 2 兆字节在磁盘上。

    【讨论】:

      【解决方案5】:

      您仅受设备上可用空间量的限制。

      【讨论】:

        【解决方案6】:

        我不确定。如果您正在开发自己的应用程序,您将受到设备上可用空间的限制,并在一定程度上受到内存占用的限制(正如 Bryan McLemore 指出的那样)。

        但是,由于您正在考虑在 Safari 中使用 JavaScript,因此没有简单的方法可以判断。根据您找到的文件,它看起来可能受站点限制,但没有告诉您多少。我建议编写一个快速脚本来填充数据库并弄清楚它实际上是多少。在那之后,我可能会将这个价值减半,并假设我总是能够使用那么多。

        请务必报告,以便我们都知道!

        【讨论】:

        • 哦,请注意所有阅读本文的人 - 转到问题中提到的文档链接并添加评论建议 Apple 更新文档。
        【解决方案7】:

        它很可能是 32 TB……这远远超过了可用磁盘空间。

        我通过将最大页面大小乘以SQLite limits page 底部列出的最大页数来达到这个数字。

        【讨论】:

          【解决方案8】:

          SQLite 中的限制

          本文中的“限制”是指不能超过的尺寸或数量。我们关心诸如 BLOB 中的最大字节数或表中的最大列数之类的事情。

          SQLite 最初设计时采用了避免任意限制的策略。当然,在内存和磁盘空间有限的机器上运行的每个程序都有某种限制。但在 SQLite 中,这些限制并没有很好地定义。政策是,如果它适合内存并且您可以用 32 位整数对其进行计数,那么它应该可以工作。

          不幸的是,无限制政策已被证明会产生问题。由于没有很好地定义上限,因此没有进行测试,并且在将 SQLite 推向极端时经常会发现错误(包括可能的安全漏洞)。出于这个原因,较新版本的 SQLite 具有明确定义的限制,并且这些限制作为测试套件的一部分进行测试。 截至 3.6.19 版(报告中的所有统计数据均针对该 SQLite 版本),SQLite 库由大约 65.7 KSLOC 的 C 代码组成。 (KSLOC 的意思是数千个“源代码行”,或者换句话说,不包括空行和 cmets 的代码行。)相比之下,该项目的测试代码和测试脚本是 45409.7 KSLOC 的 690 倍。

          【讨论】:

            【解决方案9】:

            iPhone 上的默认存储限制似乎是 5mb

            【讨论】:

              【解决方案10】:

              davibe 通过他的 PhoneGap 插件做了一些工作以将限制提高到 1GB。 https://github.com/davibe/Phonegap-SQLitePlugin

              插件调用原生 sqlite3 API,在 Javascript 端带有一个包装器。
              从 sqlite.js 中提取的相关代码为:

              update origins set quota = '999999999999' where origin = 'file__0';   
              "update databases set estimatedSize = '999999999999' where name = '" + dbName + "';'";
              

              【讨论】:

                【解决方案11】:

                注意:我的 iphone 已经越狱了!但我不怀疑这会改变什么。



                50MB 的限制不再正确。



                在装有 iOS 6.1 的 iPhone 4S 上,我有一个 58.66 MB(448496 条记录)的数据库用于我的网络剪辑(网站固定在跳板上)。

                没有特殊的技巧,只是标准的 HTML5 用法。

                【讨论】:

                  【解决方案12】:

                  最大数据库大小

                  请参考Official Sqlite site

                  每个数据库都包含一个或多个“页面”。在单个数据库中,每个页面的大小相同,但不同数据库的页面大小可以是 512 和 65536 之间的 2 的幂,包括 512 和 65536。数据库文件的最大大小为 2147483646 页。在最大页面大小为 65536 字节时,这相当于最大数据库大小约为 1.4e+14 字节(140 TB,或 128 TB,或 140,000 GB 或 128,000 GB)。

                  此特定上限未经测试,因为开发人员无法访问能够达到此限制的硬件。但是,测试确实验证了当数据库达到底层文件系统的最大文件大小(通常远小于最大理论数据库大小)以及数据库由于磁盘空间耗尽而无法增长时,SQLite 的行为是否正确和健全。

                  【讨论】:

                    猜你喜欢
                    • 2019-11-26
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-10-04
                    • 1970-01-01
                    • 1970-01-01
                    • 2010-11-04
                    • 2012-05-21
                    相关资源
                    最近更新 更多