|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
Привет! Мне в одном проекте нужно загружать бд sqlite из памяти. В списке расширений у SQLite'а есть memvfs.c, который позволяет делать подключения к БД типа sqlite3_open_v2("file:/whatever?ptr=0xf05538&sz=14336&max=65536", &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_URI, "memvfs"); В общем, как я понял мне нужно скомпилировать sqlite3.dll с уже включенным в неё этим расширением, потому что расширения для SQLite грузятся уже после открытия БД (?вроде). Куда что нужно подключить чтобы можно было вызвать функцию как показано выше? Заранее благодарен. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 17:55 |
|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
В C++ с SQLLite не работал, работал только из Java. Но твои мучения не понятны, т.к. https://www.sqlite.org/inmemorydb.html The most common way to force an SQLite database to exist purely in memory is to open the database using the special filename ":memory:" ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 18:00 |
|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
или я не правильно понял задачу ((( ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 18:01 |
|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Чуть неправильно. Алгоритм такой: 1. читаем блоб из postgre, 2. читаем sqlite из блоба. сохранение/загрузку из файла не предлагать, не спортивно) там не c++, там c. Нужно скомпилить библиотеку с включенным в нее расширением, чтобы выполнить по человечки функцию sqlite3_open_v2 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 18:24 |
|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Мучения не то слово, день убил в попытках разобраться что там и к чему... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 18:27 |
|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
Если не путаю "in memory" это когда с нуля ты создал БД в памяти. А если надо загрузить/выгрузить готовое - этого нет в SQLite. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 21:11 |
|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
Хранить базу SQLite в PG... Следующим шагом будет засовывание этой PG базы в какой-нибудь Hive?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 21:58 |
|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
Dima T, Есть. Я уже написал выше про это расширение. Суть в том, что в самом низу стека обработки запроса (по версии sqlite) находится уровень файловой системы ОС. Разработчики сделали уровень абстракции, который позволяет отвязаться от реализации IO для конкретной ОС. Так вот memvfs как раз и реализует ввод/вывод в выделенном куске памяти, а не в файл. Моих знаний C не хватает, чтобы встроить это расширение в код основной библиотеки и её собрать. Dimitry Sibiryakov, для моих задач(хранение справочных данных и настроек в компактном зашифрованном виде, иметь возможность быстрого select'а, удобство разработки CRUD форм,поддержка sql, универсальность) я не придумал решения лучше, правда, долго думал... Но может думалка не варит. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 22:43 |
|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
hottabych31я не придумал решения лучше Говори честно: "нагугить готовый код шифрования какого-нибудь JSON и сохранения его в блобе не смог". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 23:15 |
|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Ненавижу врать. Как вы представляете работать с JSON как с РСУБД? Ну, правда. Тем более всё это запаковать/распаковать, сериализовать/десериализовать, как-никак время занимает, машинное. И SQL не поддерживает. Собственно, мне концепция "смерть кощея в игле, игла в яйце, яйцо в зайце, заяц в шоке" тоже не нравится, но не знаю, как сделать лучше. Была идея запихнуть всё рядом с другими таблицами, но потом подумалось, что экземпляров настроек может быть несколько... В общем, как мне запихнуть гребаное расширение в кодовую базу сикьюлайта? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 23:29 |
|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
hottabych31Как вы представляете работать с JSON как с РСУБД? Ну, правда. Легко: std::map. Чего я не представляю, так это "справочных данных и настроек", которым нужна отдельная РСУБД. У тебя миллион настроек и справочник, который не нужен в главной БД?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 23:35 |
|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
хранить настройки в ини-файле не предлагать, да?)) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 23:40 |
|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Ну да, порядка 50 таблиц, в среднем по 10 полей в каждой. Есть foreign constraints. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 23:51 |
|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
hottabych31Dimitry Sibiryakov, Ну да, порядка 50 таблиц, в среднем по 10 полей в каждой. Есть foreign constraints. это справочники их в общей бд надо держать причём даже в общей схеме, так чтобы другие приложения могли взять а вот настройки, их мало и их вообще-то тоже не помешает в БД хранить, потому что их захотят править из админки... так что на те настройки, что в редиску sqlite можно положить, совсем мало остаётся ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2018, 01:12 |
|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
полудух, Да, вот только беда в том, что экземпляров справочников может быть несколько, от разных поставщиков. Разрулить это в общей схеме проблематично, на мой взгляд. Добавлять дополнительный ключ не хочу, копировать таблицы тоже. В схеме с редиской sqlite'ом есть преимущество, что можно абстрагироваться от большей части мути, связанной с множественностью экземпляров справочников. Загрузил один конкретный, подключился и работай. Кстати, с сабжем разобрался немного другим путем - загружаю расширение из dll (создаю inmemory бд, гружу memvfs.dll, всё это только один раз при инициализации), и далее уже подключаюсь через обычную sqlite3_open_v2 функцию. Не комильфо, но пока так. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2018, 12:36 |
|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
hottabych31экземпляров справочников может быть несколько, от разных поставщиков. Разрулить это в общей схеме проблематично, на мой взгляд. Какое счастье, что у PG может быть много схем в одной базе. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2018, 13:22 |
|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
Dima TЕсли не путаю "in memory" это когда с нуля ты создал БД в памяти. А если надо загрузить/выгрузить готовое - этого нет в SQLite. Да, разбираться надо, самому писать Я так понял, база in memory это просто набор страниц в структуре Pager возращаемой sqlite3BtreePager. Код сохранения базы на диск в инете находится, но вот кода создать обратно, поиском не нашел. Также как и документации на внутренние ф-ции/структуры SQLLite. IMHO только жестким хакингом. Раньше таким увлекался, но теперь лениво ))) Подозреваю, нужно востановить Pager одни в один как был, и потом просто добавить его в массив открытых баз (как делает команда/ф-ция attach) Кроме того, в коде attach попадается очень обнадеживающий макрос SQLITE_ENABLE_DESERIALIZE. Вполне возмонжно, все уже реализовано до нас https://www.sqlite.org/c3ref/serialize.html https://www.sqlite.org/c3ref/deserialize.html Чисто в порядке бреда сам так не делал, не проверял. Возможно брежу. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2018, 19:32 |
|
Загрузка SQLite из памяти
|
|||
---|---|---|---|
#18+
документацию на C API нашел, только буковки/ссылочки там больно мелкие ))), с первого раза не заметил ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2018, 19:33 |
|
|
start [/forum/topic.php?fid=57&msg=39737794&tid=2017715]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
116ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 262ms |
total: | 476ms |
0 / 0 |