Использование баз данных MySQL в Mathematica

Я видел, как можно установить связь между базами данных Mathematica и MySQL с помощью Input Needs["DatabaseLink "] и conn = OpenSQLConnection[JDBC["MySQL(Connector/J)", "yourserver/yourdatabase"], "Username" -> "yourusername", "Password" -> "yourpassword"] (в случае, если кто-то хочет попробовать). Документация DatabaseLink здесь, кстати.

Есть ли у кого-нибудь опыт использования Mathematica таким образом, возможно, для анализа данных, содержащихся в базе данных? Существуют ли очевидные недостатки (скорость, память и т.д.)?

Ответ 1

Недавно я использовал базы данных для ускорения блока Manipulate[].

Без базы данных необходимы важные данные из файла ASCII 150 МБ в памяти для доступа. В результате блок Manipulate[] замедлился. Возможно, что PackedArray[] помогло бы. Я не исследовал это.

В базе данных скорость доступа отдельных наборов данных немного медленнее, чем блок Select[], но площадь памяти уменьшается почти в 10 раз.

Я бы сказал, иди за ним.

Ответ 2

Я не использовал DatabaseLink` с MySQL, но я использовал его с Oracle, SQL Server и HSQLDB. Большая часть моего использования DatabaseLink` использовалась в версиях с 6 по 8 в Mathematica в Windows. Я использовал его для чтения и записи, иногда с очень большими наборами данных. Мой опыт в том, что объект работает так, как ожидалось. Я не сталкивался с какими-либо необычными ситуациями, связанными с производительностью или памятью. Я ожидаю, что вы найдете SQL-доступ в Mathematica сопоставимым с тем, что вы испытали на других языках. В частности, он очень похож на использование Java - по-видимому, потому, что Mathematica использует Java внутри себя, чтобы выполнить весь тяжелый подъем.

Я упомянул, что "очевидный" способ выполнения запросов в Mathematica, SQLExecute, будет считывать весь набор результатов в память, Если вы хотите работать с большими наборами результатов без исчерпания памяти, взгляните на функции набора результатов SQLResultSetOpen и др..

Для очень простого примера использования SQL в Mathematica (с использованием HSQLDB) см. мой ответ на Лучший способ создания функции с памятью.