Hace 14 años | Por --6352-- a sigt.net
Publicado hace 14 años por --6352-- a sigt.net

Explicación en sigt.net en español de un artículo de highscalability.com sobre cómo Digg mejoró el rendimiento de consultas hacia su base de datos ordenando los registros usando PHP y no SQL nativo. El original en inglés en http://highscalability.com/blog/2010/3/23/digg-4000-performance-increase-by-sorting-in-php-rather-than.html

Comentarios

b

Para el #23 el concepto es que sea más eficiente a nivel de peticiones por segundo utilizando hardware de pocas prestaciones. Amazon que es una empresa bastante importante y otras utilizan cosas parecidas. El concepto no es demonizar el concepto de bases de datos relacional, sino mas crear cosas útiles para nuestros requirimientos, es decir, hacer ingenieria, no aplicar una solución generalista.

araujo

#7 Ya, tantas horas explicándonos como funciona, y ahora va a resultar que es menos eficiente que por código. Tócatelos...

Rafaesp90

#7 A mi se me plantea una duda peor aun... ¿para esto tengo que estudiar algebra relacional ahora?

D

"¿Por qué no utilizar una base de datos no relacional desde un principio?."

Porque, al principio, necesitas añadir funcionalidades, no pasarte el día optimizando.
Porque, al principio, no sabes qué funcionalidades van a ser más populares y más se beneficiarían de una optimización.
Porque, al principio, vas a estar cambiando cosas cada dos por tres, y como tengas que hacerlo sobre una BD NoSQL, te vas a cagar.

En resumen, porque al principio no tienes ni zorra.

D

Vaya campañaza a favor del PostgreSql, cómo se nota que aprieta el lobby del open source. Desde que lo compró Oracle, el MySql es una puta mierda que nadie quiere, eso sí, antes era la polla, un ejemplo a seguir, lo mejor del mundo, le daba mil patadas al MS-SqlServer y doscientas a Oracle, y ahora resulta que no vale un carajo...

D

#14: Pasar de MySQL a cualquier cosa es escalar. (Y PostgreSQL no es cualquier cosa)

D

#20: Citando el artículo que enlazas:
"My conclusion is that, in general, there is no performance reason to choose MySQL over PostgreSQL when using Sequel as the database library. Replication support now remains the main technical advantage of MySQL over PostgreSQL, and with PostgreSQL 9.0, most of that advantage will be removed."

D

#21 Es decir, que no es mejor tampoco PostgreSQL, aunque la replicación de MySQL ahora mismo es una ventaja.

Evidentemente se habla de la librería Sequel y es un problema concreto, pero va en la linea de lo que digo: PostgreSQL tampoco es una máquina de picar carne.

Coronavirus

#20 #21 ¿Y qué tal una aplicación que use joins, para aprovechar el llamado "modelo relacional"? Porque con Sequel va a dar un poco igual usar MySQL, PostgreSQL que SQLite o ficheros csv: Sequel mapea objetos en la base de datos y eso no son más que selects e inserts muy sencillitos sobre una una tabla normal y corriente.

Llenad 5 tablas con 100.000 filas de valores basura y haced un join de todas ellas con MySQL. Si os responde a la consulta os podéis dar con un canto en los dientes.

D

#30 Es mucho mejor que eso, Haz una tabla con 11 campos tipo TEXT (también vale VARCHAR(1024) por ej.), intenta llenarlos con más de 768 carácteres (bytes) cada uno

MEEEEC, mega fail, es lo que tiene la retrocompatibilidad.

cosmonauta

#32. Esas cosas, en PostgreSQL no pasan. Por eso los los "postgresistas" nos cabreamos tanto cuando tocamos MySQL.

miau

Hay por ahí un libro que se llama High Performance MySQL o algo así que explica un montón de técnica para optimizar índices, consultas y demás. Casi sólo con lo que dice ese libro te comes con patatas lo que sea

D

Y ahora que Digg funciona 'bien', quién va a mantener toda esa paranoia? el programador que lo mantenga, buen programador será.

equisdx

Esta es la clave del asunto, como bien dice #1

Todo este esfuerzo requerido para hacer escalar una base de datos relacional básicamente quiere decir que vas a usar una base de datos no relacional de todas formas. Entonces ¿Por qué no utilizar una base de datos no relacional desde un principio?.

En mi opinión, han hecho la ñapa mayor del reino, como dice #9 pobre del que lo tenga que mantener, por un error en el planteamiento inicial de Digg. No es tanto un error de diseño, sino que la cosa ha crecido tanto que ahora cambiar todo es demasiado costoso, al menos bajo el punto de vista de los desarrolladores de Digg.

D

No nos olvidemos del nombre y trafico de las webs que se ven obligadas a hacer esto. El 99.9% le sacaria mas partido a una base de datos relacional.
Y si esta se "atasca" el 90% de los casos es por no estar lo campos indexados correctamente.

cosmonauta

El tema es que un SGBD puede correr un poco más rápido que otro, incluso el doble o el triple, pero un Cassandra bien implementado cambia el orden de magnitud, a 10 o 100 veces más rápido.

Por eso la comparación MySQL, PostgreSQL u Oracle no tiene sentido. Uno puede ser más rápido que el otro, pero con Cassandra es mucho más rápido aún.

Los "tesnicos" creo que lo tenemos claro. Para los menos expertos, no penséis que un Cassandra es lo que necesitáis. Solo tiene sentido en sites con un tráfico "brutal" de transacciones simultáneas. Para la gran mayoría, cualquier buen SGBD es válido.

equisdx

#33 Tienes razón, pero igualmente la comparación de la santísima trinidad de BBDD con Cassandra tampoco tiene sentido, pues aunque sea más rápida, su propósito es muy distinto, más específico y no tan genérico, al de la triada ¿no?

icedcry

#39 Y mientras a muchos talibanes del NoSQL se les llena la boca de que "SQL no escala" o "el modelo relacional no escala".

Me juego una cerveza a que a los talibanes también se les atasca la recursividad, la programación en paralelo, multihilo etc...

icedcry

#42 Como ya dije en el post, (ese que no te has leído hasta el final),
Lógicamente la entrevista no entra en los detalles, así que puede ser una decisión brillante...y de todas formas el hecho de tener los 3 data centers separados puede ir en esta línea y explicar la decisión,
pero lo que se comenta en ella no tiene nada que justifique la decisión que han tomado...
¿Tú crees que Digg tiene el mismo volumen de datos que Amazon? ¿Crees que una aplicación de datos de localización va a tener ese volumen de datos? ¿que no le importa que se pierda algo? Deberías leer el post #39.

De hecho lo que se quejan es de hacer esto http://www.codefutures.com/database-sharding/ y para ese volumen de datos no entiendo la queja salvo que no quieran gastar en determinado software, tengan problemas que no comentan en el artículo o simplemente vayan "a la moda".

b

Señor #44 si lo mio es una falacia la que hace #37 "o no entienden los SGBD relacionales y han hecho una mierda con MySQL, (más que probable)" no se como nombrarlo. Por cierto son sus argumentos que no se pueden comprobar y que no me valen, básicamente por que diga que sabe mucho. Es decir, el se convierte en la autoridad por que dice que gestiona un sistema 30000 transacciones por segundo con MS SQL Server 2005.

Lo único que he dicho y estoy de acuerdo #39 (esto va #43) que supongo que es una solución que les sirve a ellos y que puede ser generalizado para solucionar cosas parecidas.

Leeros esto http://s3.amazonaws.com/AllThingsDistributed/sosp/amazon-dynamo-sosp2007.pdf y http://static.googleusercontent.com/external_content/untrusted_dlcp/labs.google.com/es//papers/bigtable-osdi06.pdf. Anda si google también implementa algo parecido.
Encontareis más o menos la filosifia de estos sistemas y el por qué.

Solo digo con el argumento "a la moda" no me parece un el mejor, porque también se puede considerar a la moda las bases de datos relacionales.

icedcry

#46 Google procesa petadatos... y no importa si la respuesta a una búsqueda es ligeramente diferente según de dónde y cuándo consultes, así como si se pierde algo pequeño...espérate a que se pierda tu noticia al publicarla. ¿Te gustaría dar de alta dos veces la noticia en Menéneame?
En fin de todas formas es posible que tengan motivos que no comentan en la entrevista, el tema de hardware puede ser uno, como el de no querer usar software privativo, por el motivo que sea.

#45 A ver, un consejo, lee las cosas antes de hablar sobre ellas. En tu anterior post ya se veía que no lo leías, pero ahora dices que lo gestionas cuando lo estoy revisando, (y así lo hago notar en el post). Además es en respuesta a alguien que ha dicho que para miles de transacciones los sistemas relacionales no sirven. Simplemente le indico que pueden tranquilamente con miles de transacciones.

Es decir, está claro que no lees los posts en detalle, (la otra opción es que tengas problemas de comprensión lectora, pero supongo que es más adecuada la anterior).

Lo que indico en mi post básicamente es:
- en la entrevista no da una sola buena razón para no usar SGBD relacionales, ¡ni una!, comento cada punto que aparece en la misma con el que no estoy de acuerdo y, a pesar de eso indico, que es posible que haya buenos motivos, pero que claramente no están expuestos en la entrevista.

En cuanto a tus justificaciones, ¿aportas algo? ¿datos? ¿experiencia? ¿argumentos? No, tus únicos argumentos habían sido que "si ellos lo hacen cómo se atreve a criticarles"...como te han indicado, eso es una falacia y ahora simplemente entras a criticarme como si me arrobara de "autoridad por gestionar" ...es decir no das datos y ahora atacas a mi persona, ¿te doy envidia?...y los links que pasas en el de google más claro no puede empezar:

(...)petabytes of data(...) y ni Digg ni la empresa de geodatos usan esos volúmenes...

Los SGBD relacionales aportan cosas muy claras, como por ejemplo transacciones ACID, no son tanto moda, como algo confiable y efectivo.

Bueno, ya que estamos "criticones", es "leeos" y no "leeros", y por cierto, aprende a puntuar.
http://www.rae.es/rae/gestores/gespub000018.nsf/(voAnexos)/arch8100821B76809110C12571B80038BA4A/$File/CuestionesparaelFAQdeconsultas.htm#ap9

cosmonauta

#47. Era yo quien decía que ningún SGBD se tragaba miles de transacciones. Quizás me quedé corto. Pongamos "cientos de miles". Aún así, ¿Seguro que puedes aguantar 30.000 transacciones/segundo? Es que me sale un tiempo medio de transacción de 33 microsegundos...¿No hay caches por en medio? ¿o técnicas que gestionen colas? ¿Datos reales, o un benchark sintético del estilo "for (i=0;i

icedcry

#48 Un poco corto sí en este post estoy más de acuerdo

Tenemos esos tiempos, porque la verdad, tenemos un maquinón bien gordo, que afortunadamente áun podría ampliarse, y llevas razón en lo de mejoras lineales. Los resultados que tenemos son porque se traga varias decenas de miles de inserts / deletes /updates por segundo sin problema.

Si estoy aquí es porque a pesar de la potencia tenemos problemas, pero son de otra índole, al diseñar la aplicación hicieron algo, (que no debo decirte), que hizo que al agregar usuarios al sistema el aumento del consumo de recursos sea exponencial...no te puedo dar más datos por ser privados.

Si andáramos con datos por los petaflops, tipo Google, y además tuviéramos la aplicación distribuida por el mundo ya te digo yo que esto no habría forma racional de ampliarlo.
Se podría hacer, si no recuerdo mal hotmail está montado sobre BB.DD. relacionales, pero uffff uffff uffff no nos quedaría más remedio porque no podemos perder datos y el orden tiene importancia para nosotros....no nos vale Cassandra...¿tal vez BigTable? no he leído lo suficiente sobre ello pero tiene buena pinta.

Hombre, yo no diría que Cassandra no es buena práctica...es buena práctica cuando realmente justifica su uso, cosa que en la entrevista no se demuestra, pero sí se critica los SGBD relacionales de forma injusta y desde mi punto de vista me aparenta ser más por moda que por ser algo correcto desde el punto de vista de la arquitectura...al fin y al cabo la arquitectura se diseña para una carga determinada.

D

#47 no hablaba de google respecto a las busquedas, sino sobre App Engine. Si no lo conoces, digamos que es un hosting "en la nube", que te permite subir tu propia aplicacion web, pero solo puedes usar la base de datos que ellos te proporcionan (no relacional), entre otras limitaciones.
Que yo recuerde no dicen nada de duplicación de datos (a no ser que por ejemplo el usuario envie dos veces lo mismo, o se registren dos con el mismo nick a la vez, o cosas asi (hay metodos para disminuir la probabilidad), fruto de la inexistencia de resticciones mas alla de la clave primaria). De todas formas, para digg o para meneame, no supone ningun tipo de problema que una noticia saliese dos veces, o incluso, que borrasen todas las noticias mas viejas de un año y los comentarios... seguiria funcionando igual de bien y casi nadie se daria cuenta. Ahora, como eso ocurra por ejemplo, en un banco o en cualquier otro sitio donde los datos y la coherencia de estos sea fundamental, se lia parda.

icedcry

#50 A ver que yo no digo que Cassandra no les sirva, lo que digo es que lo comentado en la entrevista no justifica el cambio y el comentario que hacen sobre las SGBD relacionales como no escalables no es verdad. Al menos para el volumen de datos que manejan.

#51 Pues sí, es algo soez y la verdad que fuera de tono...se me escapó lo que siento cada vez que alguien me dice que los SGBD relacionales no escalan, y me lo han dicho para sistemas liliputienses

p

#52 Hombre, yo utilizo peores expresiones cuando me hacen instalar aplicaciones complejas en producción sin ni siquiera un misero README (Si, directamente en producción y un viernes por la tarde, sin nadie de guardia el finde).

Lo que la gente de meneame le faltan excusas para pasar del debate a la trifulca, así que intentaba que viese que el tono del comentario no invalidaba el argumento que diste.

(liliputienses lol)

icedcry

#53 Eso, instalando "con un par" ¿pruebas? ¿backup? ¿plan de contingencia? ¿soporte? ¿documentación?
¡¡Eso es para nenazas!!

Lo de liliputienses es que es verdad, te encuentras con que 2 GB de datos les acojona, y una tabla con 2 M de registros les parece eterna....y te empiezan a decir, "ponemos una tabla para cada año".... vamos que NPI tienen de lo que ofrece un SGBD relacional y lo terrible es que luego te dicen "es que SQL Server no nos dio lo que necesitábamos" ...lo miras y lo 1º que ves es tablas sin índices que no respetan ni la 1ª regla de normalización..."es que es por el rendimiento"
Terminas de arreglarlo, dejas el rendimiento en milisegundos en las consultas y soporta hasta la 4ª regla de normalización y entonces se excusan "es que eso es cosa de un DBA"....y piensas "¿pero qué cojones has estudiado tú piltrafilla? ¿te regalaron el título de ing. superior?" y mientras piensas eso te hablan de Entity Framework de NHibernate, de Cassandra, de.... y piensas, "Cualquier cosa menos aprender ¿verdad?" y no es que no puedan ser útiles, pero ¿de qué te sirve NHibernate si no sabes lo que hay debajo?

p

#45
Apreciado #45 :

La frase de #37 "o no entienden los SGBD relacionales y han hecho una mierda con MySQL, (más que probable)" puede ser un poco soez, pero expone un argumento: Una BBDD relacional puede aguantar esa carga, y lo hace con un hecho: Las 30000 transacciones/s en su equipo.

En ciencia esta afirmacion se podria comprobar replicando su configuración y testeando con un benchmark de 30000 transacciones (con factores de corrección en función del hardware que use claro). Se que es dificil, pero las alternativa de suponer que miente o se equivoca...no serian logicas.

O puede atacar su analogia dando motivos por los que no podria escalar a partir de esas 30.000 trans/s

Y sin querer faltarle, la frase "si lo mio es una falacia la que hace #37 ... no se como nombrarlo" es un "tu quoque" de libro. Aunque la carga emocional inherente a " han hecho una mierda " enturbia un debate lógico.

b

#37 Que te crees que eres el único que sabes de SGBD. Y que la gente digg es inepta. Bueno yo no diría tanto. Otra cosa Cassandra viene de un sistema privativo que utiliza Amazon. Digamos que Amazon también son unos ineptos. Yo creo que la gente por aquí habla demasiado.
El #33 dice algo de verdad NoSQL no se debe utilizar para todo, por que no sirve para todo. Pero lo mismo se tiene que aplicar con base de datos relacionales, no sirven, para todo o es la mejor solución para todo. Más vale no ser taliban en estas cosas.

p

#42 Sin entrar en si #37 tiene razón o no, lo que haces es una falacia ad verecundiam (apelar a la autoridad/respeto ). Solo pq lo hagan digg i amazon no significa que tengan razón. #37 ha dado argumentos, rebatelos si los ves incorrectos.

v

El titular se presta a confusión. No compara MySQL con PHP. Compara las bases de datos SQL con las que no lo son (noSQL).

D

#11 -> #36

D

Muchas explicaciones (y muy interesantes, con el tema Cassandra vs MySQL), pero va al grano en el punto 4 del post.

D

#2 Totalmente de acuerdo. Para una PYME lo caro es el programador, no el hardware.

D

#12 Es lo que tiene hacer aplicaciones gordas, con aplicaciones de juguete.

D

#12 Si tu solución para escalar desde MySQL es pasarse a PostgreSQL... FFFFFFUUUUUUUUUUU

bonobus

Eso sí que es un porcentaje.

cosmonauta

Como decía Pazos, lo importante es el "concepto".

Los Cassandras y similares tienen su utilidad cuando estamos hablando de miles de transacciones por segundo. Cifras que ninguna base de datos puede asumir, por muchas máquinas que tengas.

Por decirlo de alguna manera, más que ser un servidor, son una especie de nube de datos Peer to peer. Varias máquinas colaboran entre ellas para ir guardando la información, manteniendo todo lo que pueden en memoria, para acelerar lecturas futuras. Cuando no tienen un dato, buscan alguna máquina vecina que pueda tenerlo, para evitar usar los discos. Y el sistema es superescalable, se pueden añadir o quitar máquinas a voluntad.

Como resumen. Si un MySQL hace 100, un Postgres 200 y un Oracle 400, eso hace 1000.

a

Los que usamos Wordpress en hosting virtual, estamos bastante quemados con la ineficiencia de MySQL, y con la ineficiencia de los scripts. En el momento que las BB.DD. crecen los joins de tablas grandes provocan demandas gigantescas. Yo estoy buscando un proveedor de hosting virtual que admita mucha caña a MySQL, y que tenga buena atención al cliente, porque poco a poco me voy hundiendo en un pozo del cual no sé como salir. Reescribir los scripts como dice un listo, no me parece una opción realista para resolver estos temas. Si no lo hace Wordpress, no vamos a hacerlo cada uno de nosotros de forma independiente.

el_loco_del_gorro

Me quedo loquer : y yo pensando que MySQL 5 podría ser considerado un SGBD y usándolo como tal con sus procedimientos almacenados y tal para obtener el mejor rendimiento

D

Alguien puede explicar un poco como es eso que ordenan con php y no con sql ?

No tengo mucha idea de sql, pero siempre ha sido mejor paginar y ordenar con sql... es más, simplemente por el hecho de paginar, si se quiere que además sea un resultado ordenado... ó se ordena antes de paginar o te traes el resultado entero y se ordena y pagina en la aplicación, pero eso esta lejos de ser rápido ó eficiente.

No lo entiendo. No es que no me lo crea, es que ardo de ganas de saber como lo han hecho lol

D

#5: La definicion segun la web que enlazas:

"DEFINITION: Next Generation Databases mostly address some of the points: being non-relational, distributed, open-source and horizontal scalable. The original intention has been modern web-scale databases. The movement began early 2009 and is growing rapidly. Often more characteristics apply as: schema-free, replication support, easy API, eventually consistency, and more."

Genial. Años de avances para volver al DBase. roll

D

bueno, google tambien hace algo parecido en app engine, la base de datos es no relacional.
Las cosas como son, cada modelo tiene sus ventajas y sus desventajas. Y aplicadas a un proyecto concreto, esas ventajas y desventajas hacen que sean la mejor opción, o una cosa totalmente inviable.
Y para cosas como Digg, y por el tipo de información y la forma de procesarla que deben tener, la verdad, yo no veo demasiados inconvenientes y si ventajas a un sistema no relacional. (mayor escalabilidad, mas barato en cuanto a hardware por esto, etc).

Karadecul0

Yo pensé que MySQL era un nuevo espacio del programa de sobremesa de la Sexta

D

#19 Si karadecul0, yo también lo pensé.