Таблица SQLite в оперативной памяти вместо FLASH - PullRequest
2 голосов
/ 07 октября 2011

В настоящее время мы работаем над проектом Python, который в основном читает и записывает данные M2M в / из базы данных SQLite.Эта база данных состоит из нескольких таблиц, одна из которых хранит текущие значения, поступающие из облака.Эта последняя таблица немного беспокоит меня, так как она пишется очень часто, и приложение работает на флэш-накопителе.

Я читал, что виртуальные таблицы могут быть решением.Я подумал о том, чтобы преобразовать критическую таблицу в виртуальную, а затем связать ее содержимое с реальным файлом (XML или JSON), хранящимся в ОЗУ (/ tmp, например, в Debian).Я читал эту статью: http://drdobbs.com/database/202802959?pgno=1, которая более или менее объясняет, как делать то, что я хочу.Это довольно сложно, и я думаю, что это не очень выполнимо, используя Python.Может быть, нам нужно разработать собственное расширение sqlite, я не знаю ...

Есть идеи о том, как "поместить" нашу конфликтующую таблицу в ОЗУ, в то время как остальная часть базы данных остается во FLASH?Есть ли лучший / более простой подход о том, как использовать виртуальные таблицы в Python?

Ответы [ 2 ]

1 голос
/ 07 октября 2011

Очень простое решение для создания таблицы в памяти, использующее только SQL, использует команду SQLite ATTACH со специальным псевдонимом ": memory:":

ATTACH DATABASE ":memory:" AS memdb;
CREATE TABLE memdb.my_table (...);

Поскольку вся база данных "memdb" хранится в оперативной памяти, данные будут потеряны, как только вы закроете соединение с базой данных, поэтому вам придется самостоятельно позаботиться о сохранении.

Один из способов сделать это может быть:

  1. Откройте ваш основной файл базы данных SQLite
  2. Присоединение вторичной базы данных в памяти
  3. Дублируйте таблицу, критичную для производительности, в базе данных в памяти
  4. Выполнить все запросы к дублирующейся таблице
  5. После этого запишите таблицу в памяти обратно в исходную таблицу (BEGIN; DELETE FROM real_table; INSERT INTO real_table SELECT * FROM memory_table;)

Но лучший совет, который я могу вам дать: убедитесь, что у вас действительно есть проблема с производительностью, простое решение также может быть достаточно быстрым!

0 голосов
/ 07 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...