【问题标题】:What the simplest database to use with both Python and Matlab?Python 和 Matlab 使用的最简单的数据库是什么?
【发布时间】:2012-06-18 23:31:34
【问题描述】:

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

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

整个项目在 Windows 7 上运行。我可以为此目的使用的最好且主要是最简单的数据库是什么?我之前完全没有数据库方面的经验。

【问题讨论】:

    标签: python database matlab


    【解决方案1】:

    我会推荐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

    【讨论】:

      【解决方案2】:

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

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

      当然除非你真的需要数据库,然后忽略我的回答:)

      【讨论】:

      • 这种方法有故障保护吗?如果正在写入数据并且发生某种崩溃,则数据文件似乎已损坏。
      • @Michael:什么都没有(除了操作系统提供的)。但我感觉 OP 正在创建数据一次,然后在 MATLAB 中进行分析,所以它真的不是问题。如果需要这样的功能,数据库是要走的路..
      • 我已经使用过这种方法,但它没有提供合适的解决方案,因为它不允许简单访问跨多个文件的数据,例如比较所有表的第一行。在此示例中,您应该打开 1000 个文件,每个文件有 10000 行,只是为了从每个文件中检索一行...
      • @amro 考虑到这里讨论的数据量,我知道我不会冒险使用直接文件。如果在处理过程中发生崩溃,重新导入所有数据会浪费大量时间。
      • @Sasha 如果您需要打开 1,000 个文件以从每个文件中读取 1 行,您的 database schema 可能有问题。
      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2015-05-24
        • 1970-01-01
        • 2010-11-22
        • 1970-01-01
        • 1970-01-01
        • 2011-09-24
        • 1970-01-01
        • 1970-01-01
        • 2012-04-25
        相关资源
        最近更新 更多