【问题标题】:MySQL storage engine decisionMySQL存储引擎决策
【发布时间】:2010-12-14 23:10:31
【问题描述】:

我是来自荷兰的网页设计师。我对从头开始构建 Web 应用程序有点陌生,我一直使用 CMS,并对其进行了自定义。

我正在用php/mysql 建立一个拍卖网站,已经完成。最近我读了几篇关于存储引擎的文章。

我有几个问题一直困扰着我:


哪种存储引擎最适合我的网站,我使用 myIsam、innodb 等吗?

我正在建立的网站是一个拍卖网站,它必须每秒钟处理几次读写!它必须检查拍卖是否打开、关闭、暂停、当前价格等。

我知道不是我的数据库中的所有表都会被访问,这些只有 3 个。它们目前都是 myIsam。这个好吗?我应该全部改变吗?一个都不改?我真的不知道该怎么办。 如果我改变它们,这会极大地影响我的网站吗?这些变化最终会很容易应用,还是很难做到。


我的另一个问题是关于缓存系统。

我也读过一些关于它们的文章,但我不知道它们是否适用于我拥有的那种网站。我从数据库中得到的数据变化很大。我缓存它们方便吗? 例如,可以缓存拍卖,因为并非所有项目都会更改。但拍卖不会永远存在,几个小时后它就消失了。

我看不出缓存系统如何适用于此,或者我看错了。再说一次,如果这个系统适用于我,这种改变会不会需要很大的努力,这种努力会不会产生巨大的改变。


这些都是我的问题,我想它们真的很笼统,我希望有人能帮助我,我真的很感激。

问候

【问题讨论】:

标签: mysql caching innodb myisam


【解决方案1】:

哪种存储引擎最适合我的网站,我使用 myIsam、innodb 等吗?

一般来说,对于任何任务默认为 InnoDB,因为它符合 ACID 和行级锁定。考虑仅在 (a) 全文搜索和 (b) InnoDB 下性能不够好的特定情况下使用 MyISAM(这种情况很少见,但某些类型的数据可以从 MyISAM 的配置文件中受益)。

我正在建立的网站是一个拍卖网站,

像拍卖这样的功能确实确实需要一个一致的交易数据库,因为您谈论的是人们的钱。 MyISAM 无法提供。您的站点需要对所有非原子交互使用事务,因此例如不可能。两个人在完全相同的时间出价时赢得相同的拍卖。

它必须每秒钟处理几次读写!

这不是一个大数目。然而,由于 MyISAM 不幸的表级锁定,InnoDB 通常在对大表的偏写访问方面表现更好。

我也读过一些关于它们的文章,但我不知道它们是否适用于我拥有的那种网站。

不要着急。一些网络作者似乎认为任何网站都需要 memcache 才能获得良好的性能,但事实并非如此。您应用的任何缓存解决方案都会增加处理更新时间和过时信息的复杂性和潜在故障点。

所以在你真正需要之前不要使用缓存。如果您的常见前端页面习惯性地对数据集执行复杂、缓慢的查询,那么可以,为此拥有某种缓存,无论是在数据库本身还是像 memcache 这样的外部解决方案,都可以提高速度。但实际上,与增加缓存的复杂性和不一致性相比,您可能最好更改架构并添加索引以使查询更便宜。

在一个每秒只执行“几次”操作的网站上,您将不需要它。

【讨论】:

  • 哇,谢谢你的精彩帖子,这对我来说真的很有帮助,我认为记住这一点,我的问题就解决了。我确实还有最后一个小问题。如果我有这样的表结构,简化了'users','auctions','messages','cmets'等。我是否可以方便地制作所有表格innoDB,或者只是那些有重要信息的表格.或者是否有另一个要记住的标准。也许是访问最多的那些?
  • 是的,所有表都应该默认使用 InnoDB,除非有特别好的理由不这样做。 (MyISAM 声称的“更快的速度”并不是一个好的理由,而且在许多用例中无论如何都不存在。)
【解决方案2】:

InnoDB

在您所描述的场景中,我会毫不犹豫地选择 InnoDB。看看你可能需要的这些:

  1. 行级锁定
  2. 多语句交易
  3. 回滚

缓存

您有几种方法来进行缓存。但是假设您的首页每秒获得 10 次点击,并且每五分钟更改一次。将首页存储在纯 html 文件中并让 cron-job 每五分钟更新一次该页面是非常有意义的。

【讨论】:

    猜你喜欢
    • 2017-08-28
    • 2018-11-14
    • 1970-01-01
    • 2018-06-25
    • 2010-10-11
    • 2011-06-20
    • 2016-12-23
    • 2011-04-25
    相关资源
    最近更新 更多