php mysql doctrine2 partitioning

php - Doctrine2 y MySQL Particionamiento



partitioning (2)

El motor de PARTICIÓN en MySQL tiene limitaciones importantes con respecto a las claves. Consulte los últimos documentos, actualmente aquí: http://dev.mysql.com/doc/refman/5.1/en/partitioning-limitations-partitioning-keys-unique-keys.html

Si Doctrine requiere claves que la partición no admite, está fuera de suerte. El motor de partición está muy limitado por su diseño: está diseñado para el almacenamiento de archivos que se lee con poca frecuencia. Pocas aplicaciones compatibles con MySQL funcionarán con Partition, a menos que realice cambios.

Yo sugeriría usar la partición como fue pensado - archivar. Almacenar sus datos en un motor de datos MySQL más convencional sería la respuesta.

¿Alguien tiene experiencia en el uso de la función de partición junto con la biblioteca Doctrine2?

El primer problema es que Doctrine crea claves foráneas para columnas de asociación, ¿alguien sabe cómo prevenir o deshabilitar eso?

¿Y el segundo problema es cómo especificar una definición de tabla personalizada (PARTICIÓN POR ...)?

¡Gracias por adelantado!


No estás de suerte !!

Primero , elimine todas las claves externas de todas las tablas que D2 está administrando. Copia y ejecuta el resultado de esta consulta:

SET SESSION group_concat_max_len=8192; -- // increase this if you do not see the full list of your tables SELECT IFNULL(REPLACE(GROUP_CONCAT(''ALTER TABLE '',TABLE_NAME,'' DROP FOREIGN KEY '',CONSTRAINT_NAME,''; ''), '','', ''''), '''') FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE=''FOREIGN KEY'';

Luego /vendor/doctrine-dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php método /vendor/doctrine-dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php supportsForeignKeyConstraints() en /vendor/doctrine-dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php (o donde sea que se encuentre esta clase) para:

public function supportsForeignKeyConstraints() { return false; }

Esto evitará que Doctrine cree restricciones de clave foránea en su próxima doctrine:schema:update comando de doctrine:schema:update . Después de eso, simplemente puede ejecutar una instrucción ALTER TABLE PARTITION BY... cuando sea necesario (D2 no admite la partición en un nivel de esquema). Le recomiendo que realice una copia de seguridad y trunca sus tablas primero (utilizando --no-create-info ) para que los cambios en la estructura se ejecuten lo más rápido posible y luego restaurarlos.

Como dice este compañero here , y en base a mi experiencia personal, a D2 no le importa si tiene FK o no, siempre y cuando existan las definiciones de relación adecuadas.

PD: Actualmente estoy trabajando en la extensión de la sintaxis de anotación para admitir las definiciones de tabla y columna adecuadas, incluido ENGINE ( this podría ser útil), PARTITION BY y la matriz de options @Column (es decir, {"fixed"=true, "unsigned"=true, "default"=0} fix {"fixed"=true, "unsigned"=true, "default"=0} )

El esfuerzo total equivale a un par de noches sin dormir para parches de código y de ingeniería inversa, espero que lo haga más rápido :)