nosql - pricing - Uso de un contador Incremento para generar claves únicas en un clúster de Couchbase
couchbase vs mongodb (1)
En primer lugar, de acuerdo con las funciones de la documentación de la base de datos, las funciones increment
y decremant
son "atómicas" dentro del clúster. Entonces, si los usa para generar "autoincrement", todo debería funcionar bien.
Pero si quiere asegurarse de que mientras guarda un nuevo elemento en la base de datos no anulará los existentes (situación como "AMBAS instancias de Couchbase podrían devolver 1501") puede usar la operación de tienda con StoreMode.Add
. Entonces, si llama al mismo tiempo a couchbase.store(StoreMode.Add, "request:1501",value)
, una solicitud finalizará con éxito, otra fallará y podrá detectar este "error" y tratar de repetir la operación de la tienda de nuevo (con obtener nueva identificación autoincrementada para la nueva clave)
La pregunta más común que escucho sobre Couchbase y otras bases de datos NoSQL es cómo generar claves únicas para los registros, o más específicamente, cómo replicar la característica INCREMENTO AUTOMÁTICO de las bases de datos de relaciones comunes.
La solución en Couchbase a menudo mencionada es la función de incremento, donde puede llamar al incremento en una tecla numérica y generará un nuevo número único en secuencia.
Mi pregunta al respecto es que no puedo entender el enorme problema que preveo en lo que respecta a la replicación.
Considere que tiene un clúster de tres nodos de Couchbase y está almacenando un registro de solicitud. Desea ingresar este registro para que cree una entrada llamada "requestlog_counter".
Ahora digamos que tenemos 4 nodos web, cada uno recibe 20 solicitudes por segundo y cada uno de ellos debe registrarse como "request :: {ID})". Eso es 80 solicitudes por segundo.
Diga que los nodos 1 y 3 tienen un poco de latencia de red, pero ambos reciben una de estas 40 solicitudes al mismo tiempo. Su secuencia de comandos incrementa el contador de solicitudes (digamos que para este ejemplo actualmente está en 1500) y obtiene una ID. Seguramente ahora es posible que AMBAS instancias de Couchbase puedan devolver 1501 a los nodos web 1 y 3 y ambos servidores intentarán ahora almacenar la solicitud con la que están tratando como "solicitud: 1501".
Ahora, la replicación se ocupará de esto y, esencialmente, ganará la última. Pero ahora ha perdido el registro de una solicitud.
Entonces, ¿eso significa que en realidad necesita una mejor forma de codificar datos vitales y que el uso de incrementos automáticos para valores absolutos y la generación de claves únicas es algo que debería evitarse en un entorno de clúster NoSQL?
O bien, ¿hay algo que pueda hacer como parte de su procedimiento de generación de claves que lo hace 100% confiable?
Considere también un entorno de clúster múltiple con la replicación cruzada del centro de datos.
Gracias.
Micro