¿Puedo prescindir de Entity-Attribute-Value?

Debe hacer algo similar a una tienda en línea. El problema está en elegir el método de almacenamiento de información sobre los bienes, ya que hay más de cien tipos de bienes y cada uno de ellos tiene su propio conjunto de atributos.

El mismo Magento Commerce para estos fines utiliza la estructura EAV, debido a la cual las solicitudes de selección se vuelven muy complicadas y no funcionan muy rápidamente. Hasta ahora, el único pensamiento es convertir periódicamente EAV en una tabla normal, de la cual se extraerán las muestras. ¿Hay una forma más eficiente dentro de MySQL o PostgreSQL?

También en el proceso de buscar una respuesta a esta pregunta, me reuní repetidamente con la opinión de que en este caso vale la pena rechazar la base relacional y cambiar a noSQL. ¿Qué tan cierto es esto y funcionará más rápido?

Respuestas
linda woodward
El problema de EAV es que cada campo se encuentra independientemente del objeto. Es decir La selección de 10 objetos de 10 campos hará aproximadamente 100 búsquedas aleatorias. Opciones de solución:
1. Tablas de memoria: búsqueda aleatoria rápida, tamaño limitado y la necesidad de sincronizar con datos reales.
2. Sphinx y otros como él. Además, almacenamos los datos en un formato más conveniente para la búsqueda facetada.
3. nosql: más fácil de escalar, los datos a menudo se almacenan en la memoria, la falta de un esquema, pero con la capacidad de crear índices en los campos.
Tal vez usted sabe, ¿nosql funcionará más rápido que EAV? Y en general, ¿cuál de las formas que sugirió es más rápida en la búsqueda por atributos, al menos en teoría? - cinta buku
Todo depende de la nosql específica y los datos específicos. En la mayoría de los casos, al menos no será más lento.
Si necesita velocidad garantizada, mire hacia la búsqueda de facetas utilizando Sphinx o Lucene / Solr. La implementación no será la más conveniente (aunque puede que ya haya algunas envolturas hermosas), pero la velocidad es mucho mayor. Pero tenga en cuenta que la búsqueda en este caso se realiza de acuerdo con rangos predeterminados: una solicitud como "precio de $ 42.34 a $ 123.45" no funcionará. - tamar agatha kapanadze
realizará aproximadamente 100 búsquedas aleatorias

Extraña declaración. Si toma el mismo MySQL, entonces tendrá una muestra, por ejemplo, después de una pasada a través de cada una de las 2 tablas (Entidad y Atributo) con índices. Es decir 100 campos para 2 pases en los índices. - lemmy
falta de un esquema, pero con la posibilidad de crear índices en los campos

Depende del DBMS. En algún lugar puedes. - cheeriolafs
bascha
Puede probar una variante con una entidad que tenga: un identificador, campos comunes (como costo y disponibilidad), un campo de búsqueda (valores de atributos concatenados a través de un separador salvaje) y un campo XML (o cualquier otro formato) en el que se almacenará toda la información .
A primera vista, muy bien. Gracias por la idea, tienes que pensar en ello. - nalitta
Por cierto, si el número de atributos es limitado, entonces puede hacer una tabla de entidad (id, num_attr_1, num_attr_2, str_attr_1, str_attr_2 etc.). Todas las columnas son anulables. Mantener el esquema separado (tipo de entidad). - patti kielt