ven*_*zen 63
我试图避免情绪化的回复和夸张,但我对这页上显示的sqlite缺乏知识感到非常惊讶.不同的数据库实现满足不同的需求,并且根据您提供的操作规范,sqlite3似乎非常适合您的需求.详细说明:
sqlite3完全符合ACID,这意味着它可以确保原子提交,这既不是MySQL(也不是很好),也不是Oracle可以吹嘘的.在这里查看更多
此外,sqlite3具有一种看似简单的机制,可确保最大并发性(也是线程安全的),如文件锁定和并发文档中所述.
通过他们(sqlite3开发者)自己的估计,sqlite3每秒最多可以有50,000个INSERT - 理论上的最大值受磁盘旋转速度的限制.ACID合规性要求sqlite3确认数据库提交已写入磁盘,因此INSERT,UPDATE或DELETE事务需要两个完整的磁盘轮换,从而有效地将7200rpm磁盘驱动器上的事务数减少到60/s.在另一个答案中链接的sqlite FAQ中概述了这一点,并且该事实提供了生产中引擎的数据吞吐量能力的一些概念.但是并发阅读和写作呢?
前面链接的文件锁定和并发文档解释了sqlite3如何避免"编写器启动" - 这种情况下,大量数据库读取访问会阻止寻求写入数据库的进程/线程获取锁定.锁定状态从SHARED升级到PENDING升级为EXCLUSIVE,因为sqlite3遇到INSERT(或UPDATE或DELETE)语句,然后再次遇到COMMIT,这意味着完整数据库锁定会延迟到执行实际写入之前的最后一刻.sqlite处理文件锁定的聪明机制的结果意味着如果编写器加入队列(PENDING锁定),现有读取(SHARED锁定)将完成,向写入器进程授予EXCLUSIVE锁定,然后继续读取.这只需几毫秒,
我认为EXCLUSIVE锁上的默认sqlite3 WAIT是3秒,所以假设每秒60个事务是一个合理的期望,并且你平均每10秒寻求写一次数据库 - 我会说sqlite3很好完成任务,只需要在流量增加500倍后引入群集.
不错,完美符合您的要求.
我认为SQLite不能满足这些要求。SQLite仅设计用于本地和轻量级用途,不能满足数百个请求。
我会推荐其他解决方案,例如MySQL
或PostgreSQL
,都可以很好地编写脚本。因此,如果您是我,我会全力投入设置脚本中。
为了避免SQLite信奉者与仇恨者之间的激烈争论,让我提请您注意经常引用的SQLite使用时文档(我认为它被认为是可靠的消息来源)。他们在这里声明以下内容:
客户端/服务器RDBMS可能会更好地工作的情况
高并发
SQLite支持无限数量的同时读取器,但是它只能在任何时刻允许一个写入器。在许多情况下,这不是问题。作家排队。每个应用程序都会快速完成其数据库的工作并继续运行,并且锁定不会持续超过几十毫秒。但是有些应用程序需要更多的并发性,而这些应用程序可能需要寻求不同的解决方案。
我认为所提到的问题涉及许多写入操作,并且如果OP将用于SQLite,将导致无法扩展的解决方案。
归档时间: |
|
查看次数: |
19548 次 |
最近记录: |