Django / Python应用程序的数据库引擎选择

时间:2014-03-26 13:26:32

标签: python database django sqlite postgresql

我正在研究Python / Django应用程序。核心逻辑位于Python应用程序中,Web UI由Django处理。我计划使用ZMQ进行核心和UI应用之间的通信。

我正在使用时间序列数据库,它在后台使用PostgreSQL来存储字符串数据,以及另一个用于存储时间序列数据的时间序列工具。所以我已经将PostgreSQL要求作为时间序列db的一部分。但我需要另一个数据库来存储数据(时间序列除外),我开始使用PostgreSQL工作。

sqlite3是我的一个团队成员的建议。我也没有做过任何工作,我知道每一个都有利有弊,我想了解这里讨论的两个数据库之间的主要区别,以及使用场景。

2 个答案:

答案 0 :(得分:1)

我认为这取决于您的要求,这是一个只有您可以回答的问题。我认为更容易设置的想法是愚蠢的。您是软件专业人士,使用有效的工具,学习工具。在ubuntu上,设置开发postgres几乎是一个app-get away。

你应该问的第一个问题是SQL是否适合我们正在做的事情?如果没有,请使用其他东西(虽然你可能想选择除Django以外的东西,我说这是一个Django-non-rel重度用户),如果是这样,继续。

好的一点是,在Django中,如果您真的不想在开发环境中设置Postgres,您可以简单地使用您的设置文件在开发和生产等环境之间交换数据库类型。当然,这假设您没有在Django中执行任何Postgres特定的操作,即您只是使用Django中的ORM和功能/库,而不是特定于数据库。在你的情况下,这听起来不像是一个问题。

免责声明:如果您还在开发中使用SQLite,我强烈建议您对Postgres进行大量测试。您永远不知道可以弹出哪些集成问题,当然性能特征也大不相同。如果它让您感觉更好,例如Google自己在Google App Engine SDK中使用SQLite在开发时模拟App Engine数据存储区。

无论如何,首先,准备好了SQLite official use-cases声明。此外,请参阅implementation limits,看看是否会导致您的要求出现问题。

一般SQLite优点:

  • 易于设置,重量轻,更多单用户或低容量数据库
  • 可以轻松嵌入到其他应用程序中,例如游戏
  • 便携式
  • 足够快,完成工作
  • 简单案例,如小型系统或替换直接磁盘访问

Postgres是一个更强大的数据库,旨在支持各种不同大小的应用程序,这些应用程序可以从使用关系数据库中受益。一般来说它几乎具有SQLite的所有功能以及更多功能,但显然难以设置,实际上并不是为了快速嵌入而设计的,并且可移植性稍差。换句话说,不那么精简:)

请查看Postgres的features matrix

这里还有一个direct comparison

General Postgres Pros:

  • 专为多用户设计
  • 链中有很多有用的工具,包括备份和复制等工具
  • 数据类型的综合功能集,在DB内部运行的操作,如程序等。
  • 如果你能胜任SQL并且正确使用SQL,那么可以很好地扩展。
  • 强调并完全实施ACID合规和交易

; tldr - 如果您想长期计划并且有信心,请使用Postgres。如果您不在乎,请使用SQLite。如果您愿意,只要您不做任何特定于数据库的操作,就可以通过设置使用Django来切换数据库,从而享受两全其美。

答案 1 :(得分:1)

使用postgreSQL,我们的团队长期使用sqlite3。但是,当您将数据导入数据库时​​,它通常会提供信息并锁定数据库!'

sqlite3的优点

  1. 它很小,如你所说,不需要服务器设置

  2. models.py中的
  3. max_length并不严格,你设置max_length = 10,如果在字段中放置100个字符,sqlite3就不会抱怨它,也绝不会截断它。

  4. 但是postgreSQL比sqlite3更快,如果你使用sqlite3。 有一天你想迁移到postgreSQL,这是一个问题,因为sqlite3永远不会截断字符串,但postgreSQL抱怨它!