rmh*_*rmh 59 mysql database django postgresql
我的Django项目将由一个包含数十万个条目的大型数据库支持,并且需要支持搜索(我可能最终会使用djangosearch或类似的项目.)
哪个数据库后端最适合我的项目?为什么?你能推荐任何好的资源进一步阅读吗?
oiv*_*vio 56
无论它值多少,Django的创造者都推荐使用PostgreSQL.
如果您没有绑定任何遗留系统并且可以自由选择数据库后端,我们建议使用PostgreSQL,它可以在成本,功能,速度和稳定性之间取得良好的平衡.(Django权威指南,第15页)
Van*_*ale 43
作为最近将项目从MySQL切换到Postgresql的人,我不后悔转换.
从Django的角度来看,主要区别在于Postgresql中更严格的约束检查,这是一件好事,而且手动架构更改(也就是迁移)也更加冗长乏味.
大概有6个左右的Django数据库迁移应用程序,至少有一个不支持Postgresql.我不认为这是一个缺点,因为你可以使用其他人之一或手动完成(这是我更喜欢的atm).
MySQL 可能更好地支持全文搜索.MySQL内置全文搜索功能,从Django内部支持,但它没用(没有词干,短语搜索等).我使用django-sphinx作为MySQL中全文搜索的更好选择.
使用Postgresql 8.3内置全文搜索(早期版本需要TSearch模块).这是一篇很好的教学博客文章:使用PostgreSQL和tsearch2在Django中进行全文搜索
var*_*tec 40
有数十万个条目的大型数据库,
这不是大型数据库,它非常小.
我选择PostgreSQL,因为它有更多的功能.最重要的是这种情况:在PostgreSQL中,您可以使用Python作为过程语言.
即使Postgresql看起来更好,我发现它与Django有一些性能问题:
Postgresql用于处理"长连接"(连接池,持久连接等)
MySQL用于处理"短连接"(连接,执行查询,断开连接,在许多打开的连接中存在一些性能问题)
问题是Django不支持连接池或持久连接,它必须在每次视图调用时连接/断开数据库.
它可以与Postgresql一起使用,但是连接到Postgresql比连接到MySQL数据库要花费更多(在Postgresql上,每个连接都有自己的进程,它比在MySQL中弹出一个新线程慢得多).
然后,您将获得一些功能,如查询缓存,在某些情况下可能非常有用.(但你失去了PostgreSQL的精湛文本搜索)
所有的答案都会给桌子带来有趣的信息,但有些信息有点过时,所以这就是我的盐.
从1.7开始,迁移现在是Django的一个不可或缺的特征.因此,他们记录了Django开发人员可能希望事先知道的主要差异.
后端支持
Django附带的所有后端都支持迁移,如果他们编程支持模式更改(通过SchemaEditor类完成),则支持任何第三方后端.
但是,在模式迁移方面,某些数据库比其他数据库更强大; 下面介绍了一些注意事项.
PostgreSQL的
在模式支持方面,PostgreSQL是所有数据库中最强大的; 唯一需要注意的是,添加具有默认值的列将导致表的完全重写,持续时间与其大小成比例.
出于这个原因,建议您始终使用null = True创建新列,这样它们将立即添加.
MySQL的
MySQL缺乏对模式更改操作周围事务的支持,这意味着如果迁移无法应用,则必须手动取消更改才能再次尝试(无法回滚到之前的点).
此外,MySQL将完全重写几乎每个模式操作的表,并且通常需要与表中的行数成比例的时间来添加或删除列.在较慢的硬件上,这可能比每百万行中的一分钟更糟糕 - 向几百万行的表中添加几列可能会使您的站点锁定超过十分钟.
最后,MySQL对列,表和索引的名称长度有相当小的限制,并且对索引涵盖的所有列的组合大小有限制.这意味着在MySQL下无法创建其他后端可能的索引.
SQLite的
SQLite几乎没有内置的模式更改支持,因此Django尝试通过以下方式模拟它:
- 使用新架构创建新表
- 复制数据
- 放下旧桌子
- 重命名新表以匹配原始名称
这个过程通常运作良好,但它可能很慢,偶尔也会出错.除非您非常了解风险及其局限性,否则不建议您在生产环境中运行和迁移SQLite; Django提供的支持旨在允许开发人员在其本地计算机上使用SQLite来开发不太复杂的Django项目,而无需完整的数据库.
| 归档时间: |
|
| 查看次数: |
28395 次 |
| 最近记录: |