Что замедляет растущую производительность базы данных?

Это действительно не так, как работает Spark.

Код, помещенный в foreachPartition, выполняется в ином контексте, чем оригинал

List finalJsonMap = new ArrayList();

Все, что вы можете сделать в такой настройке, - это изменить локальную копию.

Это многократно обсуждалось при переполнении стека и подробно описано в официальной документации в разделе «Понимание замыканий» .

Учитывая требуемый результат (то есть локальную коллекцию), на самом деле вы ничего не можете сделать, кроме как преобразовать свой код в mapPartitions и collect. Это, однако, вряд ли эффективно или идиоматично в Spark.

Я настоятельно рекомендую переосмыслить ваш текущий дизайн.

5
задан 10 October 2008 в 21:25
поделиться

8 ответов

Один фактор, который может усложнить, вставляет, когда база данных растет, количество индексов на таблице и глубина тех индексов, если они - B-деревья или подобный. Существует просто больше работы, чтобы сделать, и может случиться так, что Вы заставляете индексные узлы разделять, или Вы, возможно, просто переместились от, скажем, 5-уровневого B-дерева до 6-уровневого (или. в более общем плане, от N до уровней N+1).

Другим фактором могло быть использование дискового пространства - при использовании приготовленных файлов (это - нормальный вид для большинства людей большую часть времени; некоторый DBMS использует 'необработанные файлы' на Unix, но маловероятно, что Ваша встроенная система сделала бы так, и Вы будете знать, сделал ли он, потому что необходимо было бы сказать ему делать так), могло случиться так, что большие таблицы теперь фрагментируются через диск, ведя к худшей производительности.

Если бы проблема была на ИЗБРАННОЙ производительности, то могло бы быть много других факторов, также влияющих на производительность Вашей системы.

2
ответ дан 14 December 2019 в 13:51
поделиться

Это звучит о праве. Производительность базы данных обычно значительно отбрасывает, поскольку данные больше не могут быть сохранены в памяти, и операции становятся связанным диском. Если Вы используете нормальные операции вставки и хотите значительное повышение производительности, я предлагаю использовать своего рода объемная загрузка API, если H2 поддерживает его (как Oracle sqlldr, Sybase BCP, Mysql 'данные загрузки infile'). Этот тип API пишет данные непосредственно в файл данных, обходящий многие подсистемы базы данных.

2
ответ дан 14 December 2019 в 13:51
поделиться

Это, скорее всего, вызывается полями переменной ширины. Я не знаю, позволяет ли H2 это, но в MySQL, необходимо составить таблицу со всеми фиксированными полями ширины, затем явно объявить это как фиксированную полевую width таблицу. Это позволяет MySQL вычислять точно, где он должен войти в файл базы данных, чтобы сделать вставку. Если Вы не используете фиксированную таблицу width, то она должна прочитать таблицу для нахождения конца последней строки.

Добавление данных (при правильной организации) является O (n) операция, где n является длиной данных, которые будут записаны. Это не зависит от длины файла, существует, ищут операции для перескакивания через это легко.

1
ответ дан 14 December 2019 в 13:51
поделиться

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

0
ответ дан 14 December 2019 в 13:51
поделиться

Другая причина состоит в том, сохранена ли вся база данных в памяти или если ОС должна сделать большой обмен с диском, чтобы найти, что местоположение хранит запись.

0
ответ дан 14 December 2019 в 13:51
поделиться

Я возложил бы ответственность за него на ввод-вывод, особенно если Вы выполняете свою базу данных по нормальному ПК с нормальным жестким диском (этим, я имею в виду не в сервере с супер быстрыми жесткими дисками, и т.д.).

0
ответ дан 14 December 2019 в 13:51
поделиться

Для большинства баз данных, добавляя в файл базы данных определенно медленнее, чем предварительный рост файла и затем добавление строк. Посмотрите если поддержки H2, предварительно выращивающие файл.

1
ответ дан 14 December 2019 в 13:51
поделиться

Использование H2 для файла данных 7G - неправильный выбор из технологическая точка зрения. Как вы сказали, встраиваемый. Какое у вас «встроенное» приложение, если вам нужно хранить столько данных.

0
ответ дан 14 December 2019 в 13:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: