Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何决定是否需要从sqlite过渡_Database_Django_Sqlite - Fatal编程技术网

Database 如何决定是否需要从sqlite过渡

Database 如何决定是否需要从sqlite过渡,database,django,sqlite,Database,Django,Sqlite,我正在使用django创建一个网站。它就要完成了,但还没有上线。我正试图决定SQLite是否适合该站点,或者一开始是否值得现在就使用PostgreSQL,而不是冒着以后需要转换到它的风险。(在这篇文章中,我提到PostgreSQL是因为它是我的另一个竞争者。我相信MySQL或Oracle也可以进行类似的分析。) 我可以从人们那里得到一些关于他们如何决定在django项目中使用哪个数据库的信息 以下是我目前对此的理解: 根据我的经验,SQLite非常简单。我不需要担心为它安装其他依赖项,它几乎可

我正在使用django创建一个网站。它就要完成了,但还没有上线。我正试图决定SQLite是否适合该站点,或者一开始是否值得现在就使用PostgreSQL,而不是冒着以后需要转换到它的风险。(在这篇文章中,我提到PostgreSQL是因为它是我的另一个竞争者。我相信MySQL或Oracle也可以进行类似的分析。)

我可以从人们那里得到一些关于他们如何决定在django项目中使用哪个数据库的信息

以下是我目前对此的理解:

  • 根据我的经验,SQLite非常简单。我不需要担心为它安装其他依赖项,它几乎可以在django中开箱即用

  • 根据我的在线研究,SQLite似乎能够在成为性能瓶颈之前处理相当多的负载

以下是我不知道的:

  • 我从SQLite转换到PostgreSQL会涉及到什么?同样,我目前处于仅开发阶段,因此不需要从SQLite转换任何数据库数据。这几乎只是在服务器上安装PostgreSQL,然后调整settings.py文件以使用它的问题吗?我对此表示怀疑,但我的django代码是否需要更改?(我没有任何原始SQL查询-我的数据库访问仅限于django的模型API。)

  • 从性能角度看,PostgreSQL是否在各方面都优于SQLite?还是SQLite比PostgreSQL有某些优势

  • 撇开性能不谈,使用PostgreSQL是否比SQLite提供了其他部署好处

基本上,我认为SQLite对于我的小站点来说已经足够好了。它真正流行的几率有多大?可能没那么好。SQLite现在正在为我工作,不需要我的终端进行任何更改。然而,我担心从一开始使用PostgreSQL可能会很容易,一年后我会因为没有进行转换而责备自己。不过我还是很难过——如果我去PostgreSQL,也许这对我来说是不必要的麻烦,没有任何好处

是否有人有在SQLite和其他东西之间做出决定的一般准则


谢谢 SQLite不允许并发写入。如果发出
插入
更新
,在实际更新的短时间内甚至不允许读卡器。如果您的应用程序将有许多用户更新其状态(发布评论、添加喜好等),这将成为一个瓶颈。即使用户数量相对较少,也会不时出现令人不快的减速

SQLite不允许多个进程有效地访问数据库。即使有多个CPU,也只能有一个写入过程,即使这样,锁定机制也非常低效。为了确保数据完整性,您需要跨越许多障碍,而且每次更新都会非常缓慢。Postgres可以以最佳方式重新排序锁,在行级别锁定表,甚至在不锁定的情况下更新表,因此它将围绕SQLite性能运行,除非您的数据库是严格只读的

SQLite不允许数据分区,甚至不允许将不同的表放到不同的表空间;所有内容都保存在一个文件中。如果您有一个经常接触的“热”表(例如会话、授权、统计),则无法调整其参数、将其放在SSD上等。但是,如果关系完整性不重要,您可以使用单独的数据库来实现这一点

SQLite没有复制或故障切换功能。如果你的应用程序宕机会让你花钱,你最好有一个热备份数据库服务器,在主服务器宕机时随时可以接管。对于Postgres,这是相对无痛的;对于SQLite,几乎没有

SQLite没有在线备份和时间点恢复功能。如果您从用户处收到的数据将花费您的金钱(例如,商户订单或SLA下的用户数据),您最好定期备份数据,甚至连续备份。当然,博士后;SQLite不能

简而言之:当你的网站不再是玩具时,你应该已经切换了。你应该在你的第一次严重负荷高峰前一段时间切换,以消除任何明显的问题


幸运的是,Django ORM使Python端的切换非常容易:您主要在
settings.py
中更改连接字符串。在实际的数据库方面,你需要做更多的工作:分析你最重要的查询,调整某些列类型和索引,等等。除非你自己知道如何制作Postgres,否则请向了解的人寻求帮助;数据库有许多不明显的细微之处,它们会显著影响性能。部署Postgres肯定比SQLite更棘手(虽然不是很难);在负载下运行/维护的结果更为有效。

这里有一些要考虑的事情。

SQLite不允许并发写入。如果发出
插入
更新
,在实际更新的短时间内甚至不允许读卡器。如果您的应用程序将有许多用户更新其状态(发布评论、添加喜好等),这将成为一个瓶颈。即使用户数量相对较少,也会不时出现令人不快的减速

SQLite不允许多个进程有效地访问数据库。即使有多个CPU,也只能有一个写入过程,即使这样,锁定机制也非常低效。为了确保数据完整性,您需要跨越许多障碍,而且每次更新都会非常缓慢。Postgres可以优化地重新排列锁,在行级别锁定表,甚至在不锁定的情况下更新表,因此它将运行circl