elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 08:33  


Tema destacado: Últimos eventos sobre seguridad/inseguridad

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (Moderador: [D4N93R])
| | | |-+  Que tipo de lista dinamica me conviene utilizar?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Que tipo de lista dinamica me conviene utilizar?  (Leído 2,861 veces)
Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Que tipo de lista dinamica me conviene utilizar?
« en: 8 Febrero 2010, 07:37 »

Hola gente, les comento que acabo de terminar un indexador para un buscador mio (no es un buscador como google)
La cuestion, es que tengo varios hilos que acceden de forma sincronizada (Synklock) a un Generic.coleccion.List(of String)
Dentro del Synklock miro si la cadena que quiero agregar existe (con .Contains) y si no se encuentra, entonces e hago un .add

Cual es el problema? el problema está en que cuando el array comienza a tener unos cuantos millones de Strings (de 10 millones para arriba), la busqueda con el .Contains se pone demasiado LENTA.. y como sarban, eso no es muy bueno que suceda dentro de un Synklock, donde tengo unos 500 hilos por detras esperando para entrar...
El 98% del tiempo los hilos se la pasan esperando ahí para entrar.. ya que tarda demasiado en devolver el resultado el .Contains

Entonces pense en otro tipo de lista.. de esas que no se agregar los items repetidos...
No se bien si existen esas listas en vb.net, pero sé que en JAVA si, porque las utilice (treeset o hashset)

Conocen algun tipo de array de ese tipo, para que simplemente haga un .add y si ya esta el item, que lo borre solo, y si no esta, que lo agregue?

Gracias chicos!


En línea

MANULOMM


Desconectado Desconectado

Mensajes: 559


Erepublik.com


Ver Perfil
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #1 en: 9 Febrero 2010, 04:15 »

lo mejor para esto es utilizar un diccionario, y segundo para hacer la busqueda utiliza linq sera mas rapido.
10 millones es un volumen muy alto para tener en memoria, por que no utilzas un repocitorio fisico, te ingenias algo con estadisticas o simplemente utilizas sql para eso... si lo haces en memoria te recomiendo mires LINQ Paralelo pero esto solo es para .net framework 4

Atentamente,

Juan Manuel Lombana
Medellín - Colombia


En línea


Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #2 en: 9 Febrero 2010, 05:24 »

Gracias manu..
A ver si me asesoras un poco mas con el tema de DIccionarios y LINQ

Te comento Manu, que baje el tamaño maximo del array a 2.000 items.. cuando llega a 2.000 los hilos que trabajan en el "AREA 1", esperan que los de "AREA 2" analicen cada item y baje a menos de 1.000 items, así se reactivan los de "AREA 1"


Me gustaria que me digas como es el tema de los Diccionarios...
Como es la clase a crear?
Los items que se agrean quedan al final? se auto ordenan? no pueden entrar items repetidos? que me dices?

Me gustaria tener como un "LIST" simplemente con el plus de que no se agreguen los items repetidos.. y que se ingresen al final los items al darle add.

Tengo una base de datos MySQL Manu, te comento como funciona el programa:

20 hilos, cada uno agarra un link de la base de datos, descarga su codigo fuente, y agrega nuevamente a la base de datos todos los links a otras webs que encontro en ese codigo fuente..
En realidad.. todos agregan los nuevos links a un array (list), y luego, cuando todos terminan (algo así), se pasan todos a la base de datos (donde muchos no se agregan por estar repetidos)

Tambien los mismos links buscan imagenes.. y agregan a otro list....

Ambos list me gustarian que no tengan ni imagenes ni links repetidas...
Tu me dices que recomiendas un Diccionario?


Y para que dices de utilizar LINQ?
En línea

MANULOMM


Desconectado Desconectado

Mensajes: 559


Erepublik.com


Ver Perfil
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #3 en: 12 Febrero 2010, 03:58 »

haber segun entendi estas haciendo un Bot como el de google o algo asi...

envez de crear un List<> creas un Dictionary<string,string> el primer parametro del Diccionario es un indice lo que optimizara tu busqueda. en realidad puede ser de cualquier tipo, el segundo es el tipo de lo que guardas en tu caso el tipo del List<>.

una recomendacion por que no vas consultado y guardando y para evitar que se repitan en la BD utilizas un Indice Unico... asi se llaman en SQL Server nose en MySQL como se llamaran.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia
En línea


seba123neo


Desconectado Desconectado

Mensajes: 3.214



Ver Perfil WWW
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #4 en: 12 Febrero 2010, 04:17 »

pregunta ¿ para que descargas el codigo fuente ?
En línea

Mucha gente, especialmente la ignorante desea castigarte por decir la verdad, por ser correcto, por ser tú. Nunca te disculpes por ser correcto, o por estar años delante de tu tiempo.
Si estas en lo cierto, y lo sabes, que hable tu razón. Incluso si eres una minoria de uno solo, la verdad sigue siendo la verdad. M. Gandhi
Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #5 en: 12 Febrero 2010, 06:43 »

Manu, obviamente que las ingreso a una base de datos, con clave unica.. Pero para agilizar el procesamiento y demas, hago el traspaso del array: "LinksNuevos" una vez que se hayan procesado 50 webs.. Así evito miles y miles de entradas a la abse de datos...
Por el tema de que una E/S, es muy muchisimo mas lenta que una comprobacion si esta o no esta una cadena dentro de un array..

Sebas, te respondo:
Descargo el codigo fuente de cada web para analizarle sus links, y así sucesivamente.
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #6 en: 12 Febrero 2010, 06:57 »

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?
En línea

MANULOMM


Desconectado Desconectado

Mensajes: 559


Erepublik.com


Ver Perfil
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #7 en: 12 Febrero 2010, 20:03 »

la clave seria por ejemplo un GUID o un HASH apartir de la cadena, o la misma cadena asi no podras tener indices repetidos,  pero pensandolo bien solo guardas la cadena... asi que seria lo mismo.....

haber si entendi bien.
entras a una web descargas su codigo fuente analisas los vinculos y los guardas.... yo lo haria todo contra la bd, al fin y al cabo las entradas multiples a la BD el motor de la misma las controla con hilos. o por lo menos asi es en SQL.

No logro entender por que utilizas esas listas tan exageradamente grandes.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia
En línea


Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #8 en: 12 Febrero 2010, 20:24 »

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
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #9 en: 12 Febrero 2010, 20:42 »

Por lo que veo:
Código
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?
En línea

seba123neo


Desconectado Desconectado

Mensajes: 3.214



Ver Perfil WWW
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #10 en: 13 Febrero 2010, 04:47 »

Sebas, te respondo:
Descargo el codigo fuente de cada web para analizarle sus links, y así sucesivamente.

¿ para que si se puede obtener los links sin descargar nada al disco ?

otra cosa , yo no me preocuparia por los items duplicados, otra forma que podes usar es cada cierto tiempo (por ejemplo cada vez que ingresaron 1000 links) ejecutar una consulta que elimine los duplicados de la base de datos, y asi te ahorras de estar consultadno cada uno si existe, eso seria mucho mas rapido.
« Última modificación: 13 Febrero 2010, 04:50 por seba123neo » En línea

Mucha gente, especialmente la ignorante desea castigarte por decir la verdad, por ser correcto, por ser tú. Nunca te disculpes por ser correcto, o por estar años delante de tu tiempo.
Si estas en lo cierto, y lo sabes, que hable tu razón. Incluso si eres una minoria de uno solo, la verdad sigue siendo la verdad. M. Gandhi
Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #11 en: 13 Febrero 2010, 04:53 »

Sebas, te respondo:
Descargo el codigo fuente de cada web para analizarle sus links, y así sucesivamente.

¿ para que si se puede obtener los links sin descargar nada al disco ?

otra cosa , yo no me preocuparia por los items duplicados, otra forma que podes usar es cada cierto tiempo (por ejemplo cada vez que ingresaron 1000 links) ejecutar una consulta que elimine los duplicados de la base de datos, y asi te ahorras de estar consultadno cada uno si existe, eso seria mucho mas rapido.
Y quien dijo que descargo a la pc en modo de archivo? Puedo descargalos a la RAM...
Pero igualmente, esto no tiene nada que ver con el tema

Lo que dices de preocuparse por el tiempo de ver si esta o no el link, eso lo soluciono con una lista que no acepte cadenas duplicadas..  y Tio, justamente por ese tema abrí este post...
« Última modificación: 13 Febrero 2010, 04:54 por Skeletron » En línea

seba123neo


Desconectado Desconectado

Mensajes: 3.214



Ver Perfil WWW
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #12 en: 13 Febrero 2010, 04:55 »

me imagine que era a la memoria sino seria lentisimo, y creo que si tiene que ver con el tema, estan hablando de los duplicados y yo dije que con una consulta eliminas los duplicados de una.
En línea

Mucha gente, especialmente la ignorante desea castigarte por decir la verdad, por ser correcto, por ser tú. Nunca te disculpes por ser correcto, o por estar años delante de tu tiempo.
Si estas en lo cierto, y lo sabes, que hable tu razón. Incluso si eres una minoria de uno solo, la verdad sigue siendo la verdad. M. Gandhi
Skeletron


Desconectado Desconectado

Mensajes: 1.686


A long way to go


Ver Perfil WWW
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #13 en: 13 Febrero 2010, 04:56 »

me imagine que era a la memoria sino seria lentisimo, y creo que si tiene que ver con el tema, estan hablando de los duplicados y yo dije que con una consulta eliminas los duplicados de una.


De que consulta hablas?
En línea

seba123neo


Desconectado Desconectado

Mensajes: 3.214



Ver Perfil WWW
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #14 en: 13 Febrero 2010, 04:59 »

haces un DELETE FROM Tabla WHERE link = ( esto buscalo vos  :P) ....y te elimina los duplicados de la base de datos....

y obvio el error que te tira antes, no podes ingresar en una coleccion algo con la misma clave.
En línea

Mucha gente, especialmente la ignorante desea castigarte por decir la verdad, por ser correcto, por ser tú. Nunca te disculpes por ser correcto, o por estar años delante de tu tiempo.
Si estas en lo cierto, y lo sabes, que hable tu razón. Incluso si eres una minoria de uno solo, la verdad sigue siendo la verdad. M. Gandhi
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con una propiedad tipo lista en un custom control « 1 2 »
.NET
<ИΘZIЭ(ŦB> 25 2,987 Último mensaje 22 Marzo 2011, 21:21
por <ИΘZIЭ(ŦB>
lista con matriz dinamica
Programación C/C++
L·Storm! 2 1,176 Último mensaje 3 Agosto 2011, 03:03
por L·Storm!
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines