什么是最简单的数据库用于Python和Matlab?

时间:2012-06-15 21:27:04

标签: python database matlab

我需要操纵大量的数字/文本数据,总共100亿个条目,理论上可以组织为1000个10000 * 1000个表。 大多数计算需要每次对一小部分数据(特定行或列)执行,这样我就不需要同时处理所有数据。

因此,我有兴趣将数据存储在某种数据库中,这样我就可以轻松搜索数据库,检索符合定义条件的多个行/列,进行一些计算并更新数据库。数据库应该可以用Python访问和Matlab,我主要使用Python来创建原始数据并将其放入数据库和Matlab进行数据处理。

整个项目在Windows 7上运行。什么是最好的,主要是我可以用于此目的的最简单的数据库?我根本没有数据库经验。

4 个答案:

答案 0 :(得分:7)

我会推荐SQLite。默认的Python安装已经绑定了它。

使用安装相应的SQLite Windows安装程序。

要创建数据库,您可以执行类似的操作(来自sqlite3文档):

import sqlite3

conn = sqlite3.connect('example.db')

c = conn.cursor()

# Create table
c.execute('''CREATE TABLE stocks
             (date text, trans text, symbol text, qty real, price real)''')

# Insert a row of data
c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY','RHAT',100,35.14)")

# Save (commit) the changes
conn.commit()

# We can also close the cursor if we are done with it
c.close() 

要导入Matlab,您可以使用mksqlite

有关详细信息,您可能需要结帐: http://labrosa.ee.columbia.edu/millionsong/pages/sqlite-interfaces-python-and-matlab

答案 1 :(得分:3)

IMO只是使用文件系统,文件格式可以在MATLAB和Python中读/写。数据库通常意味着关系模型(不包括No-SQL模型),这只会增加复杂性。

更倾向于MATLAB,您可以使用scipy.io.loadmat / scipy.io.savemat函数直接操作SciPy中的MAT文件。这是用于存储数据的本机MATLAB格式,具有save / load函数。

除非你真的需要数据库,否则请忽略我的答案:)

答案 2 :(得分:3)

PostgreSQL的优点

如果您需要处理更复杂类型的数据(例如数组),这是合理的,恕我直言, 使用PostgreSQL。从一方面它允许存储比SQLite更复杂的类型。从另一方面 (与MySQL之类的一些关系数据库相比)PostgreSQL完全符合ACID。 简而言之,对于高度结构化的数据,表格形式和要求,PostgreSQL是一个很好的选择 更复杂的数据类型,如数组。最后,但并非最不重要的是,PostgreSQL是免费的,开源的开源软件 由一个由几家公司和个人贡献者组成的国际团队。

Python to PostgreSQL

从Python访问PostgreSQL有什么问题,例如,PostgreSQL有几个Python驱动程序, Psycopg2PyGreSQL(你可以看一下 在这里的一些这样的驱动列表:https://wiki.postgresql.org/wiki/Python)。

Matlab中的PostgreSQL连接器及其性能

Matlab各自的连接器怎么样,有几种解决方案。首先,您可以使用标准 Matlab数据库工具箱通过直接JDBC连接与PostgeSQL配合使用。但Matlab数据库工具箱有 关于性能,数量和要处理的数据类型的一些潜在限制。例如,差不多 不可能将它用于数组或基本上大量的数据(大约1Gb或更多)。可以使用JDBC 直接来自Matlab(对于你可以使用的数组,例如dbarray package)。 但恕我直言,它相当慢,并且经常导致大数据情况下缺乏Java堆内存(以及简单增加Java堆内存) 大小可能不是灵丹妙药)。因此,只有在需要处理相对少量数据的情况下,这些方法才有用 这部分的表现并不重要。另一种解决方案基于libpq。例如,有一个 用C ++编写的免费包mexPostgres。这个库 基于文本表示(来自libpq的PQgetvalue函数)解析数据,并且只针对非常有限的数据类型列表 (事实上​​,它们是标量数字和逻辑,时间,日期,时间戳和间隔以及字符串,数组再次出现 范围)。最后,还有另一种商业解决方案。这是一个高性能的PostgreSQL 客户端库在C语言中100%写入并基于名为PgMex的libpq。主要(但不是单一) PgMex与mexPostgres的区别(尽管两个库都基于libpq)是PgMex提供的 Matlab和PostgreSQL之间的二进制数据传输,无需任何文本解析。同时,所有这些都是在Matlab友好的基础上完成的 和本机方式(以矩阵,多维数组,结构和任意其他Matlab格式的形式)。至于表现, 可以从下面的图片中估算Matlab数据库工具箱和PgMex的数据插入(关注点是什么) 数据检索,初步结果表明,PgMex比最简单的Matlab数据库工具箱快约3.5 标量数值数据的例子):

The case of scalar numeric data The case of arrays

此处将来自Matlab数据库工具箱的fastinsertdatainsert的效果与batchParamExec的效果进行比较 来自PgMex(详见https://pgmex.alliedtesting.com/#batchparamexec)。第一张图是针对标量数字数据的情况,第二张图是针对数组的。 每个图的端点对应于通过相应方法传递到数据库中的某个最大数据量而没有任何错误。 数据量大于该最大值(特定于每个方法)会导致“Java堆内存不足”问题 (每个实验的Java堆大小在每个图的顶部指定)。 有关实验的更多详细信息,请参阅以下内容 paper with full benchmarking results for data insertion

编辑:最新版本的PgMex可用于免费学术许可。

答案 3 :(得分:2)

SQLite很容易设置,但我对MySQL没有任何问题。有可用的连接器,并且可以非常无缝地工作。

http://www.mathworks.com/matlabcentral/fileexchange/8663-mysql-database-connector

我正在运行一个类似的项目,我使用Matlab进行获取和分析,并使用Ruby on Rails发布大量的股票市场数据。使用非常大的数据集,这个解决方案似乎运作良好。从历史上看,SQLite3对大型数据集的性能不如MySQL或PostgreSQL,这也是我推荐切换的原因。