Кэш операторов драйвера Oracle JDBC против кэша операторов BoneCP? - PullRequest
6 голосов
/ 27 мая 2011

Я использую драйвер Oracle JDBC и оцениваю BoneCP. Оба реализуют кэш операторов.

Я спрашиваю себя, должен ли я использовать тот или другой для кэширования операторов. Как вы думаете? Какие преимущества или недостатки у каждого способа?

1 Ответ

9 голосов
/ 27 мая 2011

Как автор BoneCP, я могу заполнить свою часть:

  • Использование кэша пула дает вам возможность дать вам трассировку стека, если вы забудете правильно закрыть свои операторы,Если вы используете шаблон hibernate / spring jdbc или другое управляемое соединение, это не имеет значения, поскольку оно всегда будет для вас закрыто.

  • Кэш операторов привязан к каждому соединению, поэтому еслиу вас есть 100 соединений, и вы продолжаете выполнять один и тот же оператор каждый раз, потребуется некоторое время, пока каждое соединение не заполнит свой кэш.Если БД поддерживает его, драйвер может иметь некоторые специальные настройки, чтобы подготовить этот оператор только один раз, но это не входит в спецификацию JDBC, и поэтому пул соединений не будет иметь таких средств для оптимизации, если это вообще возможно.С другой стороны, вы можете сказать пулу предоставить вам соединение в режиме LIFO, что значительно повысит вероятность того, что вы попадете в горячий кеш.

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

Резюме: оба должны работать примерно одинаково - если нет, то это, вероятно, ошибка проектирования где-то.

...