Mi proyecto actual es una base de datos de etiquetas avanzada con funciones de recuperación booleana. Los registros se va a consultar con expresiones booleanas como tales (por ejemplo, en una base de datos de música):normaliza la expresión booleana por razones de almacenamiento en caché. ¿hay una manera más eficiente que las tablas de verdad?
funky-music and not (live or cover)
que debe rendir toda música funky en la base de datos de música, pero no vivir o versiones de las canciones.
Cuando se trata de almacenar en caché, el problema es que existen consultas que son equivalentes pero de estructura diferente. Por ejemplo, la aplicación de la regla de Morgan la consulta anterior podría escribirse así:
funky-music and not live and not cover
lo cual produciría exactamente los mismos registros, pero de causa caché de descanso cuando se pondría en práctica mediante hash de la cadena de consulta, por ejemplo, el almacenamiento en caché.
Por lo tanto, mi primera intención fue crear una tabla de verdad de la consulta que luego podría usarse como clave de almacenamiento en caché como expresiones equivalentes de la misma tabla de verdad. Desafortunadamente, esto no es posible ya que la tabla de verdad crece exponencialmente con el número de entradas (etiquetas) y no quiero limitar el número de etiquetas utilizadas en una consulta.
Otro enfoque podría ser atravesar el árbol de sintaxis aplicando reglas definidas por el álgebra booleana para formar una representación normalizada (mínima) que también parece ser difícil.
Por lo tanto, la pregunta general es: ¿existe una forma practicable de implementar el reconocimiento de consultas equivalentes sin la necesidad de circuit minimization o tablas de verdad (edición: o cualquier otro algoritmo que sea NP-hard)?
El ne plus ultra reconocería las subconsultas ya en caché, pero ese no es el objetivo principal.
utilice la tecla bit a bit, p. Ej. establecer bit 0 si funky | bit 6 0 = live/1 = studio | bit 8 rap | bit 9 pop luego utiliza operaciones bit a bit para determinar la representación de clave en la consulta tiene sentido? – Dan
este es un patrón común entre desarrolladores móviles - createScreen (long style_element) donde long style_element es el resultado final de dichas manipulaciones bit a bit y dicta elementos de estilo indescriptibles (verdaderamente lol) para dicho objeto Screen – Dan
Esto sería una forma eficiente de memoria para almacenar la información en la base de datos. Pero ese es un tema completamente diferente. – user733321