Red de conocimiento informático - Aprendizaje de programación - Conectividad de datos de druida

Conectividad de datos de druida

Druid admite todas las bases de datos compatibles con JDBC, incluidas Oracle, MySql, Derby, Postgresql, SQL Server, H2 y más.

Druid tiene optimizaciones especiales para Oracle y MySql, como optimización del uso de memoria PS Cache para Oracle y optimización de detección de ping para MySql. Alibaba es una empresa que utiliza mucho bases de datos relacionales. Utilizamos ampliamente Druid en el entorno de producción. A través del uso real a largo plazo, modificaciones y mejoras en entornos de producción de carga extremadamente alta, Druid se ha convertido gradualmente en el mejor grupo de conexiones de bases de datos. Druid tiene claras ventajas en monitoreo, escalabilidad, estabilidad y rendimiento.

La primera es la poderosa función de monitoreo. A través de la función de monitoreo proporcionada por Druid, puede comprender claramente las condiciones de trabajo del grupo de conexiones y SQL.

Supervise el tiempo de ejecución de SQL, el tiempo de retención del conjunto de resultados, el número de filas devueltas, el número de filas actualizadas, el número de errores y la información de la pila de errores.

Distribución de intervalos de tiempo para la ejecución de SQL. ¿Cuál es la distribución de intervalos que requiere mucho tiempo? Por ejemplo, un determinado SQL se ejecuta 1000 veces, de las cuales 50 veces están entre 0 y 1 milisegundos, 800 veces están entre 1 y 10 milisegundos, 100 veces están entre 10 y 100 milisegundos y 30 veces están entre 100 y 1000 milisegundos. , 15 veces entre 1 y 10 segundos, y 5 veces por encima de 10 segundos. A través de la distribución de intervalos que requieren mucho tiempo, se puede comprender claramente la ejecución de SQL que requiere mucho tiempo.

Supervise la cantidad de conexiones físicas creadas y destruidas en el grupo de conexiones, la cantidad de conexiones lógicas solicitadas y cerradas, la cantidad de esperas no nulas, la tasa de aciertos de PSCache, etc.

En segundo lugar, es fácil de ampliar. Druid proporciona una API extendida en modo de cadena de filtros, lo que le permite escribir sus propios filtros para interceptar cualquier método en JDBC, y puede hacer cualquier cosa con él, como monitoreo del rendimiento, auditoría de SQL, cifrado de nombre de usuario y contraseña, espera de registro.

El StatFilter integrado de Druid se usa para monitorear, el filtro de series de registros se usa para la salida de registros y WallFilter se usa para defenderse contra ataques de inyección SQL.

Alibaba ha implementado internamente CirceFilter para el cifrado de contraseñas de bases de datos, así como monitoreo relacionado con Web y Spring.

En tercer lugar, Druid combina las mejores características de los grupos de conexiones de bases de datos comerciales y de código abierto y las optimiza con la experiencia de Alibaba en entornos de producción hostiles a gran escala.

ExceptionSorter: cuando una conexión genera una excepción irrecuperable (como la sesión de Oracle error_code_28 que se cancela), debe ser expulsada del grupo de conexiones inmediatamente; de ​​lo contrario, se generará una gran cantidad de errores. Sólo Druid y JBoss DataSource implementan ExceptionSorter.

Optimización del uso de memoria de PSCache Para bases de datos que admiten cursores (Oracle, SQL Server, DB2, etc., excluyendo MySql), PSCache puede mejorar significativamente el rendimiento de ejecución de SQL. Un PreparedStatement es equivalente a un cursor en el servidor. Si PreparedStatement se almacena en caché para su ejecución repetida, PreparedStatement no se cerrará y el cursor del lado del servidor tampoco se cerrará. La mejora del rendimiento es muy obvia. En el caso de "SELECT * FROM T WHERE ID = ?", el rendimiento puede mejorarse en órdenes de magnitud.

Sin embargo, en el controlador Oracle JDBC, otros grupos de conexiones de bases de datos (DBCP, JBossDataSource) pueden ocupar demasiada memoria, que puede exceder 1G en casos extremos. Druid llama a OracleDriver para proporcionar una API interna para administrar PSCache.

LRU es una métrica de rendimiento clave, especialmente en Oracle, donde cada conexión corresponde a PSCache. En Oracle, cada conexión corresponde a un proceso en el lado de la base de datos. Si el grupo de conexiones de la base de datos sigue a LRU, ayuda a optimizar el servidor de la base de datos, lo cual es un indicador importante. Druid, DBCP, Proxool y JBoss cumplen con LRU, mientras que BoneCP y C3P0 no cumplen con LRU. BoneCP puede funcionar bien en un entorno simulado, pero no en un entorno real. Druid proporciona soporte completo para MySql, Oracle, Postgresql y SQL-92 SQL. Es un analizador SQL de alto rendimiento escrito a mano que admite el modo Visitante, lo que facilita el análisis de árboles de sintaxis abstracta de SQL.

Una declaración SQL simple tarda menos de 10 microsegundos y una declaración SQL compleja tarda 30 microsegundos.

A través del analizador SQL proporcionado por Druid, SQL se puede interceptar en la capa JDBC para el procesamiento correspondiente, como subbibliotecas y subtablas, auditoría, etc. WallFilter de Druid para defenderse contra ataques de inyección SQL se implementa a través del analizador SQL de Druid para analizar la semántica. Druid proporciona un marco de complemento en modo Filter-Chain. Al escribir configuraciones de filtro en DruidDataSource, se pueden interceptar varias API de JDBC para lograr la expansión. Druid proporciona una serie de filtros integrados.