¿Cómo hace YouTube un seguimiento de las identificaciones de video?

Supongo que podrían usar el filtro Bloom para verificar si no se toma la identificación. El filtro Bloom es un:

Estructura de datos probabilística de espacio eficiente, concebida por Burton Howard Bloom en 1970, que se utiliza para probar si un elemento es miembro de un conjunto

La consulta “¿Sale ID [matemática] x [/ matemática]” devuelve “posiblemente en el conjunto” o “definitivamente no en el conjunto”, es decir, son posibles coincidencias con falsos positivos pero no con falsos negativos.

Así es como probablemente podría funcionar:

Antes de que sus usuarios creen videos, necesita crear una matriz de bits vacía de [math] m [/ math] bits, todo configurado en [math] 0 [/ math]. También debe elegir [math] k [/ math] diferentes funciones hash, cada una de las cuales identifica el hash a una de las posiciones de matriz [math] m [/ math] con una distribución aleatoria uniforme. Esta constante [matemática] k [/ matemática] es típicamente menor que [matemática] m [/ matemática] y [matemática] m [/ matemática] es proporcional al número de elementos que se agregarán (en el caso de YouTube [matemática] 64 ^ {11} [/ matemáticas]). Esta elección de [matemática] k [/ matemática] y la constante de proporcionalidad de [matemática] m [/ matemática] están determinadas por la tasa de falsos positivos deseada del filtro.

Los filtros Bloom también tienen la propiedad inusual de que el tiempo necesario para agregar elementos o para verificar si un elemento está en el conjunto es una constante fija, [matemática] O (k) [/ matemática], completamente independiente del número de elementos que ya están en el set

Ahora, cuando alguien quiere crear un nuevo video, genera una identificación aleatoria. Luego, alimenta cada una de las funciones hash [math] k [/ math] con su ID y obtiene las posiciones [math] k [/ math] en su matriz de bits. Si alguna de estas posiciones [math] k [/ math] en su matriz de bits es [math] 0 [/ math], este ID definitivamente no se toma y puede usarlo, y para usarlo debe poner [math] 1 [/ math] a cada una de estas [math] k [/ math] posición a su conjunto de bits. Y si todas estas k posiciones en su matriz de bits son [math] 1 [/ math], entonces esta ID se “posiblemente toma” para que genere la nueva.

Hagamos un cálculo rápido. Wiki declara que para una probabilidad positiva falsa dada [matemática] p [/ matemática], la longitud del filtro Bloom [matemática] m [/ matemática] es proporcional al número de elementos que se filtran [matemática] n [/ matemática], suponiendo se utiliza el valor óptimo de [math] k [/ math]:

[matemáticas] m = – (n * ln (p)) / (ln (2)) ^ 2 [/ matemáticas]

Donde el número óptimo de funciones hash k se puede calcular como:

[matemáticas] k = m * ln (2) / n [/ matemáticas]

En el caso de YouTube, [math] n [/ math] es igual a [math] 64 ^ {11} [/ math], y digamos que quieren una probabilidad de falso positivo de [math] 0.01 \% [/ math], eso significa que es necesario usar [math] m = 1414504950550903128064 [/ math] bits, que es alrededor de 176813 petabytes y [math] k = 13 [/ math] funciones hash. Solo para ponerlo en perspectiva: en agosto de 2011, se informó que IBM había construido la matriz de almacenamiento más grande de la historia, con una capacidad de 120 petabytes. Por lo tanto, tener 11 caracteres y [matemáticas] 64 ^ {11} [/ matemáticas] espacio de identificación es poco práctico e imposible de almacenar en el filtro Bloom, pero como dijo Tom, es prácticamente imposible ejecutar identificaciones.

Debido a que es prácticamente imposible ejecutar ID’s, podríamos tratar de reducir nuestro espacio de ID a un valor que todavía es prácticamente imposible quedarse sin ID, pero es práctico usar el filtro Bloom.

Descubrí que usando [math] 64 ^ 7 [/ math] ID space y con los usuarios cargando 1 millón de videos por día (la respuesta de Rasty Turek a ¿Cuántos videos se han subido a YouTube?) Necesitaría alrededor de 12049 años para ejecutar ID, pero solo necesitará 84311065110619 bits para su filtro Bloom, que es de alrededor de 10 TB y eso no es nada para YouTube, y también necesita funciones hash [math] k = 8 [/ math].

Por lo tanto, al generar [math] 11 [/ math] ID de carácter, debe consultar el filtro Bloom solo con los primeros [math] 7 [/ math] caracteres de la ID recién generada.

probablemente escriban el siguiente número de identificación disponible en la base de datos.

cuando agrega / carga algo a una base de datos, es extremadamente típico incrementar automáticamente un campo numérico llamado “id”. Es una cuestión trivial calcular una cadena hash de la ID y agregarla en otro campo. Existe una posibilidad leve (muy muy muy leve) de crear la misma salida hash con dos números de Id diferentes, por lo que quizás agreguen algo al hash para que sea aún menos probable. Si, por ejemplo, tomaste el hash de la identificación y lo agregaste al hash de 32 bits del nombre de usuario, tienes 1 oportunidad en 16 ^ 32, dos veces. Esa es una oportunidad en este 3.402823669209387e + 38 sucediendo consecutivamente. En comparación, ganar la lotería de la bola de poder es 1 en 2.59e + 9, por lo que está viendo la posibilidad de que la colisión sea menos probable que elegir el boleto de bola de poder ganador más de 8 veces seguidas.

este código muestra hashes de 32 bits para identificadores secuenciales

$ id = matriz (100, 101, 102, 103);
foreach ($ id como $ key => $ value) {
echo “para id”. $ valor. “El hash es”. md5 (valor de $). “
“;
}
// resultados
// para id 100 el hash es f899139df5e1059396431415e770c6dd
// para id 101 el hash es 38b3eff8baf56627478ec76a704e9b52
// para id 102 el hash es ec8956637a99787bd197eacd77acce5e
// para id 103 el hash es 6974ce5ac660610b44d9b9fed0ff9548

Creo que, aunque podría estar muy equivocado, la identificación del video se genera mediante alguna forma de función hash del contenido del video que se está cargando. Idealmente, cada video cargado en YouTube debe ser único y, por lo tanto, la ID de video generada también será única.

Para evitar colisiones, sería una cuestión relativamente simple verificar esa ID con otras ID en la base de datos a través de una consulta, similar a cómo funcionan las comprobaciones de “nombre de usuario tomado”.