2011-07-28 73 views
12

我已經看到可以使用Input Needs["DatabaseLink「]和conn = OpenSQLConnection[JDBC["MySQL(Connector/J)", "yourserver/yourdatabase"], "Username" -> "yourusername", "Password" -> "yourpassword"](如果有人想嘗試一下)在Mathematica和MySQL數據庫之間建立連接。順便說一下DatabaseLink here的文檔。在Mathematica中使用MySQL數據庫

有沒有人有這樣使用Mathematica,大概分析包含在數據庫中的數據?是否有明顯的缺點(速度,所需的內存,等等)?

+0

我使用它來分析一個非常大的工業Oracle數據庫的元數據,在XML Hibernate映射(我需要它使用Hibernate作爲ORM層的Java項目)的半自動校正環境中,由於變化在數據庫中(表名,列名等)。它對我很好,但由於我主要對元數據感興趣,因此我沒有從數據庫向Mathematica進行大量數據導入,也沒有提交給數據庫,因此無法評論性能。儘管如此,我預計它會很體面。 –

+0

非常感謝您的意見。實際上,你解決了我正在考慮的一個問題,即將插入返回到數據庫。鑑於Mathamatica可以完成的大量數據操作,當然有一些應用程序使用Mathematica插入。很高興知道它可以在其他情況下工作,雖然性能肯定是一個問題。 –

+0

不是關於MySQL,但是如果你想快速訪問數據庫,[QLink](http://science.sander.su/QLink.htm)也是值得關注的[TokyoCabinet](http://www.igvita.com/ 2009年/ 02/13 /東京櫃超越鍵 - 值存儲/)。 – Simon

回答

7

我最近使用的數據庫來加快Manipulate[]經驗

沒有數據庫中,來自150 MB ASCII文件的基本數據需要在內存中進行訪問。因此,Manipulate[]區塊放緩。有可能PackedArray[]會有所幫助。我沒有調查這一點。

隨着數據庫,單個數據集的訪問速度比Select[]塊稍微慢一些,但內存佔用減少了我說去了近10

的一個因素。

+0

感謝您的回答。恩,看來Mathematica已經具備了處理這種情況的能力。我很驚訝它的使用不是更廣泛。我會問你向WReach提出的同樣的問題。用Mathematica處理數據後,你做了什麼? –

+0

@羅伯特史密斯:應用程序是機載地球物理數據的質量控制。選擇一條線後,我需要繪製4個圖,兩個基於線的圖和至少一個基於點的圖,這樣我才能確定哪些數據點可以從最小二乘反演方案中省略。 Manipulate []塊在線上,然後在每個線上的站上,1 - > 37,然後1 - >(最多5000)。完成的應用程序會將一堆整數寫回數據庫,指出應該保留哪些通道。我正在使用一個sqlite數據庫。唯一不愉快的方面是在Mathematica中編寫數據庫。 – dwa

+0

您的評論之後,似乎使用Mathematica進行相對密集的任務並不算太糟糕。非常感謝! –

10

我還沒有使用MySQL的DatabaseLink`,但我已經廣泛地使用它與Oracle,SQL Server和HSQLDB。在Windows上,我的DatabaseLink`的大部分用法都在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的回覆。

+0

好的答案和很好的瞭解結果集(http://reference.wolfram.com/mathematica/DatabaseLink/tutorial/ResultSets.html)。順便說一下,您在Mathematica中使用Mathematica後對數據做了什麼? –

+0

@羅伯特我對這個問題沒有很好的簡短回答。例子包括來自軟件開發團隊的數據挖掘操​​作數據,或將數據跨越結構變化遷移到複雜數據庫模型。在這些例子中,Mathematica主要用於可視化,跨技術數據訪問和原型設計。 – WReach

+0

不用擔心沒有給出'很好的簡短答案'。我只是想知道你的應用程序需要的性能。非常感謝。 –