【问题标题】:Maximum number of rows in a sqlite tablesqlite 表中的最大行数
【发布时间】:2010-12-05 12:57:18
【问题描述】:

给一个简单的sqlite3表(create table data (key PRIMARY KEY,value)),键大小为256字节,值大小为4096字节,这个sqlite3表中最大行数的限制是多少(忽略磁盘空间限制)?它们的限制是否与操作系统相关(win32、linux 或 Mac)

【问题讨论】:

    标签: database sqlite sizing


    【解决方案1】:

    截至 2017 年 1 月,sqlite3 limits page 根据数据库的最大大小(即 140 TB)定义了此问题的实际限制:

    一个表的最大行数

    表中的理论最大行数为 2^64(18446744073709551616 或大约 1.8e+19)。由于将首先达到 140 TB 的最大数据库大小,因此无法达到此限制。一个 140 TB 的数据库最多可以容纳大约 1e+13 行,并且只有在没有索引且每行包含非常少数据的情况下。

    因此,对于 140 TB 的最大数据库大小,您很幸运能够获得约 1 万亿行,因为如果您实际上有一个包含数据的有用表,那么行数将受到数据大小的限制。在 140 TB 的数据库中,您可能有多达数十亿行。

    【讨论】:

    • 只是在阅读文档... 1.4e+14 字节(140 TB),但真正的大小限制是底层操作系统的文件大小限制,要低得多。
    • @aculich,这是一个理论上的答案,在实践中没有用处。对于编写实际应用程序的实际程序员在实践中实际上想知道的实际答案,请阅读stackoverflow.com/q/784173/632951
    • @BonanzaDriver 取决于 fs。 ext4 最大值:~17TB。 NTFS 最大:8000TB。 BTRFS 和 ZFS 最大值:1840 万 TB。 XFS、APFS 和 HFS+:920 万 TB。
    【解决方案2】:

    我有 3.3 GB 大小的 SQLite 数据库,其中存储了 2500 万行数字日志并对其进行计算,它运行得又快又好。

    【讨论】:

      【解决方案3】:

      在 SQLite3 中,字段大小不是固定的。引擎将为每个 cell 提交尽可能多的空间。

      有关文件限制,请参阅此 SO 问题:
      What are the performance characteristics of sqlite with very large database files?

      【讨论】:

        【解决方案4】:

        我有一个 7.5GB 的 SQLite 数据库,它存储了 1050 万行。只要您有正确的索引,查询就会很快。要使插入快速运行,您应该使用事务。此外,我发现最好在插入所有行之后创建索引。否则插入速度很慢。

        【讨论】:

          【解决方案5】:

          你想要的答案is right here

          您提到的每个操作系统都支持多种文件系统类型。实际限制将是每个文件系统,而不是每个操作系统。很难总结 SO 上的约束矩阵,但是虽然一些文件系统对文件大小施加了限制,但今天所有主要的 OS 内核都支持具有超大文件的文件系统。

          sqlite3 db 的最大页面大小相当大,为 2^32768,尽管这需要一些配置。我认为索引必须指定页码,但结果可能是首先达到操作系统或环境限制。

          【讨论】:

            【解决方案6】:

            基本上没有真正的限制

            详情请见http://www.sqlite.org/limits.html

            【讨论】:

            • have been updated 的实际限制要更明确。即使没有明确定义,也总是存在真正的限制,尽管“SQLite 最初设计时采用了避免任意限制的策略......不幸的是,无限制策略已被证明会产生问题。因为上限没有很好的定义,没有经过测试,并且在将 SQLite 推向极端时经常会发现错误(包括可能的安全漏洞)。”
            【解决方案7】:

            没有限制,但基本上在某个点之后sqlite数据库将变得无用。 PostgreSQL 是迄今为止大型数据库的顶级免费数据库。就我而言,在我的 Linux 64 位四核双处理器计算机上大约有 100 万行,具有 8GB RAM 和 Raptor 硬盘。 PostgreSQL 是无与伦比的,即使是经过调整的 MySQL 数据库也是如此。 (发表于 2011 年)。

            【讨论】:

            • 100 万行不是一张巨大的桌子,也许很大,但不是很大。
            猜你喜欢
            • 2011-01-03
            • 1970-01-01
            • 2014-11-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-17
            • 2011-03-09
            相关资源
            最近更新 更多