首页 / 知识
关于可伸缩性:SQLite的可伸缩性如何?
2023-04-14 21:15:00

How Scalable is SQLite?我最近阅读了有关SQLite vs MySQL的问题,答案指出SQLite不能很好地扩展,但是官方网站的分类证实了这一点。 SQLite的可伸缩性如何?最高限制是多少? 昨天我发布了一个小型网站*,用于跟踪您的代表,该代表对所有访问者使用了共享的SQLite数据库。不幸的是,即使负载很小,它的运行速度仍然很慢。这是因为每次有人查看该页面时,由于其中包含更新/插入,整个数据库都被锁定。我很快切换到MySQL,虽然我没有太多时间对其进行测试,但它似乎比SQLite更具可伸缩性。我只记得页面加载缓慢,并尝试从sqlite中的shell执行查询时偶尔会出现数据库锁定错误。也就是说,我可以从SQLite运行另一个站点。区别在于该站点是静态的(即,我是唯一可以更改数据库的站点),因此对于并发读取来说,它工作得很好。故事的寓意:仅将SQLite用于很少进行数据库更新(比加载的每个页面少的频率)的网站。 编辑:我只是意识到我可能对SQLite不公平-从网页提供服务时,我没有索引SQLite数据库中的任何列。这部分地导致了我遇到的速度下降。但是,观察到数据库锁定的立场-如果您进行的更新特别繁琐,则SQLite的性能将无法与MySQL或Postgres匹敌。 另一个编辑:自从我将近三个月前发布此文章以来,我有机会仔细研究了SQLite的可伸缩性,并且通过一些技巧可以使其具有相当的可伸缩性。正如我在第一次编辑中提到的那样,数据库索引极大地减少了查询时间,但这更多地是关于数据库的一般观察,而不是关于SQLite的观察。但是,还有另一个技巧可以用来加快SQLite的速度:事务。每当您必须进行多次数据库写入时,请将它们放入事务中。而不是每次发出写查询时都写入(并锁定)文件,而是仅在事务完成时才执行一次写操作。 我在第一段中提到的网站已切换回SQLite,并且在一些地方调整了代码后,它的运行非常平稳。 *该站点不再可用 Sqlite在单用户方面具有可伸缩性,我有数千兆字节的数据库,性能非常好,而且我没有太多问题。 但是它是单用户的,因此取决于您在谈论哪种扩展。 在回应评论。请注意,没有什么可以阻止在多用户环境中使用Sqlite数据库,但是每个事务(实际上,每个修改数据库的SQL语句)都会对该文件进行锁定,这将阻止其他用户访问位于所有。 因此,如果您对数据库进行了大量修改,那么实际上您将非常快速地解决扩展问题。另一方面,如果与写访问相比,您具有许多读访问权限,则可能还不错。 但是Sqlite当然可以在多用户环境中运行,但是效果不佳。 SQLite驱动sqlite.org网站和其他流量很大的网站。他们建议,如果您每天的点击量少于10万,则SQLite应该可以正常工作。这是在他们提供" Writeahead日志记录"功能之前编写的。 如果要使用SQLite加快速度,请执行以下操作:
您可能想看一下我在YouTube上的视频"使用Writeahead日志记录提高SQLite性能",该视频显示了如何使用预写日志记录,并演示了写入速度提高了5倍。 Sqlite是一个桌面数据库或进程内数据库。 SQL Server,MySQL,Oracle及其兄弟都是服务器。 就需要支持对数据存储的并发写访问的任何应用程序而言,桌面数据库就其本质而言并不是一个好的选择。在某种程度上,这包括曾经创建的大多数网站。如果您什至必须登录,则可能需要对数据库的写权限。 您是否阅读过此SQLite文档-http://www.sqlite.org/whentouse.html?
SQLite的可伸缩性将高度取决于所使用的数据及其格式。我在使用超长桌(GPS记录,每秒一条记录)方面有一些艰难的经验。经验表明,SQLite会分阶段降低速度,部分原因是不断增长的对拥有索引的二叉树的重新平衡(以及带有时间戳的索引,您只知道树将得到大量的重新平衡,但这对您至关重要)搜索)。因此,最终只有大约1GB(据我所知),查询变得迟钝了。您的里程会有所不同。 要记住的一件事是,尽管吹牛,但SQLite并不是用于数据仓库的。不建议将各种用途用于SQLite。 SQLite背后的好人自己说:
这就引出了一个主要论点(不是定量的,对不起的,而是定性的),SQLite并不能用于所有用途,而MySQL可以涵盖许多不同的用途,即使不是理想的情况也是如此。例如,您可以让MySQL存储Firefox cookie(而不是SQLite),但是您需要一直运行该服务。另一方面,您可能有一个在SQLite上运行事务性网站(就像许多人一样)而不是MySQL,但是却会导致大量停机。 我认为一个(数量为1的)服务于客户端的网络服务器会在后端与数据库建立单一连接,不是吗? 因此,数据库中没有并发访问权限,因此可以说数据库正在"单用户模式"下工作。在这种情况下,对磁盘进行多用户访问是没有意义的,因此SQLite可以与任何其他基于服务器的数据库一起工作。 这样想吧。每次有人使用SQL Lite时都会被锁定(SQLite不会在读取时锁定)。因此,如果您为网页或具有多个并发用户的应用程序提供服务,则只有一个人可以通过SQLLite一次使用您的应用程序。因此,存在扩展问题。如果它的一个人应用程序说一个音乐库,其中包含数百个标题,等级,信息,用法,播放,播放时间,则SQL Lite可以很好地扩展,可以容纳数千个甚至数百万个记录(硬盘愿意) 另一方面,MySQL适用于服务器应用程序,在这些应用程序中,人们将同时使用它。它不会锁定,而且尺寸很大。因此,对于您的音乐库MySql,就像只有一个人看到的那样,它会被彻底杀死,除非这是一个共享的音乐库,成千上万的音乐库会在其中添加或更新。然后,MYSQL将成为使用的那个。 因此,从理论上讲,MySQL的扩展性比Sqllite好,因为它可以处理多个用户,但对于单个用户的应用程序来说却过于矫kill过正。 SQLite的网站(您所引用的部分)表明它可以用于多种多用户情况。 我会说它可以处理很多。以我的经验,它一直非常快。当然,您需要为表建立索引,并且在对表进行编码时,需要确保使用准参数化查询等。基本上,您可以使用任何数据库来提高性能。 值得一试的是REAL SQL Server,这是基于SQLite构建的数据库服务器。 |
最新内容
相关内容
linux网站根目录命令?
linux网站根目录命令?,系统,一致,设备,网站,目录,根目录,信息,标准,位置,电脑,Linux中怎么切换到根目录?1、找到需要移动文件选择。右键而后选linux命令设置扩展屏?
linux命令设置扩展屏?,工具,系统,电脑,技术,软件,装备,情况,工作,命令,显示器,Linux中如何分屏显示的命令是什么linux中如果想要把某个命令或linux访问网站的命令?
linux访问网站的命令?,地址,系统,服务,工作,网站,命令,网络,管理,信息,网址,Linux必学的网络操作命令Linux的网络命令比较多,其中一些命令像pin常用的linux命令分类?
常用的linux命令分类?,地址,工作,系统,命令,信息,目录,标准,百度,时间,情况,linux常用命令linux系统常用操作命令如下:ls:全拼list,功能是列出目linux磁盘扩展命令?
linux磁盘扩展命令?,在线,信息,扩大,风险,磁盘,虚拟机,容量,分区,目录,链接,LINUX虚拟机磁盘在线扩容不重启虚拟机里添加磁盘 检查磁盘空间:运linux命令分类合集?
linux命令分类合集?,地址,工作,系统,信息,命令,基础,标准,通用,目录,功能,linux系统常用操作命令linux常用命令有pwd命令、cd命令、ls命令、calinux中扩展命令缩写?
linux中扩展命令缩写?,网络,命令,信息,工作,管理,暂停,基础,公司,半导体,时间,许多Linux命令后面会有ctl,例如journalctl,systemctl,apachectllinux怎么改扩展命令?
linux怎么改扩展命令?,网络,密码,情况,软件,通用,地址,中心,环境,分区,根目录,linux下如何设置扩展网卡的优先级1、从桌面右下角,网络里面进入,linux命令行登陆网站?
linux命令行登陆网站?,网站,系统,密码,服务,地址,环境,网络,软件,状态,项目,在Linux下怎么通过命令上网首先,连接相应linux主机,进入到linux命令linux登陆网站命令?
linux登陆网站命令?,网络,工具,网站,标准,地址,软件,系统,命令,数据,环境,linux如何用命令行登录?1、首先在桌面模式下,右键点击open in terminlinux命令打开网站?
linux命令打开网站?,网络,网站,系统,地址,密码,传播,工具,代码,环境,命令,大学生通关这几个编程游戏1、Hack The Game Hack The Game是一款好linux命令行登录网站?
linux命令行登录网站?,系统,网站,地址,工作,软件,密码,网络,第一,环境,中心,如何使用linux命令打开网页1、在命令符界面浏览网页可以使用lynx,l