【问题标题】:Making a database scalable使数据库可扩展
【发布时间】:2012-10-13 19:01:53
【问题描述】:

我已经开发一个网站已经有一段时间了,到目前为止一切都很快而且很好,尽管那是一个活跃的用户。我不知道有多少人会在第一周、第一个月或第一年使用我的网站。

我一直在研究缩放意味着什么以及如何实现它,而缓存似乎是其中的重要组成部分。所以我开始寻找缓存我的内容的方法。目前我刚刚在 XAMPP 中开发了网站。我使用 MySQL 作为数据库,使用简单的 PHP 和 MySQLi 来编辑数据。我还使用 OS X Mountain Lion 中的内置系统消息应用程序做一些简单的日志记录。所以我正在考虑使用Memcache 进行缓存。

这是一个好方法吗?

我如何测试它才能真正看到差异?

我怎么知道即使有更多用户也能很好地工作?

有什么好的基准测试应用吗?

【问题讨论】:

  • 有问题吗?另外,请专注于一个问题。唯一有点有趣的是“如何测试我的数据库/模型/缓存的可伸缩性?”
  • @pst 目前没有。但正如我所说,目前只有一个用户。我怎么知道它对成千上万的用户如此有效?是的“如何测试我的数据库/模型/缓存的可扩展性?”主要是我的问题。
  • 当您拥有数千名用户时,您将拥有数千名用户。但这不是现在。也不多。几百万,好吧,这很好。从干净的规范化架构开始。如果出现性能问题,[稍后] 将有时间/金钱/理由投入其中。缓存之类的东西通常可以稍后添加或作为单独服务模型的一部分 - 没什么大不了的。如果您不需要水平可扩展性,商品硬件上的垂直可扩展性可以通过良好的架构实现长时间。 (如果您确实需要大规模水平可扩展性,请查看 Twitter 等“示例”。)
  • 但是数据库不应该为数百万用户准备吗?这不就是缩放的意义所在吗?
  • 是否应该为20名乘客准备摩托车?如果我和我的朋友是唯一会骑它的人,那就不会了。如果以后,我发现需要 20 名乘客,我会买一辆大众小巴。不过,这是一个糟糕的类比,因为 RDBMS can 和 do 可以很好地适应实际数字没有“得到所有幻想”。

标签: php mysql caching scalability


【解决方案1】:

获取并使用jMeter。

除了确认当前没有任何错误发生外,您还可以使用 jMeter 测试返回的响应速度和页面加载方式。这样你就可以模拟大量的负载;在进行调整(例如使用 memcache)时看到实际的性能更新。

【讨论】:

    【解决方案2】:

    有很多方法可以确保数据库具有良好的扩展性,但我认为最重要的部分是为表定义适当的索引。 至少作为外键的字段应该定义一个索引。

    例如,如果您有一个大型论坛,您的主题表可能如下所示:

    topic_id | name
    ---------+--------------------------------
           1 | "My first topic!"
           2 | "Important topic"
           3 | "I really like to make topics!"
         ... | ...
     7234723 | "We have a lot of topics!"
    

    然后是另一个表格,其中包含主题中的实际帖子:

    post_id  | user       | topic_id
    ---------+------------+---------
           1 | "Spammer"  | 1
           2 | "Erfa"     | 2
           3 | "Erfa"     | 1
           4 | "Spammer"  | 1
         ... | ...        | ...
    87342352 | "Erfa"     | 457454
    

    当您在应用程序中加载主题时,您希望加载与主题 ID 匹配的所有帖子。在这种情况下,您无法查看所有数据库行,因为实在太多了!幸运的是,您无需做太多工作即可确保完成此操作,只需为字段 topic_id 创建索引即可。

    这是使您的数据库良好扩展的非常基本的事情,但既然它如此重要,我真的认为应该有人提及它!

    【讨论】:

      猜你喜欢
      • 2010-12-07
      • 2017-04-06
      • 2020-03-04
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多