选择正确的数据库:MySQL与其他所有东西

ben*_*sky 20 mysql sql database oracle postgresql

现在看来,每个人都只使用MySQL,因为这正是每个人都喜欢的.我正在开发一个处理大量传入数据的Web应用程序,并且想知道我是否应该"只使用MySQL",或者我是否应该查看其他开源数据库甚至是商业数据库?

编辑:应该提到,我正在寻找最佳性能,与debian 5上运行的ruby + rails集成并且资金紧张虽然如果从长远来看它会节省资金我会考虑投资更昂贵的东西.

tpd*_*pdi 38

我以前发过这个帖子,但我没有理由改变这个建议:

MySQL更容易开始使用.

更好的UI工具.如果您不使用ACID,则更快.更容忍无效数据.自动增量列与键入自动增量一样简单.权限不依赖于文件系统和OS用户.在编写存储过程时,设置分隔符比使用PG的"美元符号引用"更容易.在MySQL中,您可以连接到所有数据库,而不是一次只连接一个数据库.

Postgres(PG)更符合标准,但它更丑陋,更复杂,尤其是从UI的角度来看.它曾经需要手动吸尘,并且实际上强制参照完整性(这是一个很好的事情,可能是痛苦的屁股).自动增量更灵活,但需要序列(我可以通过使用序列来屏蔽),等待,什么是OID?

因此,如果您不太了解或关心数据库,数据有效性,ACID合规性等,但您确实关心缓解和速度,那么您倾向于使用MySQL.

太多(不是全部,但很多)"网络程序员"对"web 2.0"或PHP或Java有很多了解,但对数据库理论或实践知之甚少("索引?那是什么?").他们倾向于将数据库看作只是一个花哨的哈希表或数据包,实际上这个数据库并不像哈希表那样动态可变或宽容.

对于这些人来说,MySQL - 因为直到5.0它不是真正的RDBMS,并且在许多方面仍然不是 - 是天赐之物.它比竞争对手"更快",并且不会"浪费时间"在网络程序员不想要,理解或看到它的价值的"深奥"数据库中.

另一方面,对于拥有数据库背景的人来说,MySQL是一个雷区:应该工作的东西(复杂的视图,分组,按组排序)可能有用,或者如果你幸运地崩溃服务器,或者如果你不幸的是只是给出数据不正确的结果.

我花了几天时间来解决其中一些问题,因为并不是非常复杂的观点和分组.

MySQL并不是真的更快.如果你正在使用InnoDb表进行ACID(或者因为超过3000万行,MyISAM表往往会变得很糟糕),是的,直接的单表选择可能比PG更快.但加入连接,PG突然显着加快.(MySQL在外连接上特别糟糕.)

总结:如果您对数据库是一个包,如果您从未打算进行数据挖掘或报告,如果您最感兴趣的是提供很少关系或更新的大量文本 - 也就是说,如果您是使用数据库为博客提供支持,MySQL是一个很好的选择.

但是,如果您实际管理数据,如果您了解数据的寿命更长,并且对于业务而言比前端程序和中间层业务规则更有价值,那么如果您需要真实数据库的功能,请使用PG.

一个"网络程序员"决定了他所有的表结构,可以由Hibernate(或其他一些ORM)自动生成,然后说"太复杂"和"我打赌复杂意味着更多的成本和更慢的速度",所以他跟MySQL一样.

就像我说的那样,PG非常优越,我讨厌使用MySQL的奇怪错误,我认为对于任何稍微复杂的查询,整体PG性能可能比MySQL好.

但MySQL让事情看起来(看似简单),所以你会得到很多人并不真正了解数据库设计,认为MySQL是一个很好的选择.

使用PG.它是一致的,它是可靠的,它符合标准,它在(甚至是中等程度的)复杂查询上更快,它并没有完全抛弃你的日程安排带来奇怪的错误.

  • 这是一个很好的答案,我从8.x开始使用PostgreSQL并且不必弄乱OID甚至处理设置序列(我知道它们在那里).这可能是因为我所做的任何事情都是小规模的.我认为pg很棒,我会在一周中的任何一天使用MySQL*,这主要是因为你得到的所有陷阱和奇怪的错误. (2认同)

duf*_*ymo 21

我认为PostgreSQL是一种非常可行的MySQL替代品.它更像甲骨文.

  • 对"有点可行"的解释会很好. (3认同)

Jor*_*nes 12

就个人而言,我尽量避免使用MySQL,原因如下:

  1. 默认存储引擎的MyISAM缺乏外键的支持.Innodb确实如此,但由于显而易见的原因,它不支持MyISAM表的外键.
  2. 如果我尝试插入无效数据,MySQL会很乐意为我更改它.
    1. 非法DateTime,Date或Timestamp值将转换为"零":http://dev.mysql.com/doc/refman/5.1/en/datetime.html
    2. Varchar和Char类型列:http://dev.mysql.com/doc/refman/5.1/en/char.html
    3. 数字数据类型取决于SQL严格模式:http://dev.mysql.com/doc/refman/5.1/en/numeric-types.html

这些东西对某些人来说可能并不重要,但是当谈到数据质量时,我宁愿使用别的东西.

  • 这取决于项目.对于开源数据库,我更喜欢PostgreSQL,因为它对外键提供了开箱即用的支持,如果我尝试插入无效数据,它会向我抛出错误. (3认同)

Joh*_*zen 6

那么,世界上的RDBMS之间可能存在差异.请查看http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems#Fundamental_features

以此为指导,您应该能够缩小选择范围.

要记住以下几点:

SQL Server 2005 Express限制为4GB文件大小,但在.NET和Java语言中具有出色的支持.

MySQL将在Windows和Linux上运行,并且许多语言都支持它(包括.NET和Java)和外部库.

SQLite有效地支持每个操作系统,并且可以作为应用程序的集成部分进行分发.