Я ищу способы уменьшить потребление памяти SQLite3 в моем приложении.
При каждом выполнении он создает таблицу со следующей схемой:
(main TEXT NOT NULL PRIMARY KEY UNIQUE,count INTEGER DEFAULT 0)
После этого база данных заполняется 50 тыс. операций в секунду. Напишите только.
Когда элемент уже существует, он обновляет "счет" с помощью запроса на обновление (я думаю, что это называется UPSERT). Это мои запросы:
INSERT OR IGNORE INTO table (main) VALUES (@SEQ);
UPDATE tables SET count=count+1 WHERE main = @SEQ;
Таким образом, с 5 миллионами операций на транзакцию, я могу писать очень быстро в БД.
Мне действительно не нравится дисковое пространство для этой проблемы, но у меня очень ограниченное пространство RAM. Таким образом, я не могу тратить слишком много памяти.
С sqlite3_user_memory() сообщает, что во время выполнения его потребление памяти увеличивается почти до 3 ГБ. Если я ограничу его до 2 ГБ через sqlite3_soft_heap_limit64(), производительность баз данных снизится почти до нуля, когда достигнет 2 ГБ.
Мне нужно было увеличить размер кеша до 1 М (размер страницы по умолчанию), чтобы достичь желаемой производительности.
Что я могу сделать для уменьшения потребления памяти?