Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Skeletron

#461
Por lo que veo:
Código (vbnet) [Seleccionar]
Dim lista As New Dictionary(Of String, String)
        lista.Add("noel", "noel")
        lista.Add("noel", "asdasd")
        lista.Add("asd", "noel")
        lista.Add("noel", "noel")


Al ingresar la 2º entrada, con la misma clave, da un ArgumentException.
Tardó mucho en "avisarme" el depurador del error (como 1 segundo)...
Si tarda mucho, tendria que seguir con el "if not lista.Contains then lista.add()"

Que me recomiendas Manu?
#462
Gracias por los comentarios Tifa..

Cuando me referia a IMAGENES, queria decir: LINKS, ya que esos links que hay en la base de datos, son links a imagenes.

Me gusta que quede claro, que no hay problemas en cuando a la velocidad de la base de datos si utilizo MD5, ya que los "SELECTS" que haré, seran con un WHERE hash1=xxxx.. o sea, los selects tendran en su "WHERE" a valores de la columna HASH1 HASH2 y HASH2, y no la columna de CODIGO (donde estaria guardado el MD5)


Ahora tambien, estaba mirando, y creo que tambien tendre que implementar el sistema que VERTEX presenta, el de 2 tablas..
Tabla 1:
[1]google[2]

Donde en tabla 2 esta:
[1] = www.
[2] = .com

Porque, analizando recien, tengo muchas, pero muchas palabras que siempre aparecen en los links, como por ejemplo:
link = link.Replace("upload.wikimedia.org/", "^")
           link = link.Replace("wikipedia", "`")
           link = link.Replace("img", "~")
           link = link.Replace("fotolog", "¢")
           link = link.Replace("metroflog", "£")
           link = link.Replace("image", "Æ")
           link = link.Replace("photo", "Ø")
           link = link.Replace("picture", "Þ")
           link = link.Replace("static.flickr.com/", "ß")

           link = link.Replace("www.", "¢")
           link = link.Replace(".com", "£")
           link = link.Replace(".org", "¤")
           link = link.Replace(".net", "¥")
           link = link.Replace(".html", "¦")
           link = link.Replace(".htm", "§")
           link = link.Replace(".php", "©")
           link = link.Replace(".png", "®")
           link = link.Replace(".jpg", "±")
           link = link.Replace(".gif", "µ")
           link = link.Replace(".jpeg", "¶")
           link = link.Replace(".index", "¼")
           link = link.Replace(".asp", "½")
           link = link.Replace(".aspx", "¾")
           link = link.Replace(".bmp", "ð")

Y como verán, aun quedan muchos opr agregar, como por ejemplo: photoS, tumbalins, y demas palabras que siempre aparecen en los links de imagenes.

Alrespecto, Tifa respondio que se comenzaria a crear un gran problemas con los "UNION" y demas.. (o me equivoco?) y es verdad...
Pregunta:
supongamos que con un select, devuelvo el LINK (campo), que tiene como HASH1(campo)=123
Código (sql) [Seleccionar]
SELECT links FROM tablanoel WHERE hash1='123'
Una vez que tengo el link, tendré que recorrerlo buscando indices del tipo: [X]??? y realizar OTRO select por cada [X] que encuentre para reemplazar el valor?
O se podra hacer todo en una sola Consulta?
#463
Por ésto:
supongamos que 500 hilos estan procesando al mismo tiempo 500 post diferentes de este foro.
Los 500 post, tienen un link a: foro.elhacker.net, ya que es el link que tiene la imagen de logo de arriba de todo...

Los 500 hilos crearian un flujo de 500 entradas al servidor MySQL que lo tengo en un HOSTING.

Pero, si antes de pasarlo directamente a la base de datos, lo meto en una lista donde no hay items repetidos, entonces, los 500 hilos agregarian a la lista aqui en la PC el link foro.elhacker.net, y en realidad, habría solo 1 item en la lista, ya que 499 estuvieron repetidos... al terminar el procesamiento de todos los hilos, otro hilo se encarga de meter todo lo que habia en la lista de links a la base de datos, y solo haría 1 solo INSERT... en vez de 500 :)

Entendiste tio? :D
#464
Y entonces que me dicen?
Habrá algun hash que disminuya la cantidad de coliciones?

Es mala la idea de un MD5 en un CHAR(32)??
#465
Las/os 2 tienen razon:

Tifa, mi idea, es llegar a las 12 sifras de entradas.. o sea 100.000.000.000
Un algortimo de 32 bits, (2^32=4294967296) digamos que con la suerte al 100%, podria tener 4.294.967.296 entradas sin coliciones, y en la entrada 4294967296 + 1, ya sería una colicion.. Digamos que perdería MUCHISIMAS IMAGENES!!!

Ahora, un algoritmo de 2^62=18446744073709551616 que el resultado sea una cadena solamente numerica, daría la chanse de tener 18.446.744.073.709.551.616 entradas...

Lo que aumentaría en espacio, lo ahorrarian en el "costo de espacio" que me genera tener un indice privario en el varchar de 300...

No me quiero arriesgar a perder billones de imagenes por culpa de un algoritmo.. Sería bastate tonto...

Tiene que haber algun algoritmo que no me de problema con coliciones (o pocos problemas)...


Creo que alargar la longitud del resultado a guardar en "CODIGO", para disminuir las coliciones, será una buena idea.
Tal vez pierda unos 50bites por entrada (porque crece el tamaño de CODIGO), pero sigo ganando mucho por eliminar el UNIQUE de un varchar de 300, y quedando solo en la columna CODIGO...


Ustedes son los que saben... que me dicen?
#466
Me quedo claro en donde se colocan en "el hadware" las columnas con indice, pero, porque es diferente tener 3 indices (uno por cada columna) a tener uno que abarque las 3 tablas?


EN cuanto a la 3º tabla, no use myisampack, sino que agregue una nueva columna: "codigo", que contiene el crc3 del campo LINK, y elimine la clave primaria de LINK que era un varchar de 300, y se la pasé (a la clave primaria) a la columna CODIGO

En cuanto a las columnas HASH, son: smallint(3).. ahí dentro guardo numeros entre 0 y 266.

Digamos que, la 3º tabla es:
Código (sql) [Seleccionar]
CREATE TABLE IF NOT EXISTS `conSimboloseIndices` (
 `hash1` smallint(3) NOT NULL,
 `hash2` smallint(3) NOT NULL,
 `hash3` smallint(3) NOT NULL,
 `link` varchar(300) NOT NULL,
 `codigo` decimal(12,0) NOT NULL default '0',
 PRIMARY KEY  (`codigo`),
 KEY `hash1` (`hash1`,`hash2`,`hash3`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;



Otra pregunta mas:
Tifa, por favor, me gustaria que me respondas algo:
el numero que devuelve el crc32, que longitud maxima tiene? yo supongo tener unas cuantas entradas en la base de datos, tal vez entrando a las 12 cifras..
Si me dices que NO HABRAN COLICIONES, entonces, hoy mismo me pongo a modificar todo
#467
WOW TIFA!!!...
Me quiero casar con vos..


Perdon por el 3º posteo consecutivo.. es que en todos hablo de diferentes cosas, y espero respuestas separadas (o citadas :D )

Increible... Haciendo lo que tu dices, se reduce la cantidad de espacio en un 99,9%

Aqui paso los datos:

La tabla comun, con links sin http:// al comienzo, con un campo: LINK, y 3 campos HASH (hash1, hash2, y hash3):
3,230 Entradas (todas las tablas tienen la misma cantidad y LAS MISMAS entradas, pero con diferentes tratamientos)
Links SIN reemplazos de algunas cadenas, por simbolos.
1 Indice UNIQUE que abarca las 3 columnas de HASH
1 Indice PRIMARY al campo LINKS

Datos     332.5     KB
Índice    430.0    KB
Total    762.5    KB


2º TABLA:
Links sin http:// un campo LINKS, y 3 campos HASH (hash1, hash2, y hash3):
Links CON reemplazos de algunas cadenas, por simbolos.
1 Indice UNIQUE que abarca las 3 columnas de HASH
1 Indice PRIMARY al campo LINKS

Espacio utilizado:
Datos    226.8    KB
Índice    312.0    KB
Total    538.8    KB

TABLA 3: (con las recomendaciones de tifa)
Links sin http:// un campo LINKS, 3 campos HASH (hash1, hash2, y hash3) Y UN CAMPO CODIGO:
Links CON reemplazos de algunas cadenas, por simbolos.
1 Indice UNIQUE que abarca las 3 columnas de HASH
1 Indice PRIMARY al campo CODIGO, el cual contiene el CRC32 de cada link

Espacio Utilizado:
Datos     245.0     KB
Índice    89,088    Bytes
Total    332.0    KB


Increible..

Conclusión:
Mi sistema, ahorró 224 KB. y Sumandole la tecnica que propone TIFA, se ahorran en total: 430 KB, y mejorando por mucho la velocidad de la base de datos :D
#468
Tambien he notado que crear un indice del tipo:
ALTER TABLE `conSimboloseIndices` ADD INDEX ( `hash1` , `hash2` , `hash3` )  
O sea, un indice que abarque a 3 columnas, OCUPA MUCHO MENOS ESPACIO, que 1 indice para cada columna...

Porque será? cual es la diferencia funcional?


Las consultas que haré hacia la abse de datos, son:
Select link from TABLALINKS where hash1='x' and hash2='x' and hash3='x'

Cual de esos 2 tipos de indices me conviene?


Otra pregunta TIFA:
que implica esto:  DECIMAL( 12, 0 )
Porque la coma y el 0???


Otra pregunta mas:
Tifa, por favor, me gustaria que me respondas algo:
el numero que devuelve el crc32, que longitud maxima tiene? yo supongo tener unas cuantas entradas en la base de datos, tal vez entrando a las 12 cifras..
Si me dices que NO HABRAN COLICIONES, entonces, hoy mismo me pongo a modificar todo
#469
Y Manu, no hay manera de crear un diccionario de ese tipo, pero sin la clave? porque, no se ni que ponerle, no utilizaré la 1º clave.

Probaré hoy.. Pero: ¿Dictionary, no acepta entradas duplicadas?
#470
Es verdad lo que dices Vertex...
En cuanto a ocupar mas procesamiento, eso no es tanto problema cuando estas pagando un hosting que no te limita en ese uso (mi caso), pero el limite si esta en el espacio

Es muy probable que en un futuro (no muy lejano) haga lo que tu dices, pero para ello, antes hay que crear un hermosoooo analizador...

Ahora me pondre con las pruebas que prometi

Aqui un documento importante sobre el tema:
http://www.nuevastecnologias.com.ar/2010/04/como-ahorrar-espacio-en-una-base-de.html