Использование баз данных 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) см. мой ответ на Лучший способ создания функции с памятью.