Скорее всего, вы захотите упаковать код в определенную функцию инициализации. Поскольку (std::
) массивы различной длины на самом деле являются разными типами, тем не менее, вам либо нужна функция шаблона, либо вам нужно работать с внутренними необработанными массивами (data()
):
template <typename T>
void initialize(T& t)
{
for(auto& a : t)
// ^ reference to pointer (!)
{
a = new A();
a->foo();
}
std::cout << std::endl;
}
Затем просто вызовите эту функцию для каждого массива. Если это все еще не достаточно коротко, вы можете упаковать это в шаблонную функцию:
template <typename T, typename ... TT>
void initialize(T& t, TT& ... tt)
{
initialize(t);
initialize(tt...);
}
// alternatively, a bit shorter, with C++17 fold expression:
template <typename ... TT>
void initialize(TT& ... tt)
{
(initialize(tt), ...);
}
В точке вызова это, скорее всего, будет самое короткое время, которое вы можете получить (кроме выбора еще более короткого имени ):
initialize(array1, array2, array3, array4, ...);
Вы можете записать строки в файл в формате "field1", "field2", .., а затем используйте ЗАГРУЗИТЬ ДАННЫЕ для их загрузки
data = '\n'.join(','.join('"%s"' % field for field in row) for row in data)
f= open('data.txt', 'w')
f.write(data)
f.close()
Затем выполните следующее:
LOAD DATA INFILE 'data.txt' INTO TABLE db2.my_table;
В частности, для MySQL самым быстрым способом загрузки данных является использование ЗАГРУЗИТЬ ИНФИЛЬ ДАННЫХ , поэтому, если вы можете преобразовать данные в ожидаемый формат, это, вероятно, будет самый быстрый способ поместить его в таблицу.
Если вы не LOAD DATA INFILE
, как упоминается в некоторых других предложениях, вы можете сделать две вещи, чтобы ускорить вставку:
Если вы можете сделать вручную свернутый оператор INSERT
, тогда я так и сделаю. буду идти. Один оператор INSERT
с несколькими предложениями значений намного быстрее, чем множество отдельных операторов INSERT
.
Независимо от метода вставки, вы захотите использовать механизм InnoDB для максимального параллелизма чтения / записи. MyISAM блокирует всю таблицу на время вставки, тогда как InnoDB (в большинстве случаев) блокирует только затронутые строки, позволяя операторам SELECT продолжить работу.
какой формат вы получаете? если это файл, вы можете выполнить какую-то массовую загрузку: http://www.classes.cs.uchicago.edu/archive/2005/fall/23500-1/mysql-load.html
Я не знаю точных деталей, но вы можете использовать представление данных в стиле json и использовать его как приспособления или что-то в этом роде. Я видел нечто похожее на Django Video Workshop Дугласа Наполеоне. Смотрите видео на http://www.linux-magazine.com/online/news/django_video_workshop . и http://www.linux-magazine.com/online/features/django_reloaded_workshop_part_1 . Надеюсь, это поможет.
Надеюсь, ты справишься. Я только начал изучать django, поэтому могу просто указать вам ресурсы.
Это не связано с фактической загрузкой данных в БД, но ...
Если указать "Данные загружаются ... Загрузка будет выполнена в ближайшее время" типа сообщение пользователю является вариантом, тогда вы можете запускать INSERT или LOAD DATA асинхронно в другом потоке.
Просто еще кое-что, чтобы рассмотреть.