Versión 1.3.2.1 del motor de Amazon Neptune (20/06/2024)
A partir del 20 de junio de 2024, se implementará de forma general la versión 1.3.2.1 del motor. Tenga en cuenta que las versiones nuevas tardan unos días en estar disponibles en todas las regiones.
nota
En la versión 1.3.0.0 del motor, se introdujo un nuevo formato para los grupos de parámetros personalizados y los grupos de parámetros de clústeres personalizados. En consecuencia, si va a actualizar una versión de motor anterior a la 1.3.0.0 a una versión de motor 1.3.0.0 o posterior, debe volver a crear todos los grupos de parámetros personalizados y los grupos de parámetros de clúster personalizados existentes utilizando la familia de grupos de parámetros neptune1.3. En las versiones anteriores, se utilizaba la familia de grupos de parámetros neptune1 o neptune1.2, y esos grupos de parámetros no funcionan con la versión 1.3.0.0 y las versiones posteriores. Del mismo modo, debe utilizar los grupos de parámetros de clúster 1.4.0.0 para las versiones de motor 1.4.0.0 y superiores. Para obtener más información, consulte Grupos de parámetros de Amazon Neptune.
aviso
La versión 1.3.2.1 del motor introdujo algunos problemas potenciales que debe tener en cuenta. Para obtener más información, consulte la siguiente sección Mitigación de problemas en la versión 1.3.2.1.
Defectos corregidos en esta versión del motor
Correcciones de openCypher
-
Se detectó un error en la característica de caché del plan de consultas para las consultas parametrizadas que contienen una cláusula
WITHinterna conSKIPyLIMITcomo parámetros. Los valores SKIP/LIMIT no estaban debidamente parametrizados y, como resultado, las ejecuciones posteriores del mismo plan de consultas en caché con valores de parámetros diferentes seguían devolviendo los mismos resultados que la primera ejecución. Este problema se ha resuelto.# insert some nodes UNWIND range(1, 10) as i CREATE (s {name: i}) RETURN s # sample query MATCH (p) WITH p ORDER BY p.name SKIP $s LIMIT $l RETURN p.name as res # first time executing with {"s": 2, "l": 1} { "results" : [ { "res" : 3 } ] } # second time executing with {"s": 2, "l": 10} # due to bug, produces { "results" : [ { "res" : 3 } ] } # with fix, produces correct results: { "results" : [ { "res" : 3 }, { "res" : 4 }, { "res" : 5 }, { "res" : 6 }, { "res" : 7 }, { "res" : 8 }, { "res" : 9 }, { "res" : 10 } ] }% -
Se ha corregido un error por el que las consultas de mutación parametrizadas emitían una excepción
InternalFailureExceptioncuando el parámetro que se pasaba aún no se encontraba en la base de datos. -
Se ha corregido un error por el que las consultas de Bolt parametrizadas se bloqueaban tras alcanzar una condición de carrera durante la limpieza de recursos de consulta.
Cambios en 1.3.2.1 heredados de 1.3.2.0
Mejoras heredadas de la versión 1.3.2.0 del motor
Mejoras generales
-
Compatibilidad con la versión 1.3 de TLS, incluidos los conjuntos de cifrados TLS_AES_128_GCM_SHA256 y TLS_AES_256_GCM_SHA384. La versión 1.3 de TLS es opcional; la versión 1.2 de TLS sigue siendo la mínima.
-
La compatibilidad ampliada de openCypher con el formato de fecha y hora se encuentra en lab_mode en esta versión. Le animamos a que la pruebe.
Mejoras de Gremlin
-
Actualización a TinkerPop 3.7.x
-
Proporciona una gran ampliación del lenguaje Gremlin.
-
Nuevos pasos para procesar cadenas, listas y fechas.
-
Nueva sintaxis para especificar la cardinalidad en el paso
mergeV(). -
union()ahora se puede utilizar como paso inicial. -
Para obtener más información sobre los cambios en la versión 3.7.x, consulte la documentación de actualización de TinkerPop
.
-
-
Al actualizar los controladores del lenguaje Gremlin del cliente para Java, tenga en cuenta que las clases de serializadores han cambiado de nombre
. Deberá actualizar los nombres de los paquetes y las clases en los archivos de configuración y en el código, si se especifica.
-
-
StrictTimeoutValidation(solo cuando se habilita a través del modo de laboratorioStrictTimeoutValidationmediante la inclusión deStrictTimeoutValidation=enabled): cuando el parámetroStrictTimeoutValidationtiene un valorenabled, un valor de tiempo de espera por consulta especificado como una opción de solicitud o una sugerencia de consulta no puede superar el valor establecido globalmente en el grupo de parámetros. En tal caso, Neptune generará una excepciónInvalidParameterException. Esta configuración se puede confirmar en una respuesta en el punto de conexión/statuscuando el valor esdisabled, y en las versiones 1.3.2.0 y 1.3.2.1 de Neptune, el valor predeterminado de este parámetro esDisabled.
Mejoras de openCypher
-
La versión 1.3.2.0 del motor de Amazon Neptune ofrece un rendimiento hasta 9 veces más rápido y 10 veces superior en las consultas de openCypher en comparación con las versiones anteriores del motor.
-
Consultas de baja latencia y mejora del rendimiento: mejoras generales del rendimiento en las consultas de openCypher de baja latencia. La nueva versión también mejora el rendimiento de dichas consultas. Las mejoras son más significativas cuando se utilizan consultas parametrizadas.
-
Compatibilidad con la caché de planes de consultas: cuando se envía una consulta a Neptune, la cadena de consulta se analiza, optimiza y transforma en un plan de consulta que, después, el motor ejecuta. Las aplicaciones suelen estar respaldadas por patrones de consulta comunes para los que se crean instancias con diferentes valores. La caché de planes de consultas puede reducir la latencia general al almacenar en caché los planes de consulta y, por lo tanto, evitar el análisis y la optimización de dichos patrones repetidos. Consulte Memoria caché de planes de consultas en Amazon Neptune para obtener más detalles.
-
Mejora del rendimiento en consultas de agregación DISTINCT.
-
Mejora del rendimiento en uniones que incluyen variables que admiten valores null.
-
Mejora del rendimiento en consultas que incluyen el predicado not equals to id (node/relationship).
-
Compatibilidad ampliada con la funcionalidad de fecha y hora (solo habilitada a través del modo de laboratorio
DatetimeMillisecondmediante la inclusión deDatetimeMillisecond=enabled). Para obtener más información, consulte Compatibilidad temporal en la implementación de openCypher con Neptune (Neptune Analytics y Neptune Database 1.3.2.0 y posteriores).
Corrección de defectos heredados de la versión 1.3.2.0 del motor
Mejoras generales
-
Se ha actualizado el mensaje de error de Neptune ML en la validación del acceso a los buckets de Graphlytics.
Correcciones de Gremlin
-
Se ha corregido la información de etiqueta que faltaba en la traducción de las consultas del DFE, en los casos en los que los pasos que no contribuían a la ruta contenían etiquetas. Por ejemplo:
g.withSideEffect('Neptune#useDFE', true). V(). has('name', 'marko'). has("name", TextP.regex("mark.*")).as("p1"). not(out().has("name", P.within("peter"))). out().as('p2'). dedup('p1', 'p2') -
Se ha corregido el error
NullPointerExceptionen la traducción de las consultas del DFE, que se producía cuando una consulta se ejecutaba en dos fragmentos del DFE y el primer fragmento se optimizaba para convertirla en un nodo insatisfactorio. Por ejemplo:g.withSideEffect('Neptune#useDFE', true). V(). has('name', 'doesNotExists'). has("name", TextP.regex("mark.*")). inject(1). V(). out(). has('name', 'vadas') -
Se ha corregido un error por el que Neptune podía generar una excepción
InternalFailureExceptioncuando una consulta contenía ValueTraversal en el modulador by() y su entrada era Map. Por ejemplo:g.V(). hasLabel("person"). project("age", "name").by("age").by("name"). order().by("age")
Correcciones de openCypher
-
Se han mejorado las operaciones UNWIND (por ejemplo, ampliar una lista de valores para convertirla en valores individuales) con el fin de ayudar a evitar situaciones de falta de memoria (OOM). Por ejemplo:
MATCH (n)-->(m) WITH collect(m) AS list UNWIND list AS m RETURN m, list -
Se ha corregido la optimización del ID personalizado cuando se realizan varias operaciones MERGE en las que el ID se inserta mediante UNWIND. Por ejemplo:
UNWIND [{nid: 'nid1', mid: 'mid1'}, {nid: 'nid2', mid: 'mid2'}] as ids MERGE (n:N {`~id`: ids.nid}) MERGE (m:M {`~id`: ids.mid}) -
Se ha corregido el problema de la pérdida de memoria al planificar consultas complejas con acceso a propiedades y varios saltos con relaciones bidireccionales. Por ejemplo:
MATCH (person1:person)-[:likes]->(res)-[:partOf]->(group)-[:knows]-(:entity {name: 'foo'}), (person1)-[:knows]->(person2)-[:likes]-(res2), (comment)-[:presentIn]->(:Group {name: 'barGroup'}), (person1)-[:commented]->(comment2:comment)-[:partOf]->(post:Post), (comment2)-[:presentIn]->(:Group {name: 'fooGroup'}), (comment)-[:contains]->(info:Details)-[:CommentType]->(:CommentType {name: 'Positive'}), (comment2)-[:contains]->(info2:Details)-[:CommentType]->(:CommentType {name: 'Positive'}) WHERE datetime('2020-01-01T00:00') <= person1.addedAfter <= datetime('2023-01-01T23:59') AND comment.approvedBy = comment2.approvedBy MATCH (comment)-[:contains]->(info3:Details)-[:CommentType]->(:CommentType {name: 'Neutral'}) RETURN person1, group.name, info1.value, post.ranking, info3.value -
Se han corregido las consultas de agregación con valores null agrupados por variables. Por ejemplo:
MATCH (n) RETURN null AS group, sum(n.num) AS result
Correcciones de SPARQL
-
Se ha corregido el analizador de SPARQL para mejorar el tiempo de análisis de consultas grandes, como INSERT DATA, que contienen muchos triples y tokens grandes.
Mitigación de problemas en la versión 1.3.2.1
-
Las consultas que utilizan valores de filtro numéricos pueden devolver resultados incorrectos cuando se utiliza la caché de planes de consultas. Para evitar este problema, utilice la sugerencia de consulta
QUERY:PLANCACHE "disabled"para omitir la caché de planes de consultas. Por ejemplo, utiliceUSING QUERY:PLANCACHE "disabled" MATCH (n:person) WHERE n.yearOfBirth > $year RETURN n parameters={"year":1950} -
Las consultas que utilizan el mismo nombre de parámetro varias veces pueden fallar y generar el error
Parameter name should not be a number and/or contain _internal_ or _modified_user_ string within it. These are reserved for planCache. Otherwise, rerun with HTTP parameter planCache=disabled. En estos casos, puede omitir la memoria caché de planes de consultas, como se ha indicado anteriormente, o duplicar los parámetros, como en este ejemplo:MATCH (n:movie) WHERE n.runtime>=$minutes RETURN n UNION MATCH (n:show) WHERE n.duration>=$minutes RETURN n parameters={"minutes":130}Utilice la sugerencia
QUERY:PLANCACHE "disabled"o modifique los parámetros:MATCH (n:movie) WHERE n.runtime>=$rt_min RETURN n UNION MATCH (n:show) WHERE n.duration>=$dur_min RETURN n parameters={"rt_min":130, "dur_min":130} -
Las consultas ejecutadas con el protocolo Bolt pueden producir resultados incorrectos si la consulta es una consulta UNION o UNION ALL. Para evitar este problema, considere la posibilidad de ejecutar la consulta en cuestión con el punto de conexión HTTP. Como alternativa, ejecute cada parte de la unión por separado cuando utilice el protocolo Bolt.
Versiones de lenguaje de consulta admitidas en esta versión
Antes de actualizar un clúster de base de datos a la versión 1.3.2.1, asegúrese de que el proyecto sea compatible con estas versiones de lenguaje de consulta:
Compatible con la primera versión de Gremlin:
3.7.1Compatible con la última versión de Gremlin:
3.7.1Versión de openCypher:
Neptune-9.0.20190305-1.0Versión de SPARQL:
1.1
Rutas de actualización a la versión 1.3.2.1 del motor
Puede actualizar a esta versión desde la versión 1.2.0.0 o superior del motor.
Actualización a esta versión
Si un clúster de base de datos ejecuta una versión de motor desde la que existe una ruta de actualización a esta versión, puede actualizarse ahora. Puede actualizar cualquier clúster que cumpla los requisitos mediante las operaciones del clúster de base de datos de la consola o mediante el SDK. El siguiente comando de la CLI actualizará inmediatamente un clúster que cumpla los requisitos:
Para Linux, OS X o Unix:
aws neptune modify-db-cluster \ --db-cluster-identifier(your-neptune-cluster)\ --engine-version 1.3.2.1 \ --allow-major-version-upgrade \ --apply-immediately
Para Windows:
aws neptune modify-db-cluster ^ --db-cluster-identifier(your-neptune-cluster)^ --engine-version 1.3.2.1 ^ --allow-major-version-upgrade ^ --apply-immediately
En lugar de --apply-immediately, puede especificar --no-apply-immediately. Para realizar una actualización de versión principal, es necesario el parámetro allow-major-version-upgrade. Además, asegúrese de incluir la versión del motor, ya que es posible que el motor se actualice a otra versión.
Si el clúster utiliza un grupo de parámetros del clúster personalizado, asegúrese de incluir este parámetro para especificarlo:
--db-cluster-parameter-group-name(name of the custom DB cluster parameter group)
Del mismo modo, si alguna instancia del clúster utiliza un grupo de parámetros de base de datos personalizado, asegúrese de incluir este parámetro para especificarlo:
--db-instance-parameter-group-name(name of the custom instance parameter group)
Realice siempre una prueba antes de realizar la actualización
Cuando se publique una nueva versión principal o secundaria del motor de Neptune, pruebe siempre las aplicaciones de Neptune en ella antes de actualizar. Incluso en una actualización secundaria podría haber nuevas características o comportamientos que podrían afectar al código.
Comience por comparar las páginas de notas de la versión actual con las de la versión de destino para ver si hay cambios en las versiones del lenguaje de consulta u otros cambios importantes.
La mejor forma de probar una nueva versión antes de actualizar el clúster de base de datos de producción es clonar el clúster de producción para que el clon ejecute la nueva versión del motor. A continuación, puede ejecutar consultas en el clon sin que eso afecte al clúster de base de datos de producción.
Cree siempre una instantánea manual antes de realizar la actualización
Antes de realizar una actualización, se recomienda crear siempre una instantánea manual del clúster de base de datos. Una instantánea automática solo ofrece protección a corto plazo, mientras que una instantánea manual está disponible hasta que la elimine explícitamente.
En algunos casos, Neptune crea una instantánea manual para usted como parte del proceso de actualización, pero no debe confiar en eso y crear su propia instantánea manual.
Cuando tenga la seguridad de que no necesitará revertir el clúster de base de datos al estado anterior a la actualización, puede eliminar de forma explícita la instantánea manual que ha creado, así como la instantánea manual que Neptune podría haber creado. Si Neptune crea una instantánea manual, tendrá un nombre que empieza por preupgrade, seguido del nombre del clúster de base de datos, la versión del motor de origen, la versión del motor de destino y la fecha.
nota
Si intenta realizar la actualización mientras hay una acción pendiente en proceso, es posible que se produzca un error como el siguiente:
We're sorry, your request to modify DB cluster (cluster identifier) has failed. Cannot modify engine version because instance (instance identifier) is running on an old configuration. Apply any pending maintenance actions on the instance before proceeding with the upgrade.
Si se produce este error, espere a que finalice la acción pendiente o active inmediatamente un periodo de mantenimiento para que se complete la actualización anterior.
Para obtener más información sobre la actualización de la versión del motor, consulte Mantenimiento del clúster de base de datos de Amazon Neptune. Si tiene alguna duda, el equipo de AWS Support está disponible en los foros de la comunidad y a través de AWS Premium Support