在生产中使用Django与Sqlite作为数据库并不是不可能的,这主要取决于您的网站/网络应用程序流量以及对数据库的查询操作的频率和复杂程度(包括读/写等)。事实上,接近2019年底,我已经在几个低流量应用程序中使用它,每天不到5k次交互(这比你想象的更常见)。
简而言之,在当前技术状态下,目前的Sqlite-3支持无限并发读取(或者说取决于您的机器/工作人员能处理多少),但是只有一个进程可以在任何时间点上写入它。请记住,对数据库进行良好设计的查询/操作只需要毫秒级的时间!
从使用Sqlite作为唯一数据库的经验来看,对于处理约5000名注册学生的海外求职匹配简单非例行性(我指的是典型用户不会全年每天都使用此应用程序)生产Web应用程序(统计数据显示,峰值期间涉及命中数据库的请求不到2k次,其中40%为写入操作,60%为读取操作),我从未遇到过超时/性能问题。
真正的关键在于对开发和客户规格说明书(URS)实际的看法。如果它成为下一个独角兽,您随时可以将Sqlite迁移到另一个关系型数据库管理系统(RDBMS)。例如,请参见David d C e Freitas在
Quick easy way to migrate SQLite3 to MySQL?中关于迁移的看法。
此外,Sqlite网站使用Sqlite数据库作为其后端...请参见下面...
引文:“SQLite”网站(
https://www.sqlite.org/)自然会使用SQLite本身,并且截至本文撰写日期(2015年),它每天处理约400K到500K个HTTP请求,其中约15-20%是涉及数据库的动态页面。每个网页的动态内容使用约200个SQL语句。这个设置运行在一台单独的虚拟机上,与其他23台服务器共享一台物理服务器,并且大部分时间负载平均值低于0.1。
请记住,上述引用主要是指读取操作,因此这些值可能不适用于写入量较大的站点。
我以上所提到的使用Sqlite作为数据库构建的求职匹配应用程序相当重视写入操作,如果您注意到了这些数字...平均而言,40%是短暂的写入操作(例如表单提交等),但是请记住,在高峰期每天只有2k次访问量。
如果你发现你的sqlite.db导致了很多超时和糟糕的用户体验(例如提交表单时出现408错误...),特别是当Django抛出“OperationalError: database is locked error.”(然后他们不得不重新输入所有内容)时... 你可以根据django文档在settings.py中暂时增加超时时间作为临时解决方案,同时准备迁移数据库。
'OPTIONS': {
'timeout': 20,
}
最终,一切都取决于务实的开发和面对现实,即网站可能无法吸引如预期的那样多的活动,并且很容易在开始时过度设计。
有很多时候,采用简单的解决方案可以更快地进入市场,基本上是快速测试水域,并且当然要做好准备,如果食肉鱼群涌来,那就是升级到另一个关系型数据库的时候了。
使用 Django 的 ORM,在大多数情况下,您不需要在迁移到其他支持的 SQL 数据库时修改 models.py。请注意, Sqlite 不支持一些更高级的函数或甚至是 MYSQL 和 POSTGRES 这些更大的“表亲”所支持的某些字段。