Hace 13 años | Por tsumy a gallir.wordpress.com
Publicado hace 13 años por tsumy a gallir.wordpress.com

Galli nos cuenta de primera mano el proceso que ha seguido la optimización de código SQL del portal menéame, el cual llega a unas 5.000 a 10.000 consultas por segundo en horarios de pico. Moraleja: antes de proponer usar una solución “NoSQL” para tu “proyectito” porque una relacional no aguantaría, piénsalo un millón de veces y lee algunos libros imprescindibles. Posiblemente no estés haciendo lo mejor.

Comentarios

dreierfahrer

#16 Te voy a explicar una cosa:

Este articulo me parece interesante a mi -> LO MENEO

Le parece interesante a otras personas -> LO MENEAN

Y llega a portada pq a mucha gente le parece interesante.

Si no le pareciera interesante a mucha gente no llegaria a portada... Aunque a ti te parezca que no debiera parecerlo...

#32 mira el link que comento en #2: alli precargan y cachean como locos... No digo que lo de meneame este mal (se ve claramente que la pagina va bien) sino que reddit esta enfocado de otro modo y tambien funciona muy bien... Vamos, que como poderse se puede hacer...

E insisto, a mi este tipo de links me parecen muy interesantes y mientras no haya 'submeneames' como 'subreddits' meneo lo que me parece interesante... y lo hago sin ganas de joder, lo juro.

D

Eliminación del voto microblogging YA

topolivan

¿Por qué le votáis negativo a #6 cuando tiene toda la razón del mundo?
Podremos estar de acuerdo o no en que exista ese voto de "Microblogging" (#9, p.e.), pero mientras exista digo yo que se puede hacer uso de él, no?

sauco82

#11 Porque no tiene razón , ya lo explica #7

topolivan

#13, #15, #18 Me bajo del burro. Tenéis razón, pensé que lo que iba desde "Moraleja:..." en adelante era opinión de #0, pero no. Todo es c&p.
Así que nada, me desdigo

u

#11 y lo explica #8 aún mejor. Microblogging es dar tu opinión en la entradilla sobre el contenido enlazado, en lugar de hacer una mera "introducción" al contenido enlazado.
En este caso, NO es microbloggin, porque no da ninguna opinión.

AitorD

#7 "Es una descripción del artículo."

#8 "La entradilla debe resumir el contenido del enlace, no es necesario copiar al pie de la letra. Lo que no se puede hacer es desvirtuarlo, opinar, etc"

#15 "Microblogging es dar tu opinión en la entradilla sobre el contenido enlazado, en lugar de hacer una mera "introducción" al contenido enlazado."

Tenéis razón los tres en que no es microblogging. El problema es que en esta santa web, se han torpedeado, 'acusadas' de microblogging, muchas noticias que cumplían eso mismo.

Alguien que quiere menear una foto o un vídeo que ha visto por ahí, y como no tienen texto, tiene que redactar una entradilla que describe la foto/vídeo, sin opinar. O incluso noticias en las que se ha hecho una entradilla como esta, usando palabras propias en lugar del típico C&P.

u

#37 cuándo el texto es microblogging y cuándo no (incluso si usa palabras propias) queda a juicio de los usuarios de manera "democrática".

(que en menéame haya mafias que controlen el sentido de las noticias que promocionan es un tema que va más allá del concepto de "microbloggin" que discutimos aquí).

AitorD

#38 ¿De manera democrática? O sea que si un usuario opina que es microblogging y vota en consecuencia, como #6, se le 'cose' a negativos. Curioso concepto de democracia...

u

#40 sí bueno, es que el problema de votar negativo a gente que ni "insulta, abusa, spamea, magufea, acosa" etc. es endémico en meneame.
La gente vota negativo a gente que opina de manera distinta a él (cosa incorrecta).

Pero en este caso, vale que metas la pata y votes microblogging sin serlo, pero si encima lo pones en un comentario, te van a caer collejas.

Votando negativo también se ayuda a que quien lea ese comentario no caiga en el error de votar microblogging por imitación (que pasa).

robespain

#41 No tiene nada de malo votar negativo a quien no comparte tu opinión, como si votas cuando la compartes positivo. Lo malo está cuando no te tomas a bien un voto negativo. Esto es un juego.
PD: si el usuario dice que se microblogging y lo es, positivo, si se equivoca, negativo. Lo que si es injusto es esto: Las autoridades de EEUU "roban" el dominio rojadirecta.org/c1#c-1 que no se equivoca y lo cosen a negativos (yo le vote negativo por error).

u

#43 No tiene nada de malo votar negativo a quien no comparte tu opinión

Excepto que va contra la normativa de la página.
Y además penalizar ciertas opiniones y beneficiar otras hace que Menéame, en lugar de un medio de transmitir información, se convierta en un medio de transmitir PROPAGANDA.

Por cierto, el ejemplo que pegas No es microblogging, porque no da una opinión sobre el artículo, sino que "refleja" o "resume" la opinión del artículo (lo cual es correcto).

robespain

#45 Debes partir de la base que esto no es serio, es un juego. Votar negativo a alguien que expresa su opinión es expresar que estas en contra de su opinión. El voto negativo no es para denunciar abuso. Tengo entendido que cuando votas negativo muchas veces al mismo usuario, los cálculos de endogamia hacen que esos votos cuenten menos, por lo tanto se hace mas difícil perseguir y castigar a los usuarios que no son afines a tus ideas.
Yo soy partidario de que se vote mas, positivo o negativo, de que se usen las herramientas que proporciona la web para potenciar el sentimiento de comunidad.
A veces se vota negativo, pero cuando las opiniones contrarias están bien expresadas también se las valora y se les vota positivo. Otras veces, cuando el marcar un comentario con un negativo es ambiguo, es de cortesía dar una explicación, aunque esto no es obligatorio. Los votos no se deben cuestionar, cada uno vota libremente, salvo casos de abusos.
El hecho que señalas sobre la noticia fue el mismo raciocinio que yo emplee para votar negativo y por eso me confundí. El titular es correcto. El microblogging está en el enlace del meneo, como bien explica #5 en ese mismo hilo.

PD: Yo no voy a enfadarme con alguien que me vote negativo, ni voy a dejar de votar negativo a alguien por que sea mi amijo. Por muy bien que me caiga, primero voto y luego miro el nick (es por eso que tal vez vaya un poco a mi aire dentro de esta comunidad, no me caso con nadie).

u

#46 Votar negativo a alguien que expresa su opinión es expresar que estas en contra de su opinión.

Permíteme remitirte a la página de reglas de Menéame: http://meneame.wikispaces.com/Meneatiqueta

Donde se dice textualmente:

Los votos negativos son para ocultar o mostrar tu disconformidad con comentarios insultantes, difamatorios, racistas, de divulgación de bulos, información errónea o spam. No votes negativo sólo por el hecho de que no coincide con tu opinión si ésta está bien argumentada y es razonable. Respeta las opiniones contrarias.

Y tiene su motivo: las corrientes ideológicas dominantes, si penalizan comentarios (y noticias) que van contra su ideología (en lugar de contestar, debatir y argumentar) lo que provocan es la censura de determinadas formas de pensamiento, y promueve la propaganda en lugar de la información y el debate.

El tuyo es un error bastante generalizado que está haciendo bastante daño a la libertad de expresión en la plataforma: "no basta con ser respetuso, tienes que opinar como el resto o te fríen".

tsumy

Puede ser de ayuda para terminar de entender el código: Explicación visual de los Joins de SQL

Hace 13 años | Por Florida_man a codinghorror.com

dreierfahrer

Por cierto, es algo que hecho de menos en mi trabajo: conocer mas de SQL...

Creo que es la tercera parte de los problemas de calidad de software en las TI. El resto se reparte entre: no saber programar, la desidia, el mal sueldo, el cortar-pegar...

En fin, muy interesante, lo deliciouseo para degustarlo en casa.

D

Sera microblogging o no, pero lo que necesita Gallir es un diseñador para su blog o currarse un poco más las imagenes! ¿!Que son esos circulitos en paint?! ¡Gallir, instalate un GIMP al menos hombre!

GuL

#16 Parece mentira que no sepas que si hay Gallir hay meneo lol

D

#17 Es que es mi primer dia... lol no, en serio, se quien es Gallir, y no creo que ni el mismo vea necesario esto.

sauco82

#16 Ah, yo creía que cada uno votaba aquello que le interesaba, no lo que quieren los demás

D

#22 A mi me parece que lo que me interesa + sentido común seria ya la leche.

llorencs

#16 Esto es menéame. Supuestamente este debería ser una parte del contenido de esta página. Así que me parece perfecto que aparezca. Demasiado poco contenido técnico o especializado hay. Debería haber más; y no solo de informática sino de ciencias en general.

Entre las genéricas también más especializadas. Esta web antes de que se masificara era así.

Ahora estoy de acuerdo con lo del microblogging. Lo de "Gallir nos cuenta de primera mano" no es un buen resumen y se acerca a una opinión. Para una buena entradilla se deben evitar referencias personales, y eso lo es.

Lamercillo

Sería interesante saber qué columnas están indexadas de cada tabla, puesto que es lo que hace la diferencia (lo menciona en el caso de la tabla votes pero no en las otras).

Es muy difícil decir si una sentencia SQL está optimizada o no si no se ponen los índices (aunque se supone que las foreign keys siempre estarán indexadas y éstas se pueden deducir en este caso).

Pero por ejemplo el hecho de que se haga una comparación de fecha en el campo link_date de la tabla votes puede hacer que se dispare una barbaridad una consulta si ese campo no está indexado (parece que no es el caso porque según dice no está indexada), aunque se supone que al restringir la búsqueda por link_id y user_id ya no hace falta.

De todas maneras mi experiencia es en Oracle, en MySQL seguramente los planes de ejecución se comportan de manera diferente ...

D

Obviamente, la mayotía de los votos negativos son adhominem. Difícilmente se explican si no cuando se nos llena la boca con que hay que compartir, acceso uiversal y bla, bla, bla

moraitosanlucar

mira que no hay muchos conceptos que entender para votar las noticias. Pues nada, todos como burros a votar microblogging. Animalicos...

BiG_FooT

Lo tengo ya clarisimo..
NO tengo ni puta idea de informatica.. menudo cristo de consultas! lol

jfabaf

El artículo es muy interesante, nunca había pensado en utilizar las variables de sesión del SGBD para optimizar las consultas, me parece una muy buena idea.

Lo que no entiendo es cómo establece esas variables de sesión, yo para la conexión a la base de datos suelo utilizar un "pool" de conexiones, para que cada usuario no cree una conexión nueva con la base de datos, sino que las conexiones se reutilicen, supongo que en meneame no se utilizará esto, ya que en caso contrario unos usuarios utilizarian las conexiones creadas por otros y por tanto, utilizarían sus valores de sesión.

kolme

«Si usas un framework moderno, felicidades, ojalá hubiesen existido cuando comencé a programar el Menéame. Pero no te creas que generarán SQL y código muy eficientes y adaptados a tu problema.»

La serialización de SQL no tiene por qué generar consultas ineficientes. Todas las consultas que aparecen en el post pueden ser trivialmente serializadas.

Añaden otra capa de abstracción, que añade mucha (mucha) claridad al código pero al final es un poco más de overhead. Depende de tus gustos y de si dispones de un poco más de CPU y/o memoria adicionales.

«Así que la próxima vez, antes de proponer usar una solución “NoSQL” para tu “proyectito” porque una relacional no aguantaría, piénsalo un millón de veces y lee algunos libros imprescindibles [por ejemplo 1 ó 2].»

Todo eso depende de la naturaleza de los datos con los que estés trabajando. ¿Se pueden cachear? ¿Cuánto tiempo pueden estar en caché? ¿En cuántas tablas están esturreados? ¿Se pueden denormalizar? ¿Necesitamos ordenarlas o filtralas de manera compleja?

«Posiblemente no estés haciendo lo mejor, y seguro, no, segurísimo, que con una NoSql no podrás tener un código tan “elegante” y breve como:»

[Algo así como foreach($iterator as $item) render($item)]


WTF? ¿Qué es exáctamente lo que te impide hacer lo mismo con un backend NoSQL? ¿Está prohibido usar iteradores?

«¡Ah! antes de olvidarme, si tu modelo de datos de un proyecto web requiere de JOINS de más de 5 ó 6 tablas, la estás cagando. Un programa web no tiene nada que ver con un programa de gestión (ni con los requerimientos y limitaciones que te dan en las clases de bases de datos de la universidad).»

WTF? Vamos no me jodas, felicidades por descubrir el fuego, pero, ¿a cuento de qué viene ese tono?

lloseta

1 $links = $db->object_iterator("...");
2 if ($links)
6 }

ollomol

Pobres DBAs... Nadie les da una oportunidad!!!

D

Los daltónicos te saludamos afablemente, Gallir.

d

¿Y el voto irrelevante? Está claro que no a todo el mundo le interesa el mismo tipo de noticias. Irrelevante debe ser para una noticia que puedas considerar que no interesa a nadie. Pero una noticia técnica que tu no entiendes no debería ser irrelevante, ya que puede interesar a una comunidad grande de usuarios.

PussyLover

Menos mal que no hay categoría de gatitos, si no tendría más carga. lol

u

No tiene nada de malo votar negativo a quien no comparte tu opinión

Excepto que va contra la normativa de la página.

o

Creo que no entendí el artículo.
Usa LEFT JOIN e INNER JOIN donde es necesario, y se congratula?
JOIN es la operación básica de una base de datos relacional .
Es como que venían trabajando con la base de datos como si fuera DBase, y empezaron a usar la base de datos como si fuera una base de datos relacional. Sí, hay mejoras con eso. Otra noticia: los índices son útiles.
Ahora, para un sitio como Meneame, sigue siendo mucho mejor una solución NoSQL.
El código puede quedar tan simple como te lo permita tu habilidad para diseñar algo tan simple como Meneame.
Tomando en cuenta que esto es mucha lectura y poca escritura, se beneficiaría mucho de tener todo lo actual precargado en memoria, y traer los datos antiguos de un repositorio persistente a una caché LRU.
La carga de los servidores bajaría órdenes de magnitud.

Lamercillo

#31 Lo de tener los datos precargados en memoria es una buena idea (y de hecho lo utilizamos en algunos de nuestros sistemas), pero en el caso de menéame, donde la inserción / modificación de datos es muy alta (cada noticia, cada comentario, cada voto de comentario / noticia, etc.) creo que la comunicación entre el repositorio y la caché podría llegar a ser un problema.

Es verdad que el artículo comenta cosas bastante obvias, pero también es verdad que cuanto más usuarios y peticiones tienes, más vueltas le tienes que dar a cada solución.

Xi0N

Voto mafio-blogging ya....

jlc111

Y a mi que me importa esta noticia, esto no tiene que llegar a portada nunca!!!!!!!
ESTO NO ES UNA NOTICIA
Dentro de poco nos pondréis en portada que el hombre este ha puesto Michelin en su coche, pues muy bien!

D

Gallir nos cuenta de primera mano el proceso que ha seguido la optimización de código SQL del portal menéame, el...

microbloggin de libro, la noticia puede ser interesante o no, pero poner eso es cargársela, aunque como es de papa galli y habla de meneame a nadie le importara que sea microbloggin

michus

#8 A mi también me parecía microblogging hasta que me he leído el artículo y he visto que la moraleja y todo lo que pone en la entradilla es exactamente igual que el artículo, supongo que a #4 y #6 les ha pasado lo mismo pero no se lo han leido...

D

#18 estando en clase es dificil leerse todo, por lo que he leído el codigo y algunas de las explicaciones del mismo, poco más, de ahí mi comentario.

d

#8 Te he votado negativo no sé ni cómo, le ha dado un crujido al ratón. Te voto positivo en otro comentario

palitroque

Microblogging, sorry