将 MySQL 复制到 RAM 作为穷人的 memcached 替代品?

将 MySQL 复制到 RAM 作为穷人的 memcached 替代品?

那这个想法怎么样:

  • 我有一个 4GB 的 MySQL 数据库,只有很少的更新。
  • 在系统启动时我将其复制到 RAM 并从那里运行。
  • 每隔几个小时,甚至在更新时,我都会将其转储到磁盘。

...作为一种穷人的替代品,用于重新审视使​​用数据库的所有代码例程并实现 memcached 或类似功能。

答案1

使用 MEMORY 存储引擎在只读从属设备上做你的阅读,正是你真的想要一个合理的设置。忘记“将其转储到磁盘”(?!) 或其他奇怪的事情。

如果您无法设置专用的从属服务器,您甚至可以将从属服务器作为现有服务器上的另一个实例,但适当调整针对大多数读取工作负载的 MySQL 参数也将显着提高性能!

答案2

对所有表使用 innodb 引擎,在 my.cnf 中将 innodb_buffer_pool_size 设置为 2-3GB 的 RAM,在启动期间对所有表运行全表扫描[或仅运行 mysqldump -A]。如果所有表上都有良好的索引,这应该会为您提供非常不错的只读性能。

另外,如果您采用这个解决方案,您的代码将更简单 - 您不必担心从内存表同步回 myisam/磁盘表。

答案3

在黑暗中拍摄,但您是否实际上首先遇到性能问题?

其次,如果您遇到了性能问题,那么您就必须考虑进行调优。调优应用程序(如果您是开发人员或对开发人员拥有严格权限)以使用适当的查询,这样您就不会使用大量的 JOIN 等。

然后查看数据库架构。做出愚蠢的解决方法将使以后的管理变得更加麻烦。您采取的步骤取决于您的使用情况。您可以考虑获得一个强大的服务器来垂直扩展,然后将其放在 memcached 服务器后面,并创建一个只读的从属服务器,用于运行报告和备份等操作。

不要从数据库中拿走 RAM 来尝试破坏良好实践的方案。有一些关于高性能数据库调优的博客可以提供想法,StackOverflow 播客博客有关于该网站运行情况的统计数据 (MS Stack);流量相对较大,但设置并不复杂。

相关内容