2011-01-19 1 views
4

Какая стратегия кэширования выполняется быстрее и на сколько?Кэширование Подготовлено к соединению или разрешить пул подключений?

1) Подготовлено объединение пула (по пулу подключения). Кэширование приложения не выполняется.

for (int i=0; i<1000; i++) { 
    PreparedStatement preparedStatement = connection.prepareStatement(sql); 
    preparedStatement.setObject(1, someValue); 
    preparedStatement.executeQuery(); 
    preparedStatement.close(); 
} 

2) Кэширование на уровне приложения. Нет Подготовлено объединение.

PreparedStatement preparedStatement = connection.prepareStatement(sql); 
for (int i=0; i<1000; i++) { 
    preparedStatement.clearParameters(); 
    preparedStatement.setObject(1, someValue); 
    preparedStatement.executeQuery(); 
} 
preparedStatement.close(); 

Этот вопрос похож на Reusing a PreparedStatement multiple times кроме того, что я ожидаю конкретных результатов тестов, а также принимая PreparedStatement Объединив во внимание.

http://drupal.org/node/550124#comment-2224630, похоже, указывает, что кэширование на уровне приложений более эффективно, чем пул PreparedStatement, но разница незначительна. Я бы хотел увидеть больше тестов, прежде чем решиться.

ответ

1

Этот вид микроэлемента редко вызывает любые полезные данные. Использование реального мира будет сильно различаться по шаблону использования, базовой реализации базы данных, сети, памяти на сервере базы данных и т. Д.

Почему бы вам просто не написать свой код, чтобы он работал с тестами. Тогда, если это окажется слишком медленным, вы можете обновить реализацию и убедиться, что программное обеспечение будет продолжать работать.

+0

Я пытаюсь понять, стоит ли вводить кэширование на уровне приложения в структуру. Это повлияет на пользовательскую базу в целом, поэтому оптимизация для конкретного варианта использования не поможет. Есть ли какой-то уважаемый базисный тест, который мы могли бы изменить? – Gili

+0

Ну, кто-нибудь из пользователей запросил эту функцию? Если нет, то, возможно, никто не нуждается в этом, и вы могли бы сэкономить немного усилий, вместо того, чтобы внедрять новую функцию, которая может не сделать многое ... просто мысль! – time4tea

-3

Кэширование уровня приложения будет более эффективным, особенно если вы выполняете эти казни.

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

+0

Прошу лично не нападать на людей - это нарушает правило [Be Nice] (https://stackoverflow.com/help/be-nice) и ничего не помогает другим. – Avery

+0

Спасибо, но ирония - это мой ответ, возможно, помогли больше, чем выше. разумный способ времени сказать, кто-то их вопрос - глупость; даже модераторы SO не могли этого видеть. – MrBlob