En la versión v0.1.0, lanzamos la función de transacciones distribuidas y brindamos una vista previa de la función de separación de lectura y escritura. En la versión v0.2.0, agregamos la función de enrutamiento de solicitud de consulta personalizada a través de sugerencias y solucionamos algunos errores. Además, en esta versión, también ofrecemos una vista previa de la función de registro de auditoría, que se lanzará oficialmente en v0.3.0.
UseDB
Solucionar situaciones de errores
-
PHP 8.0 pdo lanza una excepción
transaction not active
Cuando el cliente Mysql envía el resultado de la ejecución de sql al usuario, si no hay anomalías en la ejecución, el primer paquete enviado es OKPacket, y hay un indicador en este paquete para identificar si la solicitud de sql está en una transacción. Como se muestra abajo:
El contenido de este paquete es:
07 00 00 // 前 3 个字节表示 payload 的长度为 7 个字节 01 // sequence 响应的序号,前 4 个字节一起构成了 OKPacket 的 header 00 // 标识 payload 为 OKPacket 00 // affected row 00 // last insert id 03 00 // 状态标志位 00 00 // warning 数量
Las versiones anteriores de dbpack establecieron el bit indicador en 0, el controlador mysql anterior a java, golang, .net core y php 8.0 pueden coordinar correctamente las transacciones, y el controlador pdo de php 8.0 verificará el bit indicador, por lo que la versión anterior a php 8.0 está en Se lanza una excepción cuando se usa dbpack para coordinar transacciones distribuidas .
transaction not active
-
Excepción de deserialización del algoritmo de equilibrio de carga
Esta excepción hace que las solicitudes de consulta dividida de lectura y escritura se ejecuten entre bases de datos con un algoritmo aleatorio.
-
otros errores
nuevas características
Usar sugerencia para personalizar el enrutamiento de solicitudes de consulta UseDB
P.ej:
SELECT /*+ UseDB('employees-master') */ emp_no, birth_date, first_name, last_name, gender, hire_date FROM employees WHERE emp_no = ?
Agregue una anotación a la solicitud de consulta. El parámetro de la anotación es el nombre de la fuente de datos y puede especificar a qué fuente de datos se enruta la solicitud SQL para su ejecución. UseDB
Función de vista previa
Esta versión agrega la función de registro de auditoría. Se puede habilitar agregándolo a la configuración , por ejemplo: AuditLogFilter
filters:
- name: auditLogFilter
kind: AuditLogFilter
conf:
audit_log_dir: /var/log/dbpack/
# unit MB
max_size: 300
# unit Day
max_age: 28
# maximum number of old log files to retain
max_backups: 1
# determines if the rotated log files should be compressed using gzip
compress: true
# whether to record the audit log before or after the sql request is actually executed
record_before: true
Cuando está habilitado, DBPack registra registros de auditoría en el siguiente formato:
[timestamp],[username],[ip address],[connection id],[command type],[command],[sql text],[args],[affected row]
El registro es el siguiente:
2022-06-14 07:15:44,dksl,172.18.0.1:60372,1,COM_QUERY,,SET NAMES utf8mb4,[],0
2022-06-14 07:15:45,dksl,172.18.0.1:60372,1,COM_STMT_EXECUTE,INSERT,INSERT INTO employees ( emp_no, birth_date, first_name, last_name, gender, hire_date ) VALUES (?, ?, ?, ?, ?, ?),['100000' '1992-01-07' 'scott' 'lewis' 'M' '2014-09-01'],1
2022-06-14 07:15:45,dksl,172.18.0.1:60372,1,COM_STMT_EXECUTE,DELETE,DELETE FROM employees WHERE emp_no = ?,['100000'],1
2022-06-14 07:15:45,dksl,172.18.0.1:60372,1,COM_STMT_EXECUTE,INSERT,INSERT INTO employees ( emp_no, birth_date, first_name, last_name, gender, hire_date ) VALUES (?, ?, ?, ?, ?, ?),['100001' '1992-01-07' 'scott' 'lewis' 'M' '2014-09-01'],1
2022-06-14 07:15:45,dksl,172.18.0.1:60372,1,COM_STMT_EXECUTE,SELECT,SELECT emp_no, birth_date, first_name, last_name, gender, hire_date FROM employees WHERE emp_no = ?,['100001'],0
ilustrar
Planes de la próxima versión:
-
V0.3.0
Registro de auditoría, seguimiento de enlace de solicitud de SQL
-
V0.4.0
Cifrado y descifrado de datos confidenciales, limitación de corriente, fusión
-
V0.5.0
Función de sub-biblioteca y sub-tabla
La versión v0.2.0 lanzada esta vez puede resolver los requisitos de transacciones distribuidas del usuario y los requisitos de separación de lectura y escritura. Las dos funciones se pueden usar en combinación sin invadir el negocio del usuario, y la experiencia es muy fluida.
Los entusiastas del código abierto pueden unirse a nosotros en la construcción de la comunidad DBPack, unirse a grupos o participar en la construcción de la comunidad, comuníquese a través de WeChat: scottlewis.
Enlace
- paquete de base de datos: https://github.com/CECTC/dbpack
- Muestras de dbpack: https://github.com/CECTC/dbpack-samples
- dbpack-doc: https://github.com/CECTC/dbpack-doc
- Diseño de transacciones distribuidas impulsadas por eventos: https://mp.weixin.qq.com/s/r43JvRY3LCETMoZjrdNxXA
- Vídeo de introducción: https://www.bilibili.com/video/BV1cg411X7Ek