android的SQLite数据库有大小限制吗?



实际上我做了一些研究,找到了一个实现文档,http://sqlite.org/limits.html,但无法找到确切的答案。也就是说,整个sqlite数据库的确切数据限制是什么?

最大数据库大小约为1.4e+14字节

每个数据库由一个或多个"页"组成。在一个数据库中,每个页面的大小都是一样的,但是不同的数据库可以有页面大小是512到65536(包括65536)之间的2的幂。数据库文件的最大大小为2147483646页。在最大页面大小为65536字节时,这转换为最大值数据库大小约为1.4e+14字节 (140 tb,或128 tb)Tebibytes,或140,000 gb或128,000 gb)。

这个特殊的上界没有经过测试,因为开发人员没有测试能够访问能够达到此限制的硬件。然而,测试做验证SQLite行为正确和理智当一个数据库达到底层文件系统的最大文件大小(即通常比最大理论数据库大小小得多)由于磁盘空间耗尽,数据库无法增长。

有关更多信息,请参见最大数据库大小

数据库可以存储多少数据并不重要。问题是数据库中的语句在什么级别上不再有效!或者换句话说,在什么水平上有更好的选择。另一个选择可以是另一个DBMS,它可以更好地处理大量数据。另一个可能是NoSql数据库。
问题是效率的定义在每个应用中都是不同的。对于一个应用程序来说,等待1秒检索数据可能还可以,而对于另一个应用程序来说,等待200毫秒就是致命的。
此外,你在数据库上运行的查询类型对性能有很大的影响,所以不仅仅是数据。查询也很重要!
通常你不需要考虑这些东西!您应该能够在每个表中存储数万行,而不会出现任何问题!但是如果你愿意,你可以自己做测试,看看你的应用程序的现状是否让你满意!!编写测试非常简单,例如,如果您首先有一个选择查询,请确保您在数据库中放入了足够的测试数据(始终考虑case场景),然后使用循环执行查询10,000次。通过测量时间,然后除以10000。你得到了单个操作所需的时间。不要忘记在不同的设备上执行此操作以获得更精确的结果。从这种测试中得到的结果比任何统计数据都更有价值,因为

  • 这是关于你的应用和它的数据库!
  • 这是关于你关心的性能和效率的数量。
  • 这是关于你在数据库上运行的查询类型。

另一个值得注意的问题是在sqlite上运行查询不会返回实际数据!它给你一个游标,使用游标你可以检索数据。执行查询通常需要几毫秒,而使用循环检索数据则需要几百毫秒。如果您关心性能,了解这个时差非常重要。关键是您不必一次获得所有数据!在需要的时候获取数据。因此,只要您逐个处理它们,查询是否返回100万行并不重要!因此,如果您对我之前提到的测试不满意,您首先需要考虑的是如何处理游标对象?

From: http://sqlite.org/faq.html

1.0 The Database File

一个SQLite数据库的完整状态通常包含一个磁盘上名为"主数据库文件"的文件。

在事务期间,SQLite在一秒钟内存储额外的信息称为"回滚日志"的文件,或者,如果SQLite处于WAL模式,则预写日志文件。如果应用程序或主机计算机崩溃在事务完成之前,回滚日志或预写日志包含恢复所需的关键状态信息使主数据库文件保持一致状态。当回滚日志或预写日志包含恢复文件所需的信息它们被称为"热日志"或"热日志"文件"。热日志和WAL文件只是出现错误时的一个因素复苏场景等并不常见,但它们是国家的一部分,因此不能忽略。这个文档定义了回滚日志和预写日志文件的格式不同,但是重点是主数据库文件。

1.1页

主数据库文件包含一个或多个页面。a的大小Page是512到65536(包括65536)之间2的幂。所有页面在同一数据库中是相同的大小。的页面大小数据库文件由位于偏移量处的2字节整数确定从数据库文件开始的16个字节。

页从1开始编号。最大页码是2147483646(231 - 2).最小大小的SQLite数据库是一个512字节的页面。数据库的最大大小为2147483646页每页65536字节或140,737,488,224,256字节(约140tb)。通常SQLite会达到最大文件大小限制底层文件系统或磁盘硬件的大小在它到达之前就已经限制了它自己的内部大小限制。

在常用情况下,SQLite数据库的大小从几个不等从千字节到几gb

在任何时间点,主数据库中的每个页面都有一个单独的使用

锁字节页自由列表页自由列表trunk页自由列表页b-树页b-树内页b-树表叶页索引b树内页索引b树叶页A有效负载溢出页指针映射页

最新更新