
A. По умолчанию, SQLite собран с поддержкой потоков (sqlite3.dll).
Есть два способа использования многопоточного SQLite: serialized и multi-thread.
1. Serialized (надо указать флаг SQLITE_OPEN_FULLMUTEX при открытии соединения). В этом режиме потоки могут как угодно дергать вызовы SQLite, никаких ограничений. Но все вызовы блокируют друг друга и обрабатываются строго последовательно.
2. Multi-thread (SQLITE_OPEN_NOMUTEX). В этом режиме нельзя использовать одно и то же cоединение одновременно из нескольких потоков (но допускается одновременное использование разных соединений разными потоками). Обычно используется именно этот режим.
B. Если в вызове sqlite3_open() передать имя файла как ":memory:", то SQLite создаст соединение к новой (чистой) БД в памяти.
C. В любой момент времени мы можем к открытому соединению присоединить еще до 10 баз данных через SQL команду ATTACH DATABASE.
D. Если передать пустую строку вместо имени файла в sqlite3_open(), то будет создана временная БД в файле на диске. Причем, после закрытия соединения к БД, она будет удалена с диска.
Управление работой :
PRAGMA page_size = bytes; // размер страницы БД; страница БД - это единица обмена между диском и кэшом, разумно сделать равным размеру кластера диска (у меня 4096)
PRAGMA cache_size = XXXX; // задать размер кэша соединения в килобайтах, по умолчанию он равен 2000 страниц БД
PRAGMA encoding = "UTF-8"; // тип данных БД, всегда используйте UTF-8
PRAGMA foreign_keys = 1; // включить поддержку foreign keys, по умолчанию - ОТКЛЮЧЕНА
PRAGMA journal_mode = DELETE | TRUNCATE | PERSIST | MEMORY | WAL | OFF; // задать тип журнала
PRAGMA synchronous = 0 | OFF | 1 | NORMAL | 2 | FULL; // тип синхронизации транзакции
Есть два способа использования многопоточного SQLite: serialized и multi-thread.
1. Serialized (надо указать флаг SQLITE_OPEN_FULLMUTEX при открытии соединения). В этом режиме потоки могут как угодно дергать вызовы SQLite, никаких ограничений. Но все вызовы блокируют друг друга и обрабатываются строго последовательно.
2. Multi-thread (SQLITE_OPEN_NOMUTEX). В этом режиме нельзя использовать одно и то же cоединение одновременно из нескольких потоков (но допускается одновременное использование разных соединений разными потоками). Обычно используется именно этот режим.
B. Если в вызове sqlite3_open() передать имя файла как ":memory:", то SQLite создаст соединение к новой (чистой) БД в памяти.
C. В любой момент времени мы можем к открытому соединению присоединить еще до 10 баз данных через SQL команду ATTACH DATABASE.
D. Если передать пустую строку вместо имени файла в sqlite3_open(), то будет создана временная БД в файле на диске. Причем, после закрытия соединения к БД, она будет удалена с диска.
Управление работой :
PRAGMA page_size = bytes; // размер страницы БД; страница БД - это единица обмена между диском и кэшом, разумно сделать равным размеру кластера диска (у меня 4096)
PRAGMA cache_size = XXXX; // задать размер кэша соединения в килобайтах, по умолчанию он равен 2000 страниц БД
PRAGMA encoding = "UTF-8"; // тип данных БД, всегда используйте UTF-8
PRAGMA foreign_keys = 1; // включить поддержку foreign keys, по умолчанию - ОТКЛЮЧЕНА
PRAGMA journal_mode = DELETE | TRUNCATE | PERSIST | MEMORY | WAL | OFF; // задать тип журнала
PRAGMA synchronous = 0 | OFF | 1 | NORMAL | 2 | FULL; // тип синхронизации транзакции
Пределы
Несмотря на миниатюрность, SQLite в реальности не накладывает серьезных ограничений на размеры полей, таблиц или БД.
a) По умолчанию, BLOB или строкое значение могут занимать 1 Гбайт и это же ограничение размера одной записи (можно поднять до 2^31 — 1, параметр SQLITE_MAX_LENGTH).
b)Количество столбцов: 2000 (можно поднять до 32767, SQLITE_MAX_COLUMN).
c)Размер SQL оператора: 1 МБайт (1073741824 байт, SQLITE_MAX_SQL_LENGTH).
d)Одновременный join: 64 таблицы.
e)Присоединить баз к соединению: 10 (до 62, SQLITE_MAX_ATTACHED)
f)Максимальное количество страниц в БД: 1073741823 (до 2147483646, SQLITE_MAX_PAGE_COUNT).
g)Если задать размер страницы 65636 байт, то максимальный размер БД будет примерно 14 Терабайт.
h)Максимальное число записей в таблице: 2^64 — 1, но на практике, конечно, ограничение размера вступит раньше.
a) По умолчанию, BLOB или строкое значение могут занимать 1 Гбайт и это же ограничение размера одной записи (можно поднять до 2^31 — 1, параметр SQLITE_MAX_LENGTH).
b)Количество столбцов: 2000 (можно поднять до 32767, SQLITE_MAX_COLUMN).
c)Размер SQL оператора: 1 МБайт (1073741824 байт, SQLITE_MAX_SQL_LENGTH).
d)Одновременный join: 64 таблицы.
e)Присоединить баз к соединению: 10 (до 62, SQLITE_MAX_ATTACHED)
f)Максимальное количество страниц в БД: 1073741823 (до 2147483646, SQLITE_MAX_PAGE_COUNT).
g)Если задать размер страницы 65636 байт, то максимальный размер БД будет примерно 14 Терабайт.
h)Максимальное число записей в таблице: 2^64 — 1, но на практике, конечно, ограничение размера вступит раньше.