关闭。这个问题是opinion-based .它目前不接受答案。
想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.
8年前关闭。
Improve this question
我正在使用 django 创建一个网站。它即将完成,但尚未上线。我正在尝试确定 SQLite 是否适合该站点,或者是否值得现在开始使用 PostgreSQL,而不是冒着以后需要过渡到它的风险。 (在这篇文章中,我提到了 PostgreSQL,因为它是我的另一个竞争者。我相信 MySQL 或 Oracle 也可以进行类似的分析。)
我可以从人们那里获得一些关于他们如何决定在他们的 django 项目中使用什么数据库的意见。
以下是我目前对此的理解:
这是我不知道的:
本质上,我认为 SQLite 对于我的小网站来说已经足够好了。它真正流行起来的几率有多大?可能没那么厉害。 SQLite 现在正在为我工作,并且不需要我进行任何更改。但是,我担心也许从一开始就使用 PostgreSQL 会很容易,而且我会在一年后因为没有进行过渡而自责。不过我很伤心——如果我去 PostgreSQL,也许这对我来说是不必要的麻烦,没有任何好处。
有没有人有在 SQLite 和其他东西之间做出决定的一般准则?
谢谢!
最佳答案
这里有几点需要考虑。
SQLite 不允许并发写入。如果 insert
或 update
发出,the entire database is locked ,甚至在实际更新的短时间内不允许阅读。如果您的应用程序将有许多用户更新其状态(发表评论、添加喜欢等),这将成为一个瓶颈。即使用户数量相对较少,也会不时出现令人不快的减速。
SQLite 不允许多个进程有效地访问数据库。即使你有多个 CPU,也只能有一个写入进程,即使这样,锁定机制也是非常低效的。为确保数据完整性,您需要跳过许多环节,而且每次更新都会非常缓慢。 Postgres 可以优化重新排序锁,在行级别锁定表,甚至在不锁定的情况下更新,因此它将在 SQLite 性能方面运行循环,除非您的数据库是严格只读的。
SQLite 不允许数据分区,甚至不允许将不同的表放到不同的表空间;一切都存在于一个文件中。如果您有一个经常被触及的“热”表(例如 session 、授权、统计信息),则您无法调整其参数,将其放在 SSD 上等。但是,如果关系完整性,您可以为此使用单独的数据库并不重要。
SQLite 没有复制或故障转移功能。如果您的应用程序的停机时间会花费您的钱,那么您最好有一个热备份数据库服务器,准备好在主服务器出现故障时接管。使用 Postgres,这是相对轻松的;几乎没有使用 SQLite。
SQLite 没有在线备份和时间点恢复功能。如果您从用户那里收到的数据会让您花钱(例如商家订单或 SLA 下的用户数据),您最好定期备份您的数据,甚至是连续备份。 Postgres,当然,can do this ; SQLite 不能。
简而言之:当您的网站不再是玩具时,您应该已经切换了。您应该在第一次严重的负载峰值之前切换一段时间,以解决任何明显的问题。
幸运的是,Django ORM 使 Python 端的切换变得非常容易:您主要更改 settings.py
中的连接字符串。 .在实际的数据库方面,您将不得不做更多的事情:分析您最重要的查询,调整某些列类型和索引等。除非您自己知道如何 cooking Postgres,否则请寻求知道的人的帮助;数据库有许多不明显的微妙之处,它们会显着影响性能。部署 Postgres 肯定比 SQLite 更棘手(虽然并不难);结果是在负载下的操作/维护方面更具功能性。
关于database - 如何决定是否需要从 sqlite 过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20811373/