Предположим, у меня есть (MySQL) DB. Я хочу, чтобы автоматизировать процесс обновления этой базы данных с помощью приложения, что будет:Контейнер для представления таблицы БД в памяти
1. Import from DB
2. Calculate updated data
3. Export back updated data
Время важно, я не хочу, чтобы импортировать то время как рассчет, на самом деле я не хочу никаких запросов, то ; Я хочу импортировать (а) таблицу (ы) в целом, , затем вычислить. Итак, мой вопрос: если строка представлена экземпляром класса, то в какой контейнер я помещаю эти объекты?
A? Множество? Как насчет упорядоченного или неупорядоченного? Просто используйте то, что кажется лучшим для моего дела в соответствии с большими временами O? Любые специальные ловушки, чтобы попасть сюда? Разве этот случай не отличается от данных, «рожденных в памяти», поэтому единственные вещи, которые можно учитывать помимо накладных расходов, это «я хочу, чтобы поиск или вставка были быстрее»?
Возможно, лучший маршрут - использовать какой-то ORM, но, допустим, я не хочу.
Я видел, что некоторые приложения используют boost::unordered_set
, и я подумал, если есть конкретная причина для ее использования ...
Я использую JDBC-подобный интерфейс, как разъем (libmysqlcpp
).
Что делать, если расчет довольно сложный? Используется сериализованный входной файл в несколько сотен МБ, и после разбора вычисление выполняется с использованием данных, которые мы имеем до сих пор (поступающих из БД), и новых данных (поступающих из входного файла). Затем БД необходимо обновить (возможно, на некоторых столбцах, может быть, несколько таблиц) с результатом вычисления. Я хочу сделать это в cpp, потому что я мало что знаю о базах данных, и я не уверен, предназначены ли для этого функции, определенные пользователем в БД. – Innkeeper
DB оценивается как ~ 25 таблиц, ~ 10M записей в наибольшей. Входные файлы имеют размер до ~ 1 ГБ, время обработки в cpp составляет ~ 2-3 часа. Время импорта/экспорта проверяется с одинаковыми размерами таблиц и никогда не превышает 20-30 минут, что приемлемо в этом случае. (ПРИМЕЧАНИЕ: это оценки, код еще не написан, это этап проектирования) – Innkeeper
Возможно, есть реальные причины использовать предлагаемый дизайн. Я вижу лишь небольшую часть вашей проблемы. :) Из того, что вы сейчас говорите, я обрабатываю данные из файла, внедряю его в БД и «примиряю» его в БД.Определенный пользователем proc может быть выполнен в C++, и, возможно, больше того, что можно сделать на C++. Единственная проблема, с которой я столкнулся бы с таким дизайном, - это слишком сильно загружать процессор в ящик БД, если пользователи все еще его запрашивают. – Johan