soy nuevo en mongodb y desbordamiento de pila.

Quiero saber por qué en mongodb ID de la colección es de 24 caracteres hexadecimales?
¿cuál es la importancia de que?

La documentación oficial es un buen lugar para empezar: ObjectId
El valor predeterminado identificador único generado para una clave principal (_id) es una ObjectId. Este es un 12 bytes valor binario que es a menudo representado como un 24 caracteres hex. Si usted tiene más adecuado identificador único para el uso, usted puede proporcionar su propio valor para _id. La importancia de un ObjectId es que los únicos valores que pueden ser generados en un sistema distribuido (normalmente por el controlador de cliente). Esto es similar a Guid, aunque de forma más compacta.

OriginalEl autor ashish bandiwar | 2014-08-18

1 Comentario

  1. 13

    ¿Por qué es el valor predeterminado _id 24 caracteres hex?

    El valor predeterminado identificador único generado como los de clave principal (_id) para un MongoDB documento es una ObjectId. Esta es una de las 12 byte valor binario que es a menudo representado como un 24 de caracteres cadena hexadecimal, y uno de los estándar de tipos de campo apoyado por la MongoDB HIJO de la especificación.

    Los 12 bytes de un ObjectId se construyen utilizando:

    • un 4 byte valor que representa los segundos desde la época Unix
    • un 3 byte identificador de la máquina
    • un 2 byte identificador de proceso
    • un 3 bytes de contador (a partir de un valor aleatorio)

    ¿Cuál es la importancia de un ObjectId?

    ObjectIds (o similar identificadores generados según un GUID fórmula) permitir que los identificadores únicos a ser generado de forma independiente en un sistema distribuido.

    La capacidad independientemente de generar un IDENTIFICADOR único se convierte en muy importante, ya que la escala a varios servidores de aplicaciones (o quizás varias base de datos de los nodos en una sharded clúster). Usted no quiere tener una central de coordinación de cuello de botella como una secuencia de mostrador (por ejemplo. como puede haber un incremento automático de la clave principal), y se desea insertar nuevos documentos sin riesgo de que un nuevo identificador que va a ser un duplicado.

    Un ObjectId generalmente se genera por su MongoDB controlador de cliente, pero también puede ser generado en el servidor de MongoDB si su controlador de cliente o el código de la aplicación o todavía no ha añadido una _id campo.

    ¿Tengo que usar el valor predeterminado ObjectId?

    No. Si usted tiene más adecuado identificador único para el uso, usted siempre puede proporcionar su propio valor para _id. Esto puede ser un único valor o un compuesto, valor con varios campos.

    Las principales limitaciones en _id valores que tienen que ser único para una colección y no se puede actualizar o eliminar la _id de un documento existente.

    Y es que en 4 valor de byte sin signo? Si no MongoDB tendrá que hacer una revisión en unos 22 años…
    ObjectIds actualmente uso un entero de 32 bits int (es decir, unixtime), de modo que usted está en lo correcto de que el componente de tiempo de rodar con el tiempo (véase también: ¿Qué pasará con ObjectIDs en el año 2038?). Generado ObjectIds debe continuar ser único (byte sabio) por un tiempo después de rollover, pero en ciertos supuestos (como la realización de pedidos por un monótonamente creciente de tiempo de prefijo) dejarían de ser cierto. Supongo que habrá un reemplazo ObjectId subtipo introducido antes de entonces :).
    Creo que el unixtime componente fue incluido originalmente para la unicidad y áspero de un pedido de los generados ObjectIds, y no para incrustar una marca de tiempo en defecto _ids (aunque, sin duda, los desarrolladores han hecho suposiciones sobre la marca de hora de aspecto desde entonces). Ha habido varios ObjectId variaciones ya, como el implementado por diferentes legado de los controladores (consulte el «subtipos» en el HIJO de especificaciones o como está escrito en UUID en Robomongo).
    FIRMADO? Por qué? Ellos no necesitan un seguimiento del tiempo antes de la época!
    Véase también: tiempo de unix: «tiempo de Unix es una sola firmado número entero que se incrementa cada segundo». Supongo que «parecía una buena idea en el momento en que» el núcleo de Unix devs (similar a la elección del 1-Ene-1970 como la época unix). El uso en el ObjectId de generación es el siguiente establecida la convención para la conveniencia. El general ObjectId quiere ser generada de forma exclusiva, pero como se señaló, no creo que necesariamente tiene que incrustar una marca de tiempo. Usted también es libre de utilizar sus propios identificadores únicos para _id en lugar de la predeterminada ObjectId.

    OriginalEl autor Stennie

Dejar respuesta

Please enter your comment!
Please enter your name here