用于大型数据集的sqlite或mysql

时间:2011-06-11 14:01:44

标签: mysql sqlite r

我正在使用大型数据集(数百万条记录,有时数百万条),并希望使用与R链接良好的数据库程序。我正在尝试在mysql和sqlite之间做出决定。数据是静态的,但我需要做很多查询。

在此link to sqlite help中,它声明:

“默认页面大小为1024字节,SQLite数据库的大小限制为2 TB(241字节)。即使它可以处理更大的数据库,SQLite也会将整个数据库存储在单个磁盘文件和许多文件系统中将文件的最大大小限制为小于此值。因此,如果您正在考虑如此规模的数据库,您最好考虑使用客户端/服务器数据库引擎,将其内容分布在多个磁盘文件中,也可能跨多个卷。 “

我不确定这意味着什么。当我尝试使用mysql和sqlite时,似乎mysql速度更快,但我还没有构建非常严格的速度测试。我想知道,由于数据集的大小,mysql对我来说是否比sqlite更好。上面的描述似乎表明可能是这种情况,但我的数据不在2TB附近。

有一个discussion on stackoverflow触及了这个并引用了相同的sqlite信息页面,但它并没有完全解决这个问题。

我很欣赏有关理解文件系统中最大文件大小限制的任何见解,以及这会如何影响索引表和运行查询的速度。这可以帮助我决定使用哪个数据库进行分析。

4 个答案:

答案 0 :(得分:6)

SQLite数据库引擎将整个数据库存储到单个文件中。对于非常大的文件,这可能不是非常有效(SQLite的限制是2TB,正如您在帮助中找到的那样)。此外,SQLite一次仅限于一个用户。如果您的应用程序是基于Web的,或者最终可能是多线程的(例如Android上的AsyncTask),那么mysql可能就是这样。

就个人而言,由于你已经完成了测试并且mysql更快,我只是选择了mysql。它将在未来更具可扩展性,并允许您做更多。

答案 1 :(得分:4)

  

我不确定这意味着什么。当我尝试使用mysql和sqlite时,似乎mysql速度更快,但我没有构建非常严格的速度测试。

简短版本是:

  1. 如果您的应用需要适合手机或其他嵌入式系统,请使用SQLite。这就是它的设计目标。

  2. 如果您的应用可能需要超过 一个 并发连接,请不要使用SQLite。使用PostgreSQL,MySQL和InnoDB等

答案 2 :(得分:3)

似乎(在R中,至少),SQLite对于 ad hoc 分析非常棒。使用RSQLitesqldf软件包,可以轻松加载数据并开始使用。但是对于你会反复使用的数据,在我看来MySQL(或SQL Server)是要走的路,因为它在修改数据库方面提供了更多的功能(例如,添加或更改密钥)

答案 3 :(得分:1)

SQL,如果您主要将其用作Web服务。 SQLite,如果您希望它能够脱机运行。

SQLite通常要快得多,因为大多数(或所有)数据/索引都将缓存在内存中。但是,在SQLite的情况下。如果数据是跨多个表,甚至是多个SQLite数据库文件分开的,根据我的经验到目前为止。对于甚至数百万条记录(虽然我还有100万条记录),它远比SQL(补偿延迟/等)更有效。但是,当记录在不同的表中拆分时,查询特定于这些表(dun查询所有表)。

一个例子是在简单游戏中使用的项目数据库。虽然这可能听起来不多,但是即使是变化,也会发出UID。因此,发电机很快就可以快速计算出超过一百万套具有变化的“统计数据”。然而,这主要是由于每组1000条记录在不同的表之间分配。 (因为我们主要通过其UID拉取记录)。虽然分裂的表现没有得到适当的测量。我们得到的查询比SQL快10倍(主要是由于网络延迟)。

有趣的是,我们最终将数据库减少到几千个条目,项目[pre-fix] / [suf-fix]确定变化。 (就像暗黑破坏神一样,只是它被隐藏了)。事实证明在一天结束时要快得多。

另一方面,我的案例主要是由于查询一个接一个排队(等待前面的查询)。但是,如果您能够同时对服务器执行多个连接/查询。从客户端开始,SQL的性能下降得到了更多的补偿。假设这些查询不会彼此分支/交互(例如,如果得到结果,则查询这个,否则)