Палец вверх 2
Перевод
Перевод

Я испортил диск с помощью sqlite?

Так что время от времени я запускаю веб-скребки. Иногда база данных неизбежна, и я предпочитаю sqlite из-за простоты использования. Тем не менее, я боюсь, что мой последний проект создает нагрузку на мой SSD; взглянуть.

У меня есть отдельные процессы, каждый из которых запрашивает в базе данных URL-адрес для очистки, делает это, а затем записывает результаты и фиксирует их на диск. Я хочу, если возможно, избежать ненужной очистки, поэтому я фиксирую после каждого результата, чтобы другие процессы знали, что не нужно очищать его.

Что меня беспокоит, так это то, что каждый коммит является реальной записью на диск. С чем-то вроде миллиона запросов мой SSD преждевременно устареет: / Итак, в основном, два вопроса:

  1. Означает ли это, что 1 коммит = 1 запись на физический диск? Или в SQLite есть буферизация, или Linux делает что-то подобное, или, может быть, сам контроллер SSD такого рода хранит копию базы данных в ОЗУ (или в памяти контроллера) и только редко синхронизируется с диском? Сама база данных составляет менее 20 МБ.

  2. Если это то, как я боюсь, какие-либо изменения, которые я мог бы сделать для sqlite3, или база данных сервер-клиент неизбежна? Насколько я понимаю, сервер базы данных будет иметь эксклюзивный доступ к базе данных, поэтому он может просто сохранять рабочую версию в оперативной памяти и регулярно синхронизироваться с диском.

Мне жаль, что вопрос скорее в обсуждении: /

database sqlite android-sqlite ssd
задан Liudvikas Akelis 3 июн. 2017 г., 15:42:00
источник

3 ответа

Палец вверх 1
Перевод
Перевод

Это немного долго для комментария. И я не очень хорошо знаком с последними достижениями в технологии SSD. Но у вас есть действительная проблема.

Я не понимаю, как вы можете избежать этой проблемы. Вы хотите очистить веб-сайты, а затем сохранить данные «навсегда». Этот процесс требует записи в какую-либо форму долгосрочного хранения. Если единственным хранилищем является SSD, вам нужно будет выполнить запись на диск. Это не имеет ничего общего с использованием баз данных.

Базы данных могут вызывать дополнительные записи, в зависимости от того, как они разработаны - дополнительные записи для страниц индекса, для записей журнала, для разбиений страниц и так далее.

Что ты можешь сделать? Мой совет - выполнять резервное копирование базы данных, контролировать ваше оборудование и обновлять его, когда это необходимо. Кстати, этот совет довольно независим от использования баз данных или твердотельных накопителей.

ответ дан Gordon Linoff 3 июн. 2017 г., 15:53:46
источник
Палец вверх 1
Перевод
Перевод

Одна фиксация действительно приводит, по крайней мере, к одной записи на диск, а точнее к нескольким, потому что структура таблицы, заголовок базы данных и метаданные файловой системы, вероятно, будут расположены на других страницах.

Затем посмотрите на стойкость записи вашего SSD в таблице. Тогда поймите, что миллионы писем, которые вы делаете «время от времени», совершенно безвредны.

Чтобы сделать вашу базу данных более понятной для SSD, вы можете включить режим WAL . Но если вы постоянно работаете с базой данных 24/7, вы не заметите никакой разницы.

ответ дан CL. 3 июн. 2017 г., 22:09:48
источник
Палец вверх 0
Перевод
Перевод

С тех пор я нашел обходной путь, который мне подходит: настроить базу данных в оперативной памяти (в linux / dev / shm - одно из таких мест, и я считаю, что в Windows также есть эквивалентные утилиты).

Очевидно, что в какой-то момент мы хотим, чтобы он записывал на диск, поэтому я запускаю цикл в bash для периодического копирования файла виртуальной базы данных на диск, например:

while true; do sleep 20; cp /dev/shm/results.db ~/project/results.db; done

Это не идеальное долгосрочное решение, но оно определенно работает без модификаций и может быть отличным скоростным стимулом.

ответ дан Liudvikas Akelis 22 мая 2018 г., 9:35:09
источник