标签:
本文定义了 SQLite 的限制,如何针对这些限制定制特定的应用程序。默认的限制设置通常是适当的,几乎适合于每一个应用。有一些应用程序可能需要在这里或者那里增加一个设置,但是我们估计这非常罕见。更普遍的是,应用程序可能需要重新编译SQLite以及更低的限制来避免过多的资源利用率,以及在高级SQL语句生成器上帮助阻止攻击者注入恶意SQL语句时发生错误。 在使用 sqlite3_limit() 接口的 limit categories 上,为该接口定义一些限制,可以在运行时改变每个基础的连接。应用程序设计的运行时限制多数据库,一些仅供内部使用的限制可以影响或控制潜在的敌对外部代理。举例来说,一个web浏览器应用程序可能使用一个内部的数据库来追踪历史页面浏览量,但是它有一个或很多分离的数据库,它们被创建和控制是通过 javascript 应用,这些应用都是从互联网上下载的。那么 sqlite3_limit() 接口是允许通过可信代码来管理约束内置数据库的,同时在数据库创建或控制上有着严格的限制,它会拒绝不可信的外部代码攻击服务。
|
无若
|
1、string或者BLOB的最大长度 SQLite中string或者BLOB的最大字节数是由预处理器宏SQLITE_MAX_LENGTH定义的。这个宏的默认值是10亿,你可以在编译时使用像下面这样的命令行参数来对这个默认值进行调整: -DSQLITE_MAX_LENGTH=123456789 在当前实现中仅支持将string或者BLOB长度上调到最大231-1 or 2147483647。并且这个时候一些内置的函数例如hex()将会调用失败。在安全敏感的应用中最好不要尝试增加string和BlOB的最大长度。实际上,如果可以的话,你可以将string和BLOB的最大长度在一定范围内降低(几百方字节)。 在SQLite的INSERT和SELECT处理时,数据库中中的每一行的所有内容都被编码成单个BLOB。所以SQLITE_MAX_LENGTH这个参数同样也定义了一行的最大字节数。string或者BLOB的最大长度可以在运行时通过sqlite3_limit(db,SQLITE_LIMIT_LENGTH,size) 方法调低。 2、最大列数 SQLITE_MAX_COLUMN在编译时用来设置一个上限:默认设置SQLITE_MAX_COLUMN的值是2000。你可以在编译的时候将它调整到最大32767。另一方面,许多经验丰富的数据库设计者会认为一个设计良好的数据库永远都不会在表中需要超过100列。 在大多数应用中的列数是很小的,大约几十个而已。在SQLite代码生成器中使用的算法是O(N²),这个N就是列数。所以如果你重新定义SQLITE_MAX_COLUMN为一个巨大的数字,那么在生成SQL的时候使用这个大列数你就会发现sqlite3_prepare_v2() 运行的很慢。最大列数可以在运行时使用sqlite3_limit(db,SQLITE_LIMIT_COLUMN,size) 方法调低。
|
气质舞王尼古拉斯赵四
|
|
leoxu
|
|
leoxu
|
|
leoxu
|
从属数据库的最大数量 ATTACH 语句是一项SQLite扩展,它能让两个或者更多个数据库与同一个数据库连接联合起来,操作起来就好像它们是一个数据库。能够被联合的数据库数量被限制到了 SQLITE_MAX_ATTACHED 这样一个常量,其默认值为10。被联合数据库的最大数量不能超过125。 被联合的数据库的最大数量可以在运行时使用 sqlite3_limit(db,SQLITE_LIMIT_ATTACHED,size) 接口来减小。 一个数据库文件中页面的最大数量 SQLite 能够限制数据库文件的大小,以阻止数据库文件变得太大而消耗过多的磁盘空间。SQLITE_MAX_PAGE_COUNT 参数,一般会被设置成 1073741823, 就是一个数据库文件中页面的最大数量。一次会造成数据库文件增长超过这个值的插入新数据的操作将会返回 SQLITE_FULL。 SQLITE_MAX_PAGE_COUNT 最大的可能设置是 214748364。当最大页面大小为 65536 时, 最大的SQLite数据库大小就大概是140太字节。最大页面总数PRAGMA 可以被用来在运行时提高或者降低这个限制。 表中数据行的最大数量 表中数据行的最大数量理论上可以到 264 (18446744073709551616 or about 1.8e+19)。这一限制是不可及的,因为数据库会首先达到140太字节的大小限制。一个140太字节大小的数据库可以容纳超过将近 1e+13 行的数据,而要容纳这么多行数据,只能在没有指数数据存在,并且每一行只包含非常少量数据的时候。 |
leoxu
|
最大数据库大小
每个数据库都包含一个或多个“页”(page)。在某个单一数据库中,每个页的大小相同,但是不同的数据库拥有不同的页大小,大小介于512字节(含)和65536字节(含)之间。一个数据库文件最多包括2147483646页。每个页最大65536字节,换算可得最大数据库大小约为1.4e+14字节(140千万兆字节或128太字节或140000百万兆字节或128000吉字节)。由于开发人员没有能满足这个限制的硬件条件,所以没有对这个上限进行测试。然而,测试表明当数据库达到底层文件系统的最大文件大小(通常要比理论上的最大数据库大小小很多)并且由于磁盘空间耗尽而无法扩展时,SQLite依然能正确并稳健地运行。 模式中表的最大数量 数据库文件中的每个表和索引至少需要一个页。这里的索引可以使用CREATE INDEX 语句显式地创建,也可以通过UNIQUE和PRIMARY KEY约束隐式地创建。由于数据库文件的页的最大数量是2147483646(比20亿还多),所以模式中表和索引的数量上限也是这个。 只要数据库被打开,就会扫描和解析整个模式,并将模式的解析树存储在内存中。也就是说数据库的启动时间和初始内存使用率与模式大小成正比。 |
http://www.oschina.net/translate/limits-in-sqlite-new
标签:
原文地址:http://www.cnblogs.com/findumars/p/5850651.html