1

У меня есть данные 100 ГБ. Я хочу загрузить его в память с помощью SQLite в VB.Net. У меня 32 ГБ оперативной памяти. Я хочу, чтобы SQLite занимал 24 ГБ оперативной памяти, а остальные 8 ГБ останутся свободными для других задач ОС. Когда он достиг предела 24 ГБ ОЗУ, он должен начать автоматически промывать данные на некоторый дисковый файл.Как управлять SQLite в памяти Потребление БД с использованием C# vb.net

Во-первых: я использовал в памяти БД.

Dim cn As SQLiteConnection = New SQLiteConnection("Data Source=:memory:") 

Но он потребляет 31,8 Гб оперативной памяти, а затем ОС (Windows 7) вскочить и берет контроль и начать использовать виртуальную память (которая сохраняет данные на диск). Но это действительно замедляет работу компьютера. Короче говоря, когда загружать огромные данные (используя метод in-memory), SQLite ест весь барабан и останавливает компьютер.

Во-вторых: я загрузил данные с помощью временной БД.

Dim cn As SQLiteConnection = New SQLiteConnection("FullUri=file:") 

Но когда SQLite потребляется около 2 Гб оперативной памяти, что освобождает его от смыва данных в файл «C: \ Users \ Administrator \ AppData \ Local \ Temp \ etilqs_d4Fsx23dc» и начать загрузку следующих данных. Короче говоря, когда загружать огромные данные (используя временный метод БД), он использует очень мало ОЗУ и Больше Диск.

Первый сценарий съедает все порты, а второй потребляет очень мало ОЗУ. Мне нужен средний путь, который должен быть в моем собственном контроле и т. Д. 24 ГБ оперативной памяти для SQLite и 8 ГБ для ОС, когда он достигает предела 24 ГБ оперативной памяти, он должен начать автоматическую очистку данных на диске.

ответ

0

Чтобы управлять объемом памяти, используемой SQLite для базы данных на диске, используйте PRAGMA cache_size. Однако любая неиспользуемая память будет использоваться ОС для кеша файлов, поэтому кешит SQLite не должен быть слишком большим.

Чтобы ускорить запись на диск (но сделать их ненадежными, как с базой данных в памяти), используйте PRAGMA journal_mode = OFF.

+0

thnaks! Я проверю. но вы не упомянули режим? (1) В памяти db или (2) Temprory db –

+0

То, что я сказал, относится к базам данных на диске (как временным, так и постоянным). –