Base de datos...sí o no

19/09/2009 - 20:14 por Alberto | Informe spam
Estoy haciendo un programa donde el usuario genera de modo visual un árbol.

Me interesa guardarlo y, en particular, necesito poder reestablecer el árbol
tal y como estaba antes. Es decir, a parte de la información de cada nodo
(que no es más que un texto) tengo que conocer sus coordenadas en pantalla y
las relaciones con sus nodos descendientes.

La duda que tengo es si merece la pena utilizar sqlServer Express o no.
Tengo miedo que sea "matar moscas a cañonazos".
Podría hacerlo en una base de datos de access pero me da un poco de pereza
porque tengo hecha una clase que me gestiona todas las comunicaciones con
sql server. Guardarlo en ficheros creo que puede ser un poco ineficiente,
sobre todo teniendo en cuenta que el usuaro, al cabo de un tiempo, tendrá
varios cientos de árboles almacenados.

Gracias por la ayuda.

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
19/09/2009 - 21:17 | Informe spam
"Alberto" wrote in message
news:
Estoy haciendo un programa donde el usuario genera de modo visual un
árbol.

Me interesa guardarlo y, en particular, necesito poder reestablecer el
árbol tal y como estaba antes. Es decir, a parte de la información de cada
nodo (que no es más que un texto) tengo que conocer sus coordenadas en
pantalla y las relaciones con sus nodos descendientes.

La duda que tengo es si merece la pena utilizar sqlServer Express o no.
Tengo miedo que sea "matar moscas a cañonazos".
Podría hacerlo en una base de datos de access pero me da un poco de pereza
porque tengo hecha una clase que me gestiona todas las comunicaciones con
sql server. Guardarlo en ficheros creo que puede ser un poco ineficiente,
sobre todo teniendo en cuenta que el usuaro, al cabo de un tiempo, tendrá
varios cientos de árboles almacenados.



Depende. Si el árbol no es muy grande, puedes almacenarlo en un archivo
XML, ya que la estructura del XML permite ir anidando nodos, y de esta
manera reflejar perfectamente la estructura del árbol. Tener unos cientos no
es problema, sobre todo si le permites al usuario irlos clasificando en
carpetas. Si no son muy grandes, también podrías meter varios árboles en un
mismo fichero; una vez más, la estructura del xml te lo permitiría casi sin
ningún esfuerzo de programación adicional.
Respuesta Responder a este mensaje
#2 Alberto
19/09/2009 - 22:31 | Informe spam
Los árboles son relativamente pequeños (son análisis sintácticos de
frases).

¿Utilizando XML la aplicación sería capaz de mostrarme rápidamente en una
ventana las frases (árboles) que están almacenadas aunque sean varios
cientos?

Soy novato totalmente en el uso de xml pero intenté hacer alguna prueba y
recuerdo que no logré modificar un valor.

Gracias.

"Alberto Poblacion"
escribió en el mensaje de noticias
news:%
"Alberto" wrote in message
news:
Estoy haciendo un programa donde el usuario genera de modo visual un
árbol.

Me interesa guardarlo y, en particular, necesito poder reestablecer el
árbol tal y como estaba antes. Es decir, a parte de la información de
cada nodo (que no es más que un texto) tengo que conocer sus coordenadas
en pantalla y las relaciones con sus nodos descendientes.

La duda que tengo es si merece la pena utilizar sqlServer Express o no.
Tengo miedo que sea "matar moscas a cañonazos".
Podría hacerlo en una base de datos de access pero me da un poco de
pereza porque tengo hecha una clase que me gestiona todas las
comunicaciones con sql server. Guardarlo en ficheros creo que puede ser
un poco ineficiente, sobre todo teniendo en cuenta que el usuaro, al cabo
de un tiempo, tendrá varios cientos de árboles almacenados.



Depende. Si el árbol no es muy grande, puedes almacenarlo en un archivo
XML, ya que la estructura del XML permite ir anidando nodos, y de esta
manera reflejar perfectamente la estructura del árbol. Tener unos cientos
no es problema, sobre todo si le permites al usuario irlos clasificando en
carpetas. Si no son muy grandes, también podrías meter varios árboles en
un mismo fichero; una vez más, la estructura del xml te lo permitiría casi
sin ningún esfuerzo de programación adicional.

Respuesta Responder a este mensaje
#3 Alberto Poblacion
20/09/2009 - 09:59 | Informe spam
"Alberto" wrote in message
news:
Los árboles son relativamente pequeños (son análisis sintácticos de
frases).

¿Utilizando XML la aplicación sería capaz de mostrarme rápidamente en una
ventana las frases (árboles) que están almacenadas aunque sean varios
cientos?



Leer desde disco a memoria un archivo xml no costará más tiempo que
leer la misma información desde una base de datos. En un ordenador moderno,
un archivo de 1 megabyte se lee en una fracción de segundo. El tiempo
necesario para decodificarlo y procesarlo puede ser muy poco o puede ser
mucho, dependiendo de dómo se haga. Por ejemplo, si lo cargas en un
XmlDocument y luego vas buscando cada nodo uno por uno con un
SelectSingleNode, probablemente tardará bastante. Pero si la estructura es
razonable, y puedes cargar cada parte de un golpe con SelectNodes, irá
bastente rápido. También, si la estructura es sencilla, puedes usar un
XmlTextReader. Esto irá a toda velocidad (más rápido que una base de datos)
pero requerirá que vayas procesando los nodos uno por uno en el orden en que
te lleguen (cosa que de todas maneras también tendrías que hacer si leyeses
desde base de datos, así que en este sentido no pierdes nada).

Soy novato totalmente en el uso de xml



Eso sí es malo. La curva de aprendizaje puede ser empinada, y
probablemente te costará mucho trabajo hacer algo que, si ya tuvieses el
tema dominado, sería relativamente sencillo. Además puede ser que no elijas
un mecanismo óptimo, entre los muchos que hay, y por tanto te funcione lento
algo que potencialmente podría ser muy rápido.

Una alternativa al xml es un archivo plano de texto. Símplemente graba
líneas de texto en un formato que tú conozcas, y luego vuélvelas a leer
cuando quieras recuperar la información.

Y otra más es serializar la información que tienes en memoria. Si toda
la información de tus árboles la tienes ya metida en una serie de objetos en
memoria, utiliza el serializador binario o el serializador Xml para volcar
de golpe todos los objetos a un archivo en disco. Cuando quieras
recuperarlo, deserializas el archivo y, con una sola sentencia, tienes de
nuevo en memoria todos tus objetos exactamente igual que estaban cuando los
salvaste. Este mecanismo puede ser interesante incluso aunque decidas usar
base de datos. Puedes usar un BLOB en un registro para guardar una
estructura serializada, consiguiendo así salvar de golpe en una operación
una serie de datos que de otra manera requerirían posiblemente grabar
múltiples campos en múltiples registros de varias tablas interrelacionadas.

pero intenté hacer alguna prueba y recuerdo que no logré modificar un
valor.



Para modificar un valor hay que traer todo el xml a memoria (cosa que, en
principio, ya habrías hecho antes para mostrar los datos), modificarlo en
memoria, y volverlo a grabar. No hay ninguna forma sencilla de hacerlo
directamente sobre el archivo. Esto también ocurre si usas un archivo de
texto o un archivo de datos serializados.
Respuesta Responder a este mensaje
#4 Fernando A. Gómez F.
21/09/2009 - 17:12 | Informe spam
Alberto wrote:
Estoy haciendo un programa donde el usuario genera de modo visual un árbol.

Me interesa guardarlo y, en particular, necesito poder reestablecer el
árbol tal y como estaba antes. Es decir, a parte de la información de
cada nodo (que no es más que un texto) tengo que conocer sus coordenadas
en pantalla y las relaciones con sus nodos descendientes.

La duda que tengo es si merece la pena utilizar sqlServer Express o no.
Tengo miedo que sea "matar moscas a cañonazos".
Podría hacerlo en una base de datos de access pero me da un poco de
pereza porque tengo hecha una clase que me gestiona todas las
comunicaciones con sql server. Guardarlo en ficheros creo que puede ser
un poco ineficiente, sobre todo teniendo en cuenta que el usuaro, al
cabo de un tiempo, tendrá varios cientos de árboles almacenados.

Gracias por la ayuda.



Hola,

me atrevo a sugerir que podrías emplear los DataSets como si estuvieras
trabajando con una base de datos, pero guardar los datos y leerlos desde
archivos XML, a través de DataSet.ReadXml [1] y DataSet.WriteXml. Esto,
si te sientes más cómodo trabajando con un DataSet.

Además, así en cualquier momento de la vida puedes sustituir los ReadXml
/ WriteXml por llamadas a un DataAdapter.Fill, y violà, podrás
trabajar con bases de datos.

[1]http://msdn.microsoft.com/en-us/lib...adxml.aspx

Una sugerencia, nada más. Saludines.

Fernando Gómez
www.fermasmas.com
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida