He leído la siguiente frase en un sitio web:
En lugar de agregar nuevos campos a un tipo de contenido, agregar campos existentes es una mejor opción para reducir la complejidad del sistema y mejorar la escalabilidad.
Y surgen algunas dudas.
En el sistema que estamos desarrollando, tenemos la posibilidad de reutilizar un campo en 3 o 4 tipos de contenido, pero en lugar de mejorar la escalabilidad como dice la frase citada, me temo que disminuirá, porque la tabla del campo se convertiría más rápidamente en un cuello de botella. (Al menos ese es mi razonamiento en este caso, ya que todos los valores de ese campo juntos, serían un par de millones por año y eso haría que la tabla sea demasiado grande). ¿Estás de acuerdo?
¿Cuántas filas sería un máximo sensato para apuntar cuando se está haciendo arquitectura? De esa forma, podríamos decidir cuándo reutilizar los campos y cuándo crear nuevos (aunque la posibilidad de reutilizar está allí).
fuente
Respuestas:
La cantidad de datos en un campo generalmente no es un problema. Si le preocupa eso, busque complementos de almacenamiento de campo alternativos o escriba el suyo. Por ejemplo , MongoDB , que puede manejar casi cualquier cosa que le pongas. Por ejemplo, se usa en http://examiner.com .
Un verdadero problema sin embargo es el número de campos que tiene. Debido a que actualmente en Drupal 7, la configuración de campo completa de todos los campos, sin importar si están cargados o no, se obtiene del caché en cada solicitud.
He visto sitios con más de 250 campos, donde cargar y deserializar la configuración del campo requiere más de 13 MB de memoria.
Editar: el caché de información de campo se ha mejorado (consulte http://drupal.org/node/1040790 para más detalles) con Drupal 7.22, solo los campos de los paquetes que se muestran en una página determinada se cargan desde el caché y se cargan entradas de caché separadas. Eso solo funciona si no hay llamadas API incorrectas que soliciten instancias en varios paquetes.
fuente
Estoy totalmente de acuerdo con berdir. Aquí están mis experiencias con un proyecto con millones de filas y 30-40 campos en algunos tipos de nodos.
fuente
Si está realmente preocupado por lo que sucederá, entonces creo que una simulación está en orden.
Obtenga una cuenta en Rackspace Cloud, Amazon, Linode o en cualquier otro lugar donde pueda activar fácilmente un VPS. Haz dos instancias idénticas. Instale Drupal en cada uno. Cree algunos tipos de contenido ficticio y configure los campos de una manera en un sistema y de otra manera en el otro. Use el módulo de desarrollo para crear una gran cantidad de contenido. Ajuste la configuración de rendimiento para asegurarse de que Drupal esté almacenando en caché según sea necesario. Ejecute mysqltuner y ajuste MySQL en cada una de las recomendaciones. Verifique la configuración de PHP y APC para que no esté presionando el intercambio y que no esté agitando el caché de APC.
Una vez que obtenga una buena configuración de referencia para cada uno, comience a simular el tráfico (tanto visitantes normales como actualizaciones de administrador) con wget y drush, y luego haga un perfil.
Las simulaciones nunca son perfectas, pero pueden ayudarlo a avanzar en la dirección correcta.
fuente
Un problema con la escalabilidad en los campos en el uso de índices en cada campo de tabla individual en cada campo en la tabla creada. El índice agrupado de la clave primaria es un compuesto de la mayoría de los campos, luego creó índices separados en cada campo individual. Los índices crean una tonelada de escrituras generales para la base de datos, y en la mayoría de los casos nunca se usan.
fuente
Otro consejo: tener muchos campos también causará problemas con muchos módulos diferentes. La GUI de token, por ejemplo, hará que su navegador se demore por minutos si intenta editar alias de URL, por ejemplo. Este comportamiento se puede ver en todas las páginas donde se cargará y mostrará el token (incluido el desarrollo - dpm () etc.)
No hay beneficio de rendimiento al dividir estos datos en varias tablas cuando se usa InnoDB (MyISAM es diferente debido al bloqueo de la tabla). Entonces, si sabe que tendrá muchos tipos de contenido similares con campos similares (cuyas configuraciones también serán las mismas, tal vez solo difieran en el etiquetado) ¡reutilice sus campos!
También podría facilitar la creación de plantillas debido a atributos de nodo similares.
fuente
Solo compartiendo mi historia, estamos usando Drupal Commerce y tenemos alrededor de 40 campos en nuestras variaciones de productos (Sku) y luego otros 460 (sí, locos) en nuestra Exhibición de productos. Teníamos algunas vistas de comparación de productos que examinarían todos estos campos. Sin el almacenamiento en caché, ¡algunas cargas de página pueden demorar hasta un minuto!
Sin embargo, funcionó. Si usó el almacenamiento en caché y el barniz, el tiempo de espera del usuario no fue tan malo.
El principal problema con el que nos encontramos con tantos campos es con Display Suite, ya que sería muy lento (a veces no respondería) si intentáramos reorganizar o mover un campo.
Afortunadamente, decidimos refactorizar nuestros productos un poco para que podamos obtener nuestro número máximo de campos en el rango 200-250 para nuestros productos más complejos (estamos en instrumentación científica, por lo que se necesitan mediciones y especificaciones complejas) .
fuente
Es una pregunta interesante. He pensado en esto antes, a veces reutilizar un campo puede ser conveniente para no tener un montón de campos similares 'por ahí', pero parece una tontería tener un cierto tipo de contenido que tiene que seleccionar de una gran carga de datos que saber no está destinado a ser devuelto en el resultado.
Necesitaría un poco más de información sobre el proyecto para asesorar sobre las mejores prácticas para escalar. ¿Cuál es el tráfico esperado, cuántos de esos usuarios deben iniciar sesión, etc.? Por ejemplo, si todo el tráfico, excepto el de sus usuarios administradores, no está autenticado y se almacena en caché de forma anónima
fuente
Hasta ahora siempre he reutilizado campos, pero ahora estoy considerando usar campos únicos por tipo de nodo para un nuevo proyecto. De hecho, quiero mantener todo bien separado (campos, vistas, reglas, contextos, etc.) para cada paquete de entidades. Entonces planteó la cuestión de la escalabilidad que me llevó hasta aquí. La edición de Berdir me consuela (la caché de información de campo se ha mejorado (consulte http://drupal.org/node/1040790 para más detalles) con Drupal 7.22, solo se cargan los campos de paquetes que se muestran en una página determinada el caché y son entradas de caché separadas. Eso solo funciona si no hay llamadas API incorrectas que soliciten instancias en múltiples paquetes).
Solo quiero señalar que hay un módulo muy interesante que he estado usando durante meses en sitios múltiples y complejos: https://www.drupal.org/project/render_cache . Es una de esas gemas ocultas en mi opinión.
Como dice en la página del proyecto, la parte de comentarios en realidad se está utilizando en el propio DO.
Entonces, con todo eso en mente, ¿convertiría el consenso a favor de campos separados? Sin embargo, la advertencia que se menciona sobre DS todavía es un fastidio. Es súper molesto la forma en que ahorra a través de ajax en lugar de, por ejemplo, la forma en que la interfaz de administración del bloque central maneja el reordenamiento. Sin embargo, creo que es un problema de DS ...
fuente
Según mi sugerencia, es una buena idea usar los mismos campos en un tipo de contenido separado. Porque mejorará el rendimiento de su sitio. En Drupal 7, cuando está utilizando la operación de selección en ese momento, el uso de los mismos campos en el tipo de contenido es realmente útil para su sitio Drupal7.
fuente