Database 内存数据库中分配给SQLite的内存大小

Database 内存数据库中分配给SQLite的内存大小,database,sqlite,size,in-memory,Database,Sqlite,Size,In Memory,如果用户使用下面的语法创建内存中的sqlite数据库,那么分配给它的最大内存大小是多少 my $dbh = DBI->connect('dbi:SQLite:dbname=:memory:'); 若内存中数据库的大小大于最大可用内存,会发生什么情况 假设我有1 GB的空闲空间,数据库大小变为1.1 GB,那么会将一些数据写入磁盘还是什么 是否有方法更改分配给内存中sqlite数据库的最大内存值?它将使用虚拟内存,是的,一旦超过所有可用内存,它将写入磁盘,当超过该值时,它可能引发异常,具有

如果用户使用下面的语法创建内存中的sqlite数据库,那么分配给它的最大内存大小是多少

my $dbh = DBI->connect('dbi:SQLite:dbname=:memory:');
若内存中数据库的大小大于最大可用内存,会发生什么情况

假设我有1 GB的空闲空间,数据库大小变为1.1 GB,那么会将一些数据写入磁盘还是什么


是否有方法更改分配给内存中sqlite数据库的最大内存值?

它将使用虚拟内存,是的,一旦超过所有可用内存,它将写入磁盘,当超过该值时,它可能引发异常,具有未定义的行为,或者可能依赖于操作系统。 这些是SQLite限制:

如果要设置最大数据库大小,可以执行以下SQL命令:

PRAGMA page_size = 512
PRAGMA max_page_count = 195313
在Perl中:

$dbh = DBI->connect('dbi:SQLite:dbname=:memory:');
$query_handle = $dbh->prepare("PRAGMA page_size = 512");
$query_handle->execute();
$query_handle = $dbh->prepare("PRAGMA max_page_count = 195313");
$query_handle->execute();
您可以通过创建一个临时表并使用循环插入大量对象来测试它,直到它达到极限

这会将您的最大数据库大小设置为100000256字节

SQlite数据库存储在页面中,这将设置数据库的页面大小和最大页面数。您可以使用任一参数来满足您的需要;更大的页面意味着更高的性能,但增长更快

以下是sqlite支持的所有杂注:

这是Python中的一个简单测试:

import sqlite3

con = sqlite3.connect(':memory:')
cur = con.cursor() 
cur.execute("PRAGMA max_page_count = 195313")
cur.execute("PRAGMA page_size = 512")
cur.execute("CREATE TABLE test (random_values TEXT)")
index = 0
query = "INSERT INTO test (random_values) VALUES ('%s')" % "".join(['a' for index in xrange(1000)])
while True:
    try:
        c = cur.execute(query)
        index += 1
    except Exception as ex:
        print str(ex)  
        break       

print index * 1000
很快你就会得到这样的结果:

sqlite3.0错误:数据库或磁盘已满


由于开销,我得到了
93915000
字节,因此如果您想要100兆字节,请使用设置。

有没有办法定义内存中数据库的最大大小?我想把它限制在100MB。100 MB后,它应该返回SQLITE_FULL,如文档中所述。@Saumitra在谷歌搜索了一下我发现的内容后,我希望它会有所帮助。是的,它肯定会有所帮助……感谢大家花了很多时间回答这个问题。