¿Alguien puede proporcionar un ejemplo real de cómo se estructurarían los datos dentro de un Bigtable? Por favor, hable desde un motor de búsqueda, redes sociales o cualquier otro punto de vista familiar que ilustre clara y pragmáticamente cómo la fila -> columna familia -> columna combinada es superior a los enfoques relacionales tradicionales normalizados.Ejemplo práctico de Bigtable
Respuesta
lectura del original papel blanco Google era útil:
Como era esta lista completa de fuentes de información sobre la arquitectura de datos de Google:
http://highscalability.com/google-architecture
Actualización: 11/4/14
Una nueva versión del Google blanca de papel PDF se puede encontrar aquí:
http://static.googleusercontent.com/media/research.google.com/en/us/archive/bigtable-osdi06.pdf
Creo que la diferencia radica más en la forma en que se consultan los datos que en la forma en que se almacenan.
La principal diferencia entre las bases de datos relacionales y NoSQL
es que no hay SQL
en este último caso.
Esto significa que usted (no el optimizador de consultas) escribe los planes de consulta usted mismo.
Esto puede aumentar el rendimiento de la consulta si sabe cómo hacerlo.
Considere la posibilidad de encontrar un motor de búsqueda típico: encuentre las mejores 10
páginas con todas (o algunas) palabras incluidas, por ejemplo, "concurso de camisetas mojadas", ordenadas por relevancia (estamos dejando de lado la proximidad de la palabra por simplicidad).
Para hacer esto, necesita todas las palabras divididas y guardadas en una lista de búsqueda e iterativa ordenada por (word, relevance, source)
. A continuación, particione esta lista en (3 * ranks)
conjuntos (cada uno comenzando en la parte superior de las palabras en su consulta de búsqueda en un rango determinado), donde ranks
es el número o rangos posibles, por ejemplo, 1
a 10
; y unirse a los conjuntos en source
,.
En una base de datos relacional que se vería así:
SELECT w1.source
FROM ranks r1
JOIN words w1
ON w1.word = 'wet'
AND w1.rank = r1.value
CROSS JOIN
ranks r2
JOIN words w2
ON w2.word = 'shirt'
AND w2.rank = r2.value
AND w2.source = w1.source
CROSS JOIN
ranks r3
JOIN words w3
ON w3.word = 'contest'
AND w3.rank = r2.value
AND w3.source = w1.source
ORDER BY
relevance_formula (w1.rank, w2.rank, w3.rank)
LIMIT 10
Esto se ejecuta mejor usando un MERGE JOIN
más de los tres conjuntos divididas por rango.
Sin embargo, ningún optimizador que conozco construirá este plan (dejando de lado el hecho de que relevance_formula
no puede distribuir en los rangos individuales).
Para evitar esto, usted debe implementar su propio plan de consulta: comenzar en la parte superior de cada par de palabras/rango y simplemente descender los tres conjuntos de forma simultánea, omitiendo los valores que faltan y el uso de search
en lugar next
si siente que hay será demasiado para omitir en uno de los conjuntos.
Dicho esto, el enfoque relacional le ofrece una forma más conveniente de consultar datos a un costo de posible penalización del rendimiento.
Si está desarrollando un servidor web de campus, entonces escribir esos SELECT *
está bien, incluso si se ejecutan un microsegundo más de lo que podrían ser. Pero si está desarrollando un Google, vale la pena dedicar un tiempo a la optimización de las consultas (lo que los sistemas relacionales puros que solo permiten el acceso a sus datos usando SQL
simplemente no lo permiten).
Las llamadas bases de datos relacionales NoSQL
a veces se difunden entre sí. Por ejemplo, Berkeley DB
es un conocido motor de almacenamiento NoSQL
que fue utilizado por MySQL
como back-end de almacenamiento para permitir SQL
consultas. Y viceversa, HandlerSocket
permite consultas de valores-clave puros a una tienda relacional InnoDB
con una base de datos MySQL
construida sobre ella.
- 1. Ejemplo práctico de polimorfismo
- 2. Ejemplo práctico de método dinámico?
- 3. Comprender BDD con un ejemplo práctico
- 4. ¿Algún ejemplo práctico de uso de LockSupport y AbstractQueuedSynchronizer?
- 5. Vida real, ejemplo práctico de utilizar String.intern() en Java?
- 6. ¿En qué se diferencia MegaStore de BigTable?
- 7. similitudes y diferencias entre las matrices y los punteros a través de un ejemplo práctico
- 8. mejor enfoque para el almacenamiento de uno-muchos relación - Ejemplo práctico/Dilema
- 9. Ejemplos de uso práctico de Boost :: MPL?
- 10. ¿BigTable es lento o soy tonto?
- 11. db.get() vs db.get_by_key_name() rendimiento (GAE BIgtable/Datastore)
- 12. Matrices tridimensionales: uso práctico
- 13. Uso práctico para Dispatcher.DisableProcessing?
- 14. WPF Tunneling, uso práctico?
- 15. ¿Práctico juego de herramientas GUI?
- 16. Uso eficiente práctico de IBOutletColletion
- 17. Uso práctico de eventos de interfaz
- 18. Plan de estudio práctico para aprender Grails
- 19. Uso práctico de la palabra clave `stackalloc`
- 20. BigTable de Google frente a una Base de Datos Relacional
- 21. Pro de bases de datos como BigTable, SimpleDB
- 22. Boyer-Moore ¿Práctico en C#?
- 23. Uso práctico de árboles de expresión
- 24. relaciones padre-> hijo en appengine python (bigtable)
- 25. Disruptor.NET ejemplo
- 26. uso práctico de IdentityHashMap en Java 6
- 27. ¿Uso práctico de funciones al curry?
- 28. uso práctico de la memoria virtual
- 29. ¿Cómo implementar un programador de fibra práctico?
- 30. Uso práctico de campos de bits de longitud cero
altrough su puesto hace poitns válidos, hay una gran diferencia en cómo se almacenan los datos. HandlerSocket es exactamente para omitir la capa sql del RDBMS cuando todo lo que desea es obtener una fila por su índice. Puede usar consultas en el almacén de datos basado en documentos. Las tiendas de modelos de documentos, las tiendas de gráficos, las tiendas de claves/valores almacenan datos de manera diferente para permitir la mejor manera de consultar los datos. Los datos de Ofter se desnormalizan para fines de rendimiento incluso en una base de datos racional. –
@Darhazer: en diferentes bases de datos relacionales, los datos se almacenan de forma diferente: en 'PostgreSQL' no hay tablas agrupadas, mientras que en' InnoDB' no hay unidades no agrupadas. Hay muchas cosas que me perdí, por supuesto, pero si traté de cubrir todas las cosas, alcanzaría el límite de 30K post tamaño * 30 respuestas por publicación. – Quassnoi
Sí, pero esta diferencia radica en la organización física de los datos solamente, mientras que la pregunta es sobre el modelado de datos. –