2011-07-28 21 views
12

He visto que es posible establecer una conexión entre las bases de datos de Mathematica y MySQL usando Input Needs["DatabaseLink "] y conn = OpenSQLConnection[JDBC["MySQL(Connector/J)", "yourserver/yourdatabase"], "Username" -> "yourusername", "Password" -> "yourpassword"] (en caso de que alguien quiera intentarlo) Documentación de DatabaseLink here, por cierto.Utilizando bases de datos MySQL en Mathematica

¿alguien tiene experiencia en el uso de Mathematica de esta manera, probablemente para analizar los datos contenidos en la base de datos? ¿hay desventajas obvias (velocidad, memoria necesaria, etc.)?

+0

Lo estaba usando para analizar metadatos de una base de datos de Oracle industrial bastante grande, en el contexto de la corrección semiautomática de las asignaciones XML Hibernate (el proyecto Java para el que lo necesitaba utilizaba Hibernate como capa ORM) debido a los cambios en una base de datos (nombres de tablas, columnas, etc.) Funcionó muy bien para mí, pero como estaba más interesado en los metadatos, no hice grandes importaciones de datos desde una base de datos a Mathematica o me volví a comprometer a db, por lo que no puedo comentar sobre el rendimiento. Aunque espero que sea decente. –

+0

Muchas gracias por su aporte. En realidad, abordó un problema que estaba considerando, es decir, hacer las inserciones en la base de datos. Dada la amplia gama de manipulaciones de datos que Mathamatica puede lograr, seguramente hay algunas aplicaciones que utilizan inserciones a través de Mathematica. Me alegra saber que puede funcionar muy bien en otros escenarios, aunque el rendimiento es ciertamente un problema. –

+0

No se trata de MySQL, pero también vale la pena ver si desea un acceso rápido a la base de datos es [QLink] (http://science.sander.su/QLink.htm) para [TokyoCabinet] (http://www.igvita.com/ 2009/02/13/tokyo-cabinet-beyond-key-value-store /). – Simon

Respuesta

7

recientemente he utilizado bases de datos para acelerar un Manipulate[] bloque

Sin el base de datos, se necesitaban datos esenciales de un archivo ASCII de 150 MB en la memoria para el acceso. Como resultado, el bloque Manipulate[] se ralentizó. Es posible que PackedArray[] haya ayudado. No investigué esto.

Con la base de datos, la velocidad de acceso de los conjuntos de datos individuales es ligeramente más lento que un bloque Select[], pero el consumo de memoria se ha reducido por un factor de casi 10.

yo diría que ir a por ello.

+0

Gracias por su respuesta. Uhm, parece que Mathematica está bien equipada para lidiar con esta situación. Me sorprende que su uso no esté más extendido. Le haré la misma pregunta que le hice a WReach. ¿Qué hiciste después de manipular tus datos con Mathematica? –

+0

@Robert Smith: la aplicación es QC de datos geofísicos en el aire. Después de seleccionar una línea, necesito trazar 4 gráficos, dos gráficos basados ​​en líneas y al menos un gráfico basado en puntos para poder determinar qué puntos de datos omitir de un esquema de inversión de mínimos cuadrados. El bloque Manipulate [] está sobre líneas, luego sobre estaciones en cada una de esas líneas, 1 -> 37, luego 1 -> (hasta 5000). La aplicación completada volverá a escribir un montón de enteros en la base de datos que indica qué canales deben conservarse. Estoy usando una base de datos sqlite. El único aspecto desagradable fue escribir el DB en Mathematica. – dwa

+0

Después de tu comentario, parece que usar Mathematica para una tarea relativamente intensiva no es tan malo. ¡Muchas gracias! –

10

No he usado DatabaseLink` con MySQL, pero lo he usado extensamente con Oracle, SQL Server y HSQLDB. La mayor parte de mi uso de DatabaseLink` ha estado en las versiones 6 a 8 de Mathematica, en Windows. Lo he usado tanto para leer como para escribir, a veces con conjuntos de datos muy grandes. Mi experiencia ha sido que la instalación funciona como se esperaba. No me encontré con ninguna situación inusual que implique rendimiento o memoria. Espero que encuentre que el acceso SQL en Mathematica es comparable a lo que ha experimentado en otros idiomas. En particular, funciona de manera muy parecida a usar Java, presumiblemente porque Mathematica usa Java internamente para hacer todo el trabajo pesado.

Mencionaré que la forma "obvia" de ejecutar consultas en Mathematica, SQLExecute, leerá todo el conjunto de resultados en la memoria. Si desea trabajar con grandes conjuntos de resultados sin quedarse sin memoria, eche un vistazo a las funciones del conjunto de resultados SQLResultSetOpen et al.

Para obtener un ejemplo muy básico del uso de SQL en Mathematica (utilizando HSQLDB), consulte mi respuesta a The best way to construct a function with memory.

+0

Excelente respuesta y es bueno saber acerca de los conjuntos de resultados (http://reference.wolfram.com/mathematica/DatabaseLink/tutorial/ResultSets.html). Por cierto, ¿qué hiciste con tus datos en Mathematica y después de usar Mathematica? –

+0

@Robert No tengo una buena respuesta corta a esa pregunta. Los ejemplos incluyen datos operativos de minería de datos de un equipo de desarrollo de software o la migración de datos a través de cambios estructurales a un modelo de base de datos complejo. En esos ejemplos, Mathematica se usó principalmente para visualización, acceso a datos de tecnología cruzada y creación de prototipos. – WReach

+0

No te preocupes por no dar una 'buena respuesta corta'. Solo quería saber el rendimiento necesario de su aplicación. Muchas gracias. –

Cuestiones relacionadas