如何解决sqlite或mysql用于大型数据集
| 我正在使用大型数据集(上千万个记录,有时上亿个记录),并且想要使用与R链接良好的数据库程序。我试图在MysqL和sqlite之间做出选择。数据是静态的,但是我需要做很多查询。 在指向sqlite帮助的链接中,它指出: \“默认页面大小为1024字节,sqlite数据库的大小限制为2 TB(241字节)。即使它可以处理更大的数据库,sqlite也会将整个数据库存储在单个磁盘文件中,并且许多文件系统都限制了文件的最大大小不超过此大小。因此,如果您正在考虑如此规模的数据库,则最好考虑使用一种客户机/服务器数据库引擎,该引擎将其内容分布在多个磁盘文件中,并可能分布在多个卷中。” 我不确定这是什么意思。当我尝试使用MysqL和sqlite时,似乎MysqL速度更快,但是我还没有构建非常严格的速度测试。我想知道,由于数据集的大小,MysqL是否比sqlite更适合我。上面的描述似乎暗示可能是这种情况,但是我的数据几乎没有2TB。 关于stackoverflow的讨论触及了这个问题,并引用了相同的sqlite信息页面,但是并没有完全解决这个问题。 我很高兴能从文件系统中了解最大文件大小的限制,以及这如何影响索引表和运行查询的速度。这确实可以帮助我决定使用哪个数据库进行分析。解决方法
SQLite数据库引擎将整个数据库存储到一个文件中。对于非常大的文件(SQLite的限制为2TB,如您在帮助中所找到的),这可能不是非常有效。此外,SQLite一次只能限制一个用户。如果您的应用程序是基于Web的,或者最终可能是多线程的(例如Android上的
AsyncTask
),则mysql可能是可行的方法。
就个人而言,由于您已经完成了测试并且mysql速度更快,所以我只会使用mysql。它将在将来具有更大的可扩展性,并将使您做更多的事情。
,
我不确定这是什么意思。当我尝试使用mysql和sqlite时,似乎mysql速度更快,但是我还没有构建非常严格的速度测试。
简短的简短版本是:
如果您的应用需要适合手机或其他嵌入式系统,请使用SQLite。这就是它的设计目的。
如果您的应用可能需要多个并发连接,请不要使用SQLite。使用PostgreSQL,MySQL和InnoDB等
, 看起来(至少在R中),SQLite非常适合临时分析。使用RSQLite
或sqldf
软件包,加载数据和入门非常容易。但是对于反复使用的数据,在我看来,MySQL(或SQL Server)是必经之路,因为它在修改数据库(例如添加或更改键)方面提供了更多功能)。
,SQL(如果您主要将其用作Web服务)。
SQLite,如果您希望它能够脱机运行。
SQLite通常快得多,因为大多数(或全部)数据/索引将被缓存在内存中。但是,对于SQLite。根据我到目前为止的经验,如果数据分散在多个表甚至多个SQLite数据库文件中。对于甚至数百万条的记录(尽管我还没有数以百万计的记录),它比SQL更为有效(补偿延迟等)。但是,就是在不同的表中将记录拆分开,并且查询特定于此类表时(dun查询所有表)。
一个例子是简单游戏中使用的物品数据库。尽管这听起来可能并不多,但将发出一个UID甚至进行更改。因此,生成器很快就可以计算出超过一百万套带有变化的“统计信息”。但是,这主要是由于每1000个记录集在不同的表之间分配。 (因为我们主要是通过其UID提取记录)。尽管拆分性能未正确测量。我们得到的查询轻松地比SQL快10倍(主要是由于网络延迟)。
但是,有趣的是,我们最终将数据库减少到几千个条目,由项[pre-fix] / [suf-fix]确定了版本。 (就像暗黑破坏神一样,只是它被隐藏了)。事实证明,这要快得多。
不过,从侧面来看,我的情况主要是因为查询是一个接一个地排列(等待之前的查询)。但是,如果能够,则可以同时对服务器进行多个连接/查询。 SQL的性能下降可从客户端得到更多补偿。假设此查询不会相互分支/交互(例如,如果有结果查询,则为该查询,否则为该查询)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。