sqlite-相关信息

官网-相关限制定义

sqlite理论最大可以到140TB。(当然官网也承认目前没人把数据库搞到这么大,就是 “untested”)

属于本地数据库多用于读多写少,100W以下的数据压力不大,不支持分布式。

限制信息

表列的限制

#ifndef SQLITE_MAX_COLUMN
# define SQLITE_MAX_COLUMN 32676
#endif

#ifndef SQLITE_MAX_SQL_LENGTH
# define SQLITE_MAX_SQL_LENGTH 1000000000
#endif

何时不应该使用 SQLite

多用户应用程序
如果有多个客户端需要访问并使用同一个数据库,那么最好使用功能完整的关系型数据库(例如 MySQL),而不是选择 SQLite。

需要高写入量的应用程序
写操作是 SQLite 的一个局限。该 DBMS 在同一时刻仅允许一个写操作,因而也限制了其吞吐量。

sqlite_sequence表

sqlite_sequence表也是SQLite的系统表。该表用来保存其他表的RowID的最大值。数据库被创建时,sqlite_sequence表会被自动创建。该表包括两列。第一列为name,用来存储表的名称。第二列为seq,用来保存表对应的RowID的最大值。该值最大值为9223372036854775807。当对应的表增加记录,该表会自动更新。当表删除,该表对应的记录也会自动删除。如果该值超过最大值,会引起SQL_FULL错误。所以,一旦发现该错误,用户不仅要检查SQLite文件所在的磁盘空间是否不足,还需要检查是否有表的ROWID达到最大值。

多线程写入

SQLite 支持三种线程模式:

  1. 单线程模式
    这种模式下,没有进行互斥,多线程使用不安全
  2. 多线程模式
    这种模式下,在多线程中使用单个数据库连接是不安全的,否则就是安全的。(译注:即不能在多个线程中共享数据库连接)
  3. 串行模式
    这种模式下,sqlite是线程安全的。