powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Загрузка SQLite из памяти
19 сообщений из 19, страница 1 из 1
Загрузка SQLite из памяти
    #39737658
hottabych31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!

Мне в одном проекте нужно загружать бд 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 грузятся уже после открытия БД (?вроде).
Куда что нужно подключить чтобы можно было вызвать функцию как показано выше?
Заранее благодарен.
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39737662
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 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:"
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39737666
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или я не правильно понял задачу (((
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39737680
hottabych31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

Чуть неправильно.
Алгоритм такой:
1. читаем блоб из postgre,
2. читаем sqlite из блоба.

сохранение/загрузку из файла не предлагать, не спортивно)

там не c++, там c. Нужно скомпилить библиотеку с включенным в нее расширением, чтобы выполнить по человечки функцию sqlite3_open_v2
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39737682
hottabych31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,
Мучения не то слово, день убил в попытках разобраться что там и к чему...
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39737752
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не путаю "in memory" это когда с нуля ты создал БД в памяти. А если надо загрузить/выгрузить готовое - этого нет в SQLite.
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39737765
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хранить базу SQLite в PG...
Следующим шагом будет засовывание этой PG базы в какой-нибудь Hive?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39737782
hottabych31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Есть. Я уже написал выше про это расширение. Суть в том, что в самом низу стека обработки запроса (по версии sqlite) находится уровень файловой системы ОС. Разработчики сделали уровень абстракции, который позволяет отвязаться от реализации IO для конкретной ОС. Так вот memvfs как раз и реализует ввод/вывод в выделенном куске памяти, а не в файл.
Моих знаний C не хватает, чтобы встроить это расширение в код основной библиотеки и её собрать.

Dimitry Sibiryakov,
для моих задач(хранение справочных данных и настроек в компактном зашифрованном виде, иметь возможность быстрого select'а, удобство разработки CRUD форм,поддержка sql, универсальность) я не придумал решения лучше, правда, долго думал... Но может думалка не варит.
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39737788
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hottabych31я не придумал решения лучше

Говори честно: "нагугить готовый код шифрования какого-нибудь JSON и сохранения его в
блобе не смог".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39737794
hottabych31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Ненавижу врать.
Как вы представляете работать с JSON как с РСУБД? Ну, правда. Тем более всё это запаковать/распаковать, сериализовать/десериализовать, как-никак время занимает, машинное. И SQL не поддерживает.

Собственно, мне концепция "смерть кощея в игле, игла в яйце, яйцо в зайце, заяц в шоке" тоже не нравится, но не знаю, как сделать лучше. Была идея запихнуть всё рядом с другими таблицами, но потом подумалось, что экземпляров настроек может быть несколько... В общем, как мне запихнуть гребаное расширение в кодовую базу сикьюлайта?
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39737798
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hottabych31Как вы представляете работать с JSON как с РСУБД? Ну, правда.

Легко: std::map. Чего я не представляю, так это "справочных данных и настроек", которым
нужна отдельная РСУБД. У тебя миллион настроек и справочник, который не нужен в главной БД?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39737799
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хранить настройки в ини-файле не предлагать, да?))
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39737804
hottabych31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Ну да, порядка 50 таблиц, в среднем по 10 полей в каждой. Есть foreign constraints.
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39737813
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hottabych31Dimitry Sibiryakov,

Ну да, порядка 50 таблиц, в среднем по 10 полей в каждой. Есть foreign constraints.
это справочники
их в общей бд надо держать
причём даже в общей схеме, так чтобы другие приложения могли взять
а вот настройки, их мало
и их вообще-то тоже не помешает в БД хранить, потому что их захотят править из админки...
так что на те настройки, что в редиску sqlite можно положить, совсем мало остаётся
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39737879
hottabych31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

Да, вот только беда в том, что экземпляров справочников может быть несколько, от разных поставщиков. Разрулить это в общей схеме проблематично, на мой взгляд. Добавлять дополнительный ключ не хочу, копировать таблицы тоже.
В схеме с редиской sqlite'ом есть преимущество, что можно абстрагироваться от большей части мути, связанной с множественностью экземпляров справочников. Загрузил один конкретный, подключился и работай.

Кстати, с сабжем разобрался немного другим путем - загружаю расширение из dll (создаю inmemory бд, гружу memvfs.dll, всё это только один раз при инициализации), и далее уже подключаюсь через обычную sqlite3_open_v2 функцию. Не комильфо, но пока так.
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39737896
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hottabych31экземпляров справочников может быть несколько, от разных поставщиков. Разрулить это в
общей схеме проблематично, на мой взгляд.

Какое счастье, что у PG может быть много схем в одной базе.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39738239
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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

Чисто в порядке бреда сам так не делал, не проверял. Возможно брежу.
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39738240
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
документацию на C API нашел, только буковки/ссылочки там больно мелкие ))), с первого раза не заметил )))
...
Рейтинг: 0 / 0
Загрузка SQLite из памяти
    #39738268
hottabych31
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev, спасибо. Уже немного разобрался.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Загрузка SQLite из памяти
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]