【问题标题】:Using MySQL databases in Mathematica在 Mathematica 中使用 MySQL 数据库
【发布时间】:2011-07-28 18:04:53
【问题描述】:

我已经看到可以使用 Input Needs["DatabaseLink"] 和 conn = OpenSQLConnection[JDBC["MySQL(Connector/J)", "yourserver/yourdatabase"], "Username" -> "yourusername", "Password" -> "yourpassword"] 在 Mathematica 和 MySQL 数据库之间建立连接(以防有人想尝试一下)。顺便提一下,DatabaseLink here 的文档.

有没有人有以这种方式使用 Mathematica 的经验,可能是为了分析数据库中包含的数据?是否存在明显的缺点(速度、所需的内存等)?

【问题讨论】:

  • 我用它来分析一个相当大的工业 Oracle 数据库的元数据,在 XML Hibernate 映射的半自动更正的上下文中(我需要它的 Java 项目使用 Hibernate 作为 ORM 层) 由于数据库中的更改(表名、列名等)。它对我很有用,但由于我对元数据最感兴趣,我没有将大量数据从数据库导入 Mathematica 或提交回 db,因此无法评论性能。不过我希望它是体面的。
  • 非常感谢您的意见。实际上,您解决了我正在考虑的一个问题,即插入回数据库。鉴于 Mathematica 可以完成的大量数据操作,肯定有一些应用程序通过 Mathematica 使用插入。很高兴知道它在其他情况下也能很好地工作,尽管性能肯定是一个问题。
  • 与 MySQL 无关,但如果您想要快速数据库访问,也值得一看的是 QLink for TokyoCabinet
  • 顺便说一句,东京内阁似乎已被Kyoto Cabinet取代......也许QLink需要更新。这些类型的数据库很自然地用于存储 Mathematica 数据,因为“数据库是一个包含记录的简单数据文件,每个记录都是一对键和一个值......既没有数据表的概念,也没有数据类型......”
  • @Simon - 感谢一百万分享链接。我以前从未遇到过这些数据库工具(相信我,我为 Mathematica 代码/好东西做了很多钓鱼)。如果您还没有这样做,您应该将它们添加到 Wiki。您可能还会提到 Sal Mangano 在 Kdb+ 上的演示(YouTube 上的视频)。很酷的东西。

标签: mysql database wolfram-mathematica


【解决方案1】:

我没有将DatabaseLink` 与 MySQL 一起使用,但我已将它广泛用于 Oracle、SQL Server 和 HSQLDB。我的大部分DatabaseLink` 使用都在 Windows 上的 Mathematica 版本 6 到 8 上。我已经将它用于读取和写入,有时用于非常大的数据集。我的经验是该设施按预期工作。我没有遇到任何涉及性能或记忆的异常情况。我希望您会发现 Mathematica 中的 SQL 访问与您在其他语言中的体验相当。特别是,它的执行与使用 Java 非常相似——大概是因为 Mathematica 在内部使用 Java 来完成所有繁重的工作。

我会提到在 Mathematica 中执行查询的“明显”方式SQLExecute 会将整个结果集读入内存。如果您想在不耗尽内存的情况下处理大型结果集,请查看结果集函数 SQLResultSetOpen et al

有关在 Mathematica 中使用 SQL 的一个非常基本的示例(使用 HSQLDB),请参阅我对 The best way to construct a function with memory 的回复。

【讨论】:

  • 很好的答案,很高兴了解结果集 (reference.wolfram.com/mathematica/DatabaseLink/tutorial/…)。顺便问一下,您在 Mathematica 中以及在使用 Mathematica 之后如何处理您的数据?
  • @Robert 我对这个问题没有很好的简短回答。示例包括对软件开发团队的运营数据进行数据挖掘,或者将跨结构更改的数据迁移到复杂的数据库模型。在这些示例中,Mathematica 主要用于可视化、跨技术数据访问和原型设计。
  • 不用担心没有给出“好的简短答案”。我只是想知道您的应用程序所需的性能。非常感谢。
【解决方案2】:

我最近使用数据库来加速 Manipulate[] 块。

如果没有数据库,则需要在内存中访问来自 150 MB ASCII 文件的基本数据。结果,Manipulate[] 块变慢了。 PackedArray[] 可能会有所帮助。我没有对此进行调查。

使用数据库,访问单个数据集的速度比Select[] 块稍慢,但内存占用减少了近 10 倍。

我会说去吧。

【讨论】:

  • 感谢您的回答。嗯,似乎 Mathematica 有能力处理这种情况。我很惊讶它的使用并没有更广泛。我会问你和 WReach 一样的问题。使用 Mathematica 处理数据后,您做了什么?
  • @Robert Smith:这个应用是机载地球物理数据的QC。选择一条线后,我需要绘制 4 个图、两个基于线的图和至少一个基于点的图,这样我就可以确定要从最小二乘反演方案中省略哪些数据点。 Manipulate[] 块在线路上方,然后在每条线路中的车站上方,1 -> 37,然后 1 ->(最多 5000)。完成的应用程序会将一堆整数写回数据库,指示应保留哪些通道。我正在使用一个 sqlite 数据库。唯一令人讨厌的方面是在 Mathematica 中编写数据库。
  • 在您发表评论后,似乎使用 Mathematica 完成一项相对密集的任务并不算太糟糕。非常感谢!
  • 顺便说一句,我会接受这个答案,因为它是第一个发布的,但是,所有的答案和 cmets 都非常有用。
猜你喜欢
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-11
  • 2012-08-31
  • 1970-01-01
  • 2011-01-28
相关资源
最近更新 更多