Хранимые процедуры базы данных страдают от низкой производительности при возврате больших объемов данных? - PullRequest
0 голосов
/ 23 сентября 2011

Под VoltDB Не делает

http://community.voltdb.com/DosAndDonts

Они заявляют

Не создавайте запросы, которые возвращают большие объемы данных (например, SELECT * ОТ FOO без ограничений) особенно для нескольких разделов сделки. Будьте консервативны в данных, возвращаемых хранимыми процедур.

Это один из вариантов использования, которые у меня есть. Есть ли какой-то аспект хранимых процедур, который делает их неподходящими для этого типа запроса, или это что-то специфическое для VoltDB? При таком сценарии производительность снизится до уровня, который будет хуже, чем у традиционных СУБД, таких как Postgres?

Редактировать: Мой запрос не совсем select * from foo, но мне нужно будет выбрать все финансовые транзакции между определенными диапазонами дат, и это может превысить 100 м строк

Ответы [ 3 ]

3 голосов
/ 25 сентября 2011

Все базы данных должны оплатить затраты на материализацию и ввод / вывод для передачи большого набора результатов обратно пользователю.

Однако я могу говорить конкретно с VoltDB.

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

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

1 голос
/ 23 сентября 2011

Проблема производительности связана с передачей больших объемов данных. Как правило, это верно для всех баз данных.

Когда базе данных нужно возвращать большие объемы данных, ей нужно использовать много ресурсов (например, память, процессор, сетевой ввод-вывод), что снижает производительность.

Может возникнуть проблема только с сетевым вводом-выводом, так как если это значительный объем данных, ничто больше не сможет пройти через сеть до завершения передачи данных.

0 голосов
/ 10 февраля 2012

Если вы запрашиваете SELECT * FROM FOO для отображения результатов в пользовательском интерфейсе или аналогичном сценарии использования, тогда разбиение по страницам является хорошим подходом для ограничения размера возвращаемых данных и времени выполнения транзакции. Пример подкачки есть в a .

Если вы пытаетесь извлечь данные из VoltDB для экспорта в другую базу данных или систему, лучше использовать VoltDB Export .

...