|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
Когда-то читал в документации SQLite о явной возможности создания файловой БД в памяти (не :memory:). Т.е. на диске создается файл, но вся БД остается в кеше, и на диск сбрасываются данные только если превышен доп размер кеша. Примерно это в доках и написано. Сейчас как раз понадобилась такая небольшая БД, не организовывать же под нее RAM-Disk. Сейчас не могу найти, вроде уже все просмотрел на SQLite "Есть многое на свете, друг Горацио, что и не сразу в голову придет." М. Твен "Приключения Геккельбери Финна" ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2019, 22:59 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
Плохо смотрел. Для изменения размера кэша PRAGMA cache_size ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2019, 08:39 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
Dima T, Думаю, одного этого недостаточно. Видимо еще, плюс к этому, надо работать в режиме общего кэша . Но, пока не пойму, достаточно ли этого, или еще что-то нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2019, 14:34 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
Не надо думать. Надо взять и проверить предложенные вам (и вами) варианты на ваших данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2019, 15:03 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
Basil A. SidorovНе надо думать. Надо взять и проверить предложенные вам (и вами) варианты на ваших данных. Да, да. Че тут думать, трясти надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2019, 15:19 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
Сначала вопрос задайте нормально ...о явной возможности создания .... БД в памяти (не :memory:) Т.е. на диске создается файл Эти утверждения полностью противоречивы. Нафига файл, если БД в памяти? Т.е. на диске создается файл, но вся БД остается в кеше, и на диск сбрасываются данные только если превышен доп размер кеша. Вообще-то, КЭШЬ ровно так и работает по определению. Хранит данные в памяти и данные из кеша вытесняются "если превышен ... размер кеша" Т.ч., что же Вам нужно, лично для меня загадка. p.s. разные умные слова write back, write throught я знаю. Но сути дела, что Т.С. сам не знает, что же ему нужно, эти умные слова не меняет. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2019, 16:11 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevТ.ч., что же Вам нужно, лично для меня загадка. Коли уж загадка. Может, тогда и писать в теме не стоило? )) В старой документации SQLite была четко прописана конфигурация подобных БД в памяти. Новая версия - видимо документация слегка поменялась, и этот раздел исчез. Недостатком БД :memory: является невозможность подключения к ней из разных потоков и невозможность непосредственного сохранения БД на диске. Полагаю, что PRAGMA cache_size и режиме общего кэша решат эту задачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2019, 17:06 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
YUBA Чем, все что Вы описали, отличается от ОБЫЧНОЙ БД в файле? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2019, 18:43 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
YUBAНедостатком БД :memory: .... и невозможность .... сохранения БД на диске. AFAIK можно ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2019, 18:46 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevYUBA Чем, все что Вы описали, отличается от ОБЫЧНОЙ БД в файле? Только специфичностью конфигурации. При конфигурации SQLite по умолчанию мы получим выигрыш по времени по сравнению с обычной записью/чтением в файл только 30-35% (см документацию SQLite). ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2019, 19:38 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevYUBAНедостатком БД :memory: .... и невозможность .... сохранения БД на диске. AFAIK можноЛадно, согласен, можно. ) Но не автоматом. И проблему это никак не решает. Вместе с тем, обычные файлы на RAM-Disk обеспечивают скорость обмена до нескольких ГБ/с и нужна примерно аналогичная скорость от SQLite, но без RAM-Disk. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2019, 23:50 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
YUBAВместе с тем, обычные файлы на RAM-Disk обеспечивают скорость обмена до нескольких ГБ/с и нужна примерно аналогичная скорость от SQLite, но без RAM-Disk. Начиная с Win7 кэширование средствами ОС ничуть не хуже RAM-Disk`a. Я как-то перенес базу MS SQL c HDD на SSD, думал залетает, но скорость не поменялась, совсем. MS SQL Express имеет ограничение 1Гб оперативки, база почти 10 Гб, т.е. базу кэшировала ОС. SQLite по умолчанию дожидается записи на диск, поэтому запись медленная, но гарантированная. Если надежность не критична, то можно не дожидаться записи на диск. Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2019, 08:24 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
Неплохая статья про тюнинг SQLite ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2019, 09:16 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
Dima TНеплохая статья про тюнинг SQLite У автора в экземпле для конфигурации SQLite по умолчанию получилась скорость ~0.4 МБ/с. Изначально было понятно, что скорость такой конфигурации низкая, но появилась точка отсчета. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2019, 14:31 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
В таблицу со структурой "CREATE TABLE IF NOT EXISTS foo(a0 real, a1 real, a2 real, a3 real, a4 real)"; записал 1000 строк массива double rt[10000][5];. Время выполнения от начала до конца транзакции - 132.000000 ms. Конфигурация БД - по умолчанию. Версия SQLite.dll - 3.28. Подсчет времени производился программой: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
В разделе С++ пишут, что она не оч. корректно измеряет время. Фрагмент программы записи в массива в таблицу см в теме Как вставить много строк из двумерного массива. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.06.2019, 21:45 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
YUBAВ разделе С++ пишут, что она не оч. корректно измеряет время.Ты не правильно читаешь. У компьютера несколько разных "времен". И все они корректны, но результаты надо правильно понимать. Если тебя интересует сколько человек будет ждать отклика от программы используй time(), но оно даст приблизительное значение зависящее от загруженности компьютера другими задачами. Если у тебя в один запуск не было ничего другого, а в другой запуск куча приложений сожрали всю память - измерение через time() тебе это предсказать не сможет. Если ты хочешь узнать сколько времени процессор провел над твоей программой - тогда используешь clock(). Оно тебе даст довольно точное время вне зависимости от загруженности машины, но будет всегда "занижать" с точки зрения человека. Именно потому что все фоновые задачи просто не учитываются. Есть еще несколько вариантов измерения времени, но все они в основном разнятся точностью, но по сути сводятся к этим двум временам - реальному или процессорному. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 01:32 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
Сделал аналогичную БД в :memory:, задача выполняется за 3 мс. Конфигурация аналогична. Размера кэша PRAGMA cache_size на быстродействие при записи небольших объемов данных никак не влияет. У нас размер 1000 строк массива вида double rt[N][5] - примерно 40 кБ. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 19:33 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
Хороший прирост быстродействия дает PRAGMA journal_mode=MEMORY; Время выполнения колеблется в среднем от 40 до 70 мс. В основном в интервале 50-60 мс. По скорости передачи это ~ 1 МБ/с. Напомню, ранее время выполнения запроса было ~130 мс. Фрагмент программы записи данных в БД см в теме - Как вставить много строк из двумерного массива ] ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 23:52 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
Неплохая статья/тест по производительности insert в SQL Lite правда 10 летней давности (найдено через google). Данные в этой статьи как-то более релевантны моему восприятию мира, чем цифры в данном топике. https://stackoverflow.com/questions/1711631/improve-insert-per-second-performance-of-sqlite The "Worst-Case-Scenario" (auto commit) - 85 inserts per second. Using a Transaction - 23,000 inserts per second. Using a Prepared Statement - 53,000 inserts per second. PRAGMA synchronous = OFF - 69,600 inserts per second. PRAGMA journal_mode = MEMORY - 64,000 inserts per second. PRAGMA synchronous = OFF and PRAGMA journal_mode = MEMORY - 72,000 inserts per second. Using an In-Memory Database = 79,000 inserts per second. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 15:41 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevThe "Worst-Case-Scenario" (auto commit) - 85 inserts per second. Using a Transaction - 23,000 inserts per second. Using a Prepared Statement - 53,000 inserts per second. PRAGMA synchronous = OFF - 69,600 inserts per second. PRAGMA journal_mode = MEMORY - 64,000 inserts per second. PRAGMA synchronous = OFF and PRAGMA journal_mode = MEMORY - 72,000 inserts per second. Using an In-Memory Database = 79,000 inserts per second. Да, это похоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 17:00 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev https://stackoverflow.com/questions/1711631/improve-insert-per-second-performance-of-sqlite The "Worst-Case-Scenario" (auto commit) - 85 inserts per second. Using a Transaction - 23,000 inserts per second. Using a Prepared Statement - 53,000 inserts per second. PRAGMA synchronous = OFF - 69,600 inserts per second. PRAGMA journal_mode = MEMORY - 64,000 inserts per second. PRAGMA synchronous = OFF and PRAGMA journal_mode = MEMORY - 72,000 inserts per second. Using an In-Memory Database = 79,000 inserts per second. [/spoiler]Пока дело касается дисковых БД, соотношения скоростей примерно аналогичны. Даже то, что совместное применение PRAGMA synchronous = OFF and PRAGMA journal_mode = MEMORY не дает сколь-либо существенного прироста скорости (в моем случае где-то в пределах стат погрешности), а по отдельности эффекты применения сопоставимы. Что касается БД :memory:, тут да, значительное расхождение. Однако, тест 10-ти летней давности, версии SQLite уже совсем другие. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 17:15 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
YUBA... Недостатком БД :memory: является невозможность подключения к ней из разных потоков и невозможность непосредственного сохранения БД на диске. Сам не делал, но вроде 1. можно "This allows separate database connections to share the same in-memory database. Of course, all database connections sharing the in-memory database need to be in the same process." https://www.sqlite.org/inmemorydb.html 2. можно https://www.sqlite.org/backup.html ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 17:19 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevYUBA... Недостатком БД :memory: является невозможность подключения к ней из разных потоков и невозможность непосредственного сохранения БД на диске. Сам не делал, но вроде 1. можно "This allows separate database connections to share the same in-memory database. Of course, all database connections sharing the in-memory database need to be in the same process." https://www.sqlite.org/inmemorydb.html 2. можно https://www.sqlite.org/backup.html Я уже с вами ранее согласился. Можно. И сохранять - есть методы, но не автосохранение, как в случае с дисковой БД. Это не катит. Не проблема и совместный доступ, но исключительно из одного потока. В моем случае должны взаимодействовать разные, даже не потоки, а приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 17:33 |
|
Файловая БД SQLite в памяти.
|
|||
---|---|---|---|
#18+
YUBAPRAGMA synchronous = OFF...не дает сколь-либо существенного прироста скорости (в моем случае где-то в пределах стат погрешности)... Теоретически, при synchronous = OFF неоткуда взяться: YUBAВ смысле быстродействия, как писалось ранее это ничего не дает, и не могло дать, т.к. основное время выполнения запроса занимают дисковые операции . Т.к. лично я бы ожидал, что при synchronous = OFF дисковые операции должны завершаться мгновенно. Данные передаются в OS и управление тут же возврашается обратно. Собственно ввода-вывода никто ждать не должен. Теоретически. Конкретный код (и версии), разумеется, может работать как-то неправильно и содержать баги. Вполне возможно, еще какие-то блокировки или миханизмы срабатывают. Нужно запускать конкретный код и как-то смотреть. что происходит. ==== P.S. Сам использовал SQLite для сохранения десятков миллионов строк данных. Ничего даже не настраивал. Т.к. лично мне производительности вполне хватало ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 17:35 |
|
|
start [/forum/topic.php?fid=54&fpage=2&tid=2008380]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
52ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 169ms |
0 / 0 |