powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / базу в ппамять и обратно
4 сообщений из 4, страница 1 из 1
базу в ппамять и обратно
    #39398735
Artem Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для ускорения работы программы часть данных хочу вытянуть в память, а при выходе из программы отправит обновлённые данные обратно.
Причём баз три штуки, и пишу универсальную функцию на всех.

Запросом
Код: sql
1.
2.
SELECT tbl_name FROM sqlite_master where type='table'
ORDER BY rowid;


успешно получаю список таблиц в базе.
Дальше создаю базу
Код: sql
1.
 :memory:


строю запрос по шаблону
Код: sql
1.
2.
3.
4.
5.
ATTACH '%s' AS db2;
CREATE TABLE %s AS SELECT * FROM db2.%s;
.....
CREATE TABLE %s AS SELECT * FROM db2.%s;
DETACH db2;


Где вместо "%s" подставляю нужные строки (путь к базе на диске и имена таблиц)
Обратная процедура в том же духе.
И всё прекрасно работает, кроме одной мелочи.
Все PK и связи между таблицами пропадают.

Есть ли способ скопировать не только данные, но и всю структуру?
...
Рейтинг: 0 / 0
базу в ппамять и обратно
    #39398754
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во первых, не путай базу и таблицу. Ты уже не в FoxPro...

Во вторых, то что ты хочешь - нафиг не нужно. Читаешь некий объем из одной или нескольких таблиц и наполняешь прочитанным объекты (экземпляры классов в С++ и Java терминологии). Эти объекты у тебя лежат в памяти, в массиве или списке и ты с ними удобно работаешь. А когда нужно, формируешь insert/update/delete команды и отправляешь их напрямую в базу.

Да и бессмысленно копировать данные в :memory: базу из физической. Выигрыш в производительности копеечный, но может и отрицательный получиться. Тебе ж потребуется больше памяти - ОС тебе ее даст, но начнет свапить. А это ты уже контролировать не сможешь.
...
Рейтинг: 0 / 0
базу в ппамять и обратно
    #39398793
Artem Sh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,
я не путаю БД и таблицу, в данном случае считываю все таблицы из базы, поэтому и говорю, что базу в память.

Может, надо детальнее протестировать этот момент, но разницу в производительности я замечаю даже на таблицах в несколько строк. И предполагаю, что на больших объёмах тенденция сохранится.
И копировать некие объёмы не получается, точнее, эти объёмы - единичные. Регулярно надо найти в таблице строку, у которой столбец равен чему-то. и с этой строкой что-то сделать.

Может, дело в отсутствии индексов, которые я не задаю при создании, или ещё что, юно дисковая база заметно медленнее базы в памяти.
...
Рейтинг: 0 / 0
базу в ппамять и обратно
    #39399023
pit_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem Sh,

Можно вместо
Код: sql
1.
create ... as select ...

вытаскивать из sqlite_master DDL нужных таблиц, создавать их, а потом вставлять данные insert
Код: sql
1.
into ... select ...
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / базу в ппамять и обратно
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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