Для музыкального программного обеспечения, которое я сейчас пишу, мне нужно хранить много данных разной глубины в таблице (5-мерный контейнер).Когда я говорю много данных, это не значит, что они тяжелые (это в основном небольшие строки и числа), но их может быть много.Данные должны быстро вызываться, когда это необходимо программному обеспечению, а также быстро сохранять данные.Каково было бы лучшее решение для этого?
Первая версия программного обеспечения была написана на Lua, и я мог легко это сделать (благодаря гибким таблицам Lua).В C++
это приведет к 5-мерному вектору, которым не очень удобно управлять.Я попробовал JSON-парсер , который не казался достаточно быстрым.Я также думал о решении SQL, но текущая реализация SQLite
, которую я использую (с sqlite3), на самом деле не соответствует архитектуре данных, которую я хочу.Кроме того, это заставило меня задуматься над некоторыми вопросами о моей стратегии: является ли хорошей практикой в программном обеспечении запись «живых» данных (я имею в виду данные, которые программное обеспечение использует во время выполнения и которые иногда должны манипулировать) на диске (например, решение SQLite
, илиJSON
)?Я думаю, пока это не слишком тяжело в памяти, в этом нет необходимости?И обратный вопрос: если это решение для записи на диск, сколько это стоит?
Моя последняя попытка была написать многомерный вектор, но я не совсем уверен, как это инициализировать.Каждый вложенный вектор должен иметь возможность изменять размер, и мне нужно в любое время поместить некоторые данные на любую глубину.
std::vector < std::vector < std::vector < std::vector < const char *> > > > data;
//The following line obviously doesn't really work, since no vector initialization was done. But a solution working almost like this would be perfect :
data[c_seq][track_idx][lin][col]=value;
Последняя строка вызывает ошибку сегментации.