Muchachos ( y no tanto) de ClubSmalltalk Tengo un problema bastante grande y quería ver si alguien me puede dar un consejo. Tengo una colección de datos en archivos (no es exactamente una base de datos, pero parecido) entre los cuales hay duplicados. Los duplicados no son triviales, hay que hacer algunas cosas para detectarlos, pero ese no es el punto. Una vez que estos datos estén normalizados pueden persistirse de varias formas, tampoco ese es el problema. El cuello de botella es la búsqueda en las colecciones. Probé colecciones en memoria, colecciones Magma, Sandstone y el problema es siempre el mismo: el tiempo que tarda la búsqueda. Magma, que fue lo más eficiente, podría llegar a tardar 2 o 3 días para procesar 76000 registros. Un proceso similar, aunque con objetos más complicados, me tardó 2 semanas hace un tiempo. Los de Magma siempre me dicen que algo mal debo estar haciendo, pero nunca aparece que es eso que está mal. No creo estar haciendo nada que pueda hacer que un proceso que debería tardar algunas horas tarde varios días o más. Estoy a punto de intentar con una base SQL, lo cual me deprime mucho. ¿Alguien conoce algo para Squeak que permita detectar elementos en colecciones en forma más eficiente? ¿Algún truco al menos? Gracias -- Norberto Manzanos Instituto de Investigaciones en Humanidades y Ciencias Sociales (IdIHCS) FaHCE/UNLP - CONICET Calle 48 e/ 6 y 7 s/Nº - 8º piso - oficina 803 Tel: +54-221-4230125 interno 262 -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
supongo que algún problema de indices tenés... pero esto que digo es tan una trivialidad que seguro ya lo intentaste: armar un btree ordenado según el índice por el cual buscas los duplicados?
Saludos, E
-- El 03/11/2010, a las 4:04p.m., Norberto Manzanos escribió:
To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
Tambien podes implementar #= y #hash de alguna manera que corresponda,
y poner todo en un Set... 2010/11/3 Esteban Lorenzano <[hidden email]>: > supongo que algún problema de indices tenés... pero esto que digo es tan una > trivialidad que seguro ya lo intentaste: armar un btree ordenado según el > índice por el cual buscas los duplicados? > Saludos, > E > > El 03/11/2010, a las 4:04p.m., Norberto Manzanos escribió: > > Muchachos ( y no tanto) de ClubSmalltalk > > Tengo un problema bastante grande y quería ver si alguien me puede dar un > consejo. > Tengo una colección de datos en archivos (no es exactamente una base de > datos, pero parecido) entre los cuales hay duplicados. Los duplicados no son > triviales, hay que hacer algunas cosas para detectarlos, pero ese no es el > punto. > Una vez que estos datos estén normalizados pueden persistirse de varias > formas, tampoco ese es el problema. > El cuello de botella es la búsqueda en las colecciones. Probé colecciones en > memoria, colecciones Magma, Sandstone y el problema es siempre el mismo: el > tiempo que tarda la búsqueda. Magma, que fue lo más eficiente, podría llegar > a tardar 2 o 3 días para procesar 76000 registros. Un proceso similar, > aunque con objetos más complicados, me tardó 2 semanas hace un tiempo. Los > de Magma siempre me dicen que algo mal debo estar haciendo, pero nunca > aparece que es eso que está mal. No creo estar haciendo nada que pueda hacer > que un proceso que debería tardar algunas horas tarde varios días o más. > Estoy a punto de intentar con una base SQL, lo cual me deprime mucho. > ¿Alguien conoce algo para Squeak que permita detectar elementos en > colecciones en forma más eficiente? ¿Algún truco al menos? > > Gracias > > -- > Norberto Manzanos > Instituto de Investigaciones en Humanidades y Ciencias Sociales (IdIHCS) > FaHCE/UNLP - CONICET > Calle 48 e/ 6 y 7 s/Nº - 8º piso - oficina 803 > Tel: +54-221-4230125 interno 262 > > -- > To post to this group, send email to [hidden email] > To unsubscribe from this group, send email to > [hidden email] > > http://www.clubSmalltalk.org > > -- > To post to this group, send email to [hidden email] > To unsubscribe from this group, send email to > [hidden email] > > http://www.clubSmalltalk.org -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
Claro, te iba a sugerir lo que dice Andres, para eliminar los duplicados, pero supongo que ya habrás probado. Muy raro porque 76000 registros es poco, con tiempo de busqueda te referís a buscar un elemento?
Te admiro la paciencia que tenés porque, la verdad, si una busqueda en una colección me tarda más de 45 minutos le doy ALT + .
Sí querés pasame un ejemplo más concreto y pruebo con magma. Saludos, Facu
-- 2010/11/3 Andres Valloud <[hidden email]> Tambien podes implementar #= y #hash de alguna manera que corresponda, To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by EstebanLM
No, la verdad que no lo probé. Confié demasiado en que esa tarea la haría Magma. Voy a probarlo. Gracias.
2010/11/3 Esteban Lorenzano <[hidden email]>
-- Norberto Manzanos Instituto de Investigaciones en Humanidades y Ciencias Sociales (IdIHCS) FaHCE/UNLP - CONICET Calle 48 e/ 6 y 7 s/Nº - 8º piso - oficina 803 Tel: +54-221-4230125 interno 262 -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by Andres Valloud-5
El problema lo estas teniendo en la búsqueda en las colecciones ?? hiciste un profiling y encontraste que ese el punto?? o el acceso a la info.. La busqueda esta muy optimizada. Como dijo Andres reimplementando eso 2 metodos debería andar muy rapido.
Tengo una aplicación productiva que tiene ciento de miles de objetos en una colección y la busqueda no llega a segundos. Saludos.
-- 2010/11/3 Andres Valloud <[hidden email]> Tambien podes implementar #= y #hash de alguna manera que corresponda, To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by Manzanos
Norberto,
para buscar en una MagmaCollection usaste where: y configuraste los indices? Todavía no probé con 76000 registros, voy a probar. Abrazo
-- 2010/11/3 Norberto Manzanos <[hidden email]> No, la verdad que no lo probé. Confié demasiado en que esa tarea la haría Magma. Voy a probarlo. Gracias. To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by Andres Valloud-5
No lo probé, porque la comparación para detectar duplicados no es directa, tengo que comparar varias cadenas posibles para cada caso, lo que me parece que incrementaría mucho el tiempo de agregación a la colección. Pero tal vez me equivoque. Voy a probar eso, gracias.
2010/11/3 Andres Valloud <[hidden email]> Tambien podes implementar #= y #hash de alguna manera que corresponda, -- Norberto Manzanos Instituto de Investigaciones en Humanidades y Ciencias Sociales (IdIHCS) FaHCE/UNLP - CONICET Calle 48 e/ 6 y 7 s/Nº - 8º piso - oficina 803 Tel: +54-221-4230125 interno 262 -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by fvozzi
mmm... es cierto que 76k de registros es muy poco... esa búsqueda debería ser bastante rápida aún haciendo un full scan cada vez (con los objetos en memoria, claro)
El 03/11/2010, a las 4:27p.m., Facundo Vozzi escribió: Norberto, To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by Diogenes Moreira
Perdon si tiras algo mas de data podemos ver que onda..
2010/11/3 Diogenes Moreira <[hidden email]> El problema lo estas teniendo en la búsqueda en las colecciones ?? hiciste un profiling y encontraste que ese el punto?? o el acceso a la info.. La busqueda esta muy optimizada. Como dijo Andres reimplementando eso 2 metodos debería andar muy rapido. -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by fvozzi
Si, use where, un único índice con size 64 (más era terrible). También le pongo como readStrategy depth=0, porque en la mayoría de los casos no es necesario materializar los objetos. La prueba fue que con la estrategia default tardaba mucho más.
Cuando uso Magma, lo que hace es buscar por ese índice y luego hacer una búsqueda dentro de los resultados para hacer comparaciones mas finas. Con 2000 registros el tiempo de agregación era de 2 minutos, el del where de 14 min y la iteración posterior de 4 min. Ojo, me olvidé de decir que son 4 colecciones Magma. 2010/11/3 Facundo Vozzi <[hidden email]> Norberto, -- Norberto Manzanos Instituto de Investigaciones en Humanidades y Ciencias Sociales (IdIHCS) FaHCE/UNLP - CONICET Calle 48 e/ 6 y 7 s/Nº - 8º piso - oficina 803 Tel: +54-221-4230125 interno 262 -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by Manzanos
Hola Norberto,
> Ojo, me olvidé de decir que son 4 colecciones Magma. Jeje, justo te estaba por responder y ví que pusiste esto. Por lo menos creo que podemos acotar que el problema lo tenés con las colecciones magma. Nosotros acá solemos trabajar con colecciones mucho mas grandes que 76k de objetos en memoria donde se hacen búsquedas, comparaciones, agrupamiento, etc. y los tiempos de respuesta no superan los segundos, incluso con objetos que poseen un #= bastante power :-). Lamentablemente con la parte de Magma no te puedo ayudar, pero te aconsejo que uses una herramienta de profiling que te ayudará mucho a acotar el problema. Salud! Guiye Guillermo Sapaya Gerente de Desarrollo InfOil S.A. - www.infoil.com.ar Tronador 2244, C1430DKP Buenos Aires, Argentina TEL (5411)4542-9999 int. 122 ----- Original Message ----- From: Norberto Manzanos [mailto:[hidden email]] To: [hidden email] Sent: Wed, 03 Nov 2010 17:36:44 -0200 Subject: Re: [clubSmalltalk] Buscar en colecciones > Si, use where, un único índice con size 64 (más era terrible). También > le > pongo como readStrategy depth=0, porque en la mayoría de los casos no es > necesario materializar los objetos. La prueba fue que con la estrategia > default tardaba mucho más. > Cuando uso Magma, lo que hace es buscar por ese índice y luego hacer una > búsqueda dentro de los resultados para hacer comparaciones mas finas. Con > 2000 registros el tiempo de agregación era de 2 minutos, el del where de 14 > min y la iteración posterior de 4 min. > Ojo, me olvidé de decir que son 4 colecciones Magma. > > 2010/11/3 Facundo Vozzi <[hidden email]> > > > Norberto, > > para buscar en una MagmaCollection usaste where: y configuraste los > > indices? Todavía no probé con 76000 registros, voy a probar. > > > > Abrazo > > > > 2010/11/3 Norberto Manzanos <[hidden email]> > > > > No, la verdad que no lo probé. Confié demasiado en que esa tarea la > haría > >> Magma. Voy a probarlo. Gracias. > >> > >> 2010/11/3 Esteban Lorenzano <[hidden email]> > >> > >>> supongo que algún problema de indices tenés... pero esto que digo es > tan > >>> una trivialidad que seguro ya lo intentaste: armar un btree ordenado > según > >>> el índice por el cual buscas los duplicados? > >>> > >>> Saludos, > >>> E > >>> > >>> El 03/11/2010, a las 4:04p.m., Norberto Manzanos escribió: > >>> > >>> > >>> Muchachos ( y no tanto) de ClubSmalltalk > >>> > >>> Tengo un problema bastante grande y quería ver si alguien me puede dar > un > >>> consejo. > >>> Tengo una colección de datos en archivos (no es exactamente una base de > >>> datos, pero parecido) entre los cuales hay duplicados. Los duplicados no > son > >>> triviales, hay que hacer algunas cosas para detectarlos, pero ese no es > el > >>> punto. > >>> Una vez que estos datos estén normalizados pueden persistirse de varias > >>> formas, tampoco ese es el problema. > >>> El cuello de botella es la búsqueda en las colecciones. Probé > colecciones > >>> en memoria, colecciones Magma, Sandstone y el problema es siempre el > mismo: > >>> el tiempo que tarda la búsqueda. Magma, que fue lo más eficiente, > podría > >>> llegar a tardar 2 o 3 días para procesar 76000 registros. Un proceso > >>> similar, aunque con objetos más complicados, me tardó 2 semanas hace > un > >>> tiempo. Los de Magma siempre me dicen que algo mal debo estar haciendo, > pero > >>> nunca aparece que es eso que está mal. No creo estar haciendo nada que > pueda > >>> hacer que un proceso que debería tardar algunas horas tarde varios > días o > >>> más. > >>> Estoy a punto de intentar con una base SQL, lo cual me deprime mucho. > >>> ¿Alguien conoce algo para Squeak que permita detectar elementos en > >>> colecciones en forma más eficiente? ¿Algún truco al menos? > >>> > >>> Gracias > >>> > >>> -- > >>> Norberto Manzanos > >>> Instituto de Investigaciones en Humanidades y Ciencias Sociales (IdIHCS) > >>> FaHCE/UNLP - CONICET > >>> Calle 48 e/ 6 y 7 s/Nº - 8º piso - oficina 803 > >>> Tel: +54-221-4230125 interno 262 > >>> > >>> > >>> -- > >>> To post to this group, send email to [hidden email] > >>> To unsubscribe from this group, send email to > >>> [hidden email] > >>> > >>> http://www.clubSmalltalk.org > >>> > >>> > >>> -- > >>> To post to this group, send email to [hidden email] > >>> To unsubscribe from this group, send email to > >>> > [hidden email]<clubSmalltalk%[hidden email]> > >>> > >>> http://www.clubSmalltalk.org > >>> > >> > >> > >> > >> -- > >> Norberto Manzanos > >> Instituto de Investigaciones en Humanidades y Ciencias Sociales (IdIHCS) > >> FaHCE/UNLP - CONICET > >> Calle 48 e/ 6 y 7 s/Nº - 8º piso - oficina 803 > >> Tel: +54-221-4230125 interno 262 > >> > >> -- > >> To post to this group, send email to [hidden email] > >> To unsubscribe from this group, send email to > >> > [hidden email]<clubSmalltalk%[hidden email]> > >> > >> http://www.clubSmalltalk.org > >> > > > > -- > > To post to this group, send email to [hidden email] > > To unsubscribe from this group, send email to > > > [hidden email]<clubSmalltalk%[hidden email]> > > > > http://www.clubSmalltalk.org > > > > > > -- > Norberto Manzanos > Instituto de Investigaciones en Humanidades y Ciencias Sociales (IdIHCS) > FaHCE/UNLP - CONICET > Calle 48 e/ 6 y 7 s/Nº - 8º piso - oficina 803 > Tel: +54-221-4230125 interno 262 > > -- > To post to this group, send email to [hidden email] > To unsubscribe from this group, send email to > [hidden email] > > http://www.clubSmalltalk.org -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by Manzanos
Pregunta.. cuando encontras un duplicado los sacas de la collection de magma ??
Mira que magma tiene buena performace de read, pero para lo remove y los commit... le cuesta.. Por una mejora es que separes los objetos que tenes repetido en una colleccion y depues los saques.. se entiende
por otro lado si tenes el strategy en 0 y estas usando un colaborador para la igualación o la detección de duplicados la busqueda va ser bastante pesada, dado que en lugar de los colaboradores vas a tener proxies y cuando accedas magma va ir a buscar las instancias..
Probaste con strategy 1.. el default es 4 pero creo que este caso 1 o 2 es mejor. Saludos 2010/11/3 Norberto Manzanos <[hidden email]> Si, use where, un único índice con size 64 (más era terrible). También le pongo como readStrategy depth=0, porque en la mayoría de los casos no es necesario materializar los objetos. La prueba fue que con la estrategia default tardaba mucho más. To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
2010/11/3 Diogenes Moreira <[hidden email]> Pregunta.. cuando encontras un duplicado los sacas de la collection de magma ?? Probé las dos. Buscar en Magma antes de agregar y agregar todos y sacarlos después. En este caso lo que hacía no es sacarlo de la colección magma, sino hacer una colección temporaria con los que quedan y después intercambiarlas. Es un método que alguna vez me funcionó mejor que sacarlos directamente.
Ah, esto no lo probé. Me pareció que el default era 1.
-- Norberto Manzanos Instituto de Investigaciones en Humanidades y Ciencias Sociales (IdIHCS) FaHCE/UNLP - CONICET Calle 48 e/ 6 y 7 s/Nº - 8º piso - oficina 803 Tel: +54-221-4230125 interno 262 -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by Diogenes Moreira
Muchas gracias a todos.
Me da un poco de vergüenza admitir que la solución era simplemente usar Sets. Me pasa por confiar en herramientas en lugar de pensar simplemente en Smalltalk. Ya veré si uso Magma o no. SandStone me pareció tentador. Alguien lo uso? Saludos -- Norberto Manzanos Instituto de Investigaciones en Humanidades y Ciencias Sociales (IdIHCS) FaHCE/UNLP - CONICET Calle 48 e/ 6 y 7 s/Nº - 8º piso - oficina 803 Tel: +54-221-4230125 interno 262 -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
Yo lo usé. No me gustó :(
El 03/11/2010, a las 6:34p.m., Norberto Manzanos escribió: Muchas gracias a todos. To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by Manzanos
Glorp.. aunque con las limitaciones que te impone.. no deja de ser un ORM me ha dado muy buenos resultados..
Si vas usar pharo te recomiendo la version de SqueakDBX.. anda muy bien. Saludos
2010/11/3 Norberto Manzanos <[hidden email]> Muchas gracias a todos. -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by EstebanLM
Y porque no te gusto? Saludos, Guillermo Schwarz. -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
por varias cosas:
1) no me gustó que todo el modelo tuviera que extender SDActiveRecord 2) no me gustó el esquema de carga/descarga... a veces se me rompían cosas (onda, duplicaba valores en la imágen) 3) no le vi mejora, comparada con un sistemita de prevalencia simple (snapshot, tx log, backup) Saludos, Esteban El 03/11/2010, a las 6:40p.m., Guillermo Schwarz escribió:
To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by Manzanos
Cuando uno tiene un martillo lo único que ve son clavos!!
En busquedas incluso a veces es mejor construir un Set si no lo tenemos, aunque luego lo tiremos!! Saludos GallegO El día 3 de noviembre de 2010 18:34, Norberto Manzanos <[hidden email]> escribió: > Muchas gracias a todos. > Me da un poco de vergüenza admitir que la solución era simplemente usar > Sets. > Me pasa por confiar en herramientas en lugar de pensar simplemente en > Smalltalk. > Ya veré si uso Magma o no. SandStone me pareció tentador. Alguien lo uso? > > Saludos > > -- > Norberto Manzanos > Instituto de Investigaciones en Humanidades y Ciencias Sociales (IdIHCS) > FaHCE/UNLP - CONICET > Calle 48 e/ 6 y 7 s/Nº - 8º piso - oficina 803 > Tel: +54-221-4230125 interno 262 > > -- > To post to this group, send email to [hidden email] > To unsubscribe from this group, send email to > [hidden email] > > http://www.clubSmalltalk.org -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
Free forum by Nabble | Edit this page |