Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

161
Visualizações
¿Cuál es la mejor solución para asignar un número de un rango muy grande de números?

Descripción del requisito

Hay un grupo del número 1 - 160 000 000.

Al crear un obj, debe asignar un número al obj. Hay algunas reglas

  1. el número dentro de la piscina
  2. el número no tomado por otro obj

Además, el usuario a veces especificará un número para usar para la creación de obj.

A continuación se presentan algunas soluciones, cada una tiene sus propios problemas, así que espero alguna solución mejor

Tenga en cuenta que aquí usamos mongo DB. No quiero cambiar la base de datos debido a este problema.

Solución 1

Generar una gran tabla(colección) con 160.000.000 artículos. La estructura de la colección es

 number,allocated

Cuando asigne un número, use el método find_one_and_update para actualizar un registro, cambie el asignado de falso a verdadero

tema

el problema de esta solución es que generar una colección de 160.000.000 es demasiado pesado

Solución 2

Similar a la solución 1 excepto que no generamos 160,000,000 a la vez. En cambio, generamos 1000 cada vez. Cuando se acaban estos 1000 registros, generamos otros 1000

tema

El problema es que el usuario puede especificar el número a veces. Por ejemplo, generamos 1000 registros en la colección, pero queremos usar el número 5000 en su lugar. Así que este es el problema ahora porque no lo generamos.

Solución 3

Cada vez que creamos un obj, generamos un número aleatorio entre 1 y 160 000 000 para este obj y lo guardamos en la base de datos.

tema

Es difícil evitar que el número aleatorio que generaste no se use previamente

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

La forma habitual de hacer esto es tener un contador atómico (fragmentado). El contador inicialmente tiene un valor de cero. Cuando se necesita un índice, se debe llamar a una API que incrementará atómicamente este contador y dará su valor anterior.

Si bien es probable que esto sea mucho más rápido que los enfoques que ha mencionado, es posible que aún no sea lo suficientemente rápido según sus necesidades. El cuello de botella en la situación anterior es el bloqueo único que se usa normalmente al hacer que el incremento sea atómico. Esto no es ideal en algunas situaciones distribuidas.

Uso de contadores fragmentados:

La forma habitual de aumentar el rendimiento en estos escenarios distribuidos es tener contadores fragmentados:

  1. Fragmenta el contador (divide el rango de valores 1..160,000,000 en N rangos separados).
  2. Tenga el mismo servicio de incremento atómico ejecutándose en N subprocesos/procesos/entidades/máquinas con N bloqueos diferentes.
  3. En función de alguna propiedad (tal vez la dirección del objeto o el hash de un objeto), elija uno de los rangos (en un sistema distribuido podría usar hash distribuido)
  4. Pregunte al servicio apropiado mencionado en (2) para el siguiente índice.

Lo anterior aumentará el rendimiento N -fold y probablemente se adaptará a las necesidades de su aplicación.

Algunas lecturas interesantes sobre contadores fragmentados se encuentran en este enlace .

Tenga en cuenta que si desea utilizar una generación de números aleatorios (Solución 3), puede optimizar la búsqueda de la existencia de una clave mediante Bloom Filters . Esto puede ser suficiente según sus necesidades de rendimiento.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda