Кэш операторов драйвера Oracle JDBC против кэша операторов BoneCP?
Я использую драйвер JDBC Oracle и оцениваю BoneCP. Оба реализуют кэш операторов.
Я спрашиваю себя, должен ли я использовать один или другой для кэширования операторов. Как вы думаете? Каковы преимущества или недостатки для каждого способа?
1 ответ
Как автор BoneCP, я могу заполнить свою часть:
Использование кэша пула дает вам возможность отслеживать трассировку стека, если вы забыли правильно закрыть свои операторы. Если вы используете шаблон hibernate/spring jdbc или другое управляемое соединение, это не имеет значения, так как оно всегда будет для вас закрыто.
Кэш операторов связан с каждым соединением, поэтому, если у вас есть 100 подключений и вы продолжаете выполнять один и тот же оператор каждый раз, потребуется некоторое время, пока каждое соединение не заполнит свой кэш. Если БД поддерживает его, драйвер может иметь некоторые специальные настройки, чтобы подготовить этот оператор только один раз, но это не входит в спецификацию JDBC, и поэтому пул соединений не будет иметь таких средств для оптимизации, если это вообще возможно. С другой стороны, вы можете сказать пулу предоставить вам соединение в режиме LIFO, что значительно повысит вероятность попадания в горячий кеш.
По производительности не должно быть слишком большой разницы, так как в конце они оба пытаются повторно использовать оператор. Однако некоторые драйверы используют слепой подход для синхронизации на уровне метода, в то время как в BoneCP я всегда стараюсь использовать как можно более точную блокировку, поэтому в теории это должно обеспечить большую масштабируемость.
Резюме: оба должны работать примерно одинаково - если нет, то это, вероятно, ошибка дизайна где-то.