Heroku黑客指南(八)

Postgresql数据库

(五)创建只读从库

创建只读的从库可以实现数据库读写分离。heroku有个试验性的follow功能,使得创建从库很简单。

假如你的应用当前有一个数据库,HEROKU_POSTGRESQL_GREEN,为了创建它的只读从库,可以使用–follow选项来执行创建命令:

$ heroku addons:add heroku-postgresql:ronin --follow HEROKU_POSTGRESQL_GREEN
Adding heroku-postgresql:ronin to myproject... done, v7 ($200/mo)
Attached as HEROKU_POSTGRESQL_AMBER
Follower will become available for read-only queries when up-to-date
Use ‘heroku pg:wait‘ to track status
Use ‘heroku addons:docs heroku-postgresql:ronin‘ to view documentation

新创建的数据库,HEROKU_POSTGRESQL_AMBER,将自动跟它的主库,HEROKU_POSTGRESQL_GREEN,保持数据同步。

使用follow功能,你可以创建任意多的只读从库。

请注意:主从复制关系并不是实时同步的。主库上写入的数据,可能需要几秒才能在从库上同步完成。

(六)创建数据库副本

在某些情形下,创建数据库副本很有必要。例如:

  • 产品测试需要用到生产数据
  • 测试数据库迁移
  • 纯粹的数据备份目的

heroku也有个试验性的功能fork,使得创建数据库副本很简单。

例如,你当前有个数据库,HEROKU_POSTGRESQL_GREEN,为了创建它的副本,那么运行:

$ heroku addons:add heroku-postgresql:ronin --fork HEROKU_POSTGRESQL_GREEN
Adding heroku-postgresql:ronin to myproject... done, v7 ($200/mo)
Attached as HEROKU_POSTGRESQL_AMBER
Database will become available after it completes forking
Use ‘heroku pg:wait‘ to track status
Use ‘heroku addons:docs heroku-postgresql:ronin‘ to view documentation

一旦创建好了,你可以将它作为一个标准数据库对待,执行读写等。不过请注意,数据库副本并不跟原来的数据库保持同步。

(七)将从库提升为主库

假如你想将从库提升为主库(可写),那么使用heroku的unfollow命令。

比如,你的只读从库是HEROKU_POSTGRESQL_AMBER,为了让它可写,那么运行pg:unfollow命令。如下:

$ heroku pg:unfollow HEROKU_POSTGRESQL_AMBER
! HEROKU_POSTGRESQL_AMBER will become writable and no longer
! follow HEROKU_POSTGRESQL_BRONZE. This cannot be undone.
! WARNING: Potentially Destructive Action
! This command will affect the app: myproject
! To proceed, type "myproject" or re-run this command with --confirm myproject
> myproject
Unfollowing... done

(八)慢查询日志

慢查询会导致程序性能显著下降。程序员有必要知道自己的应用,产生了哪些慢查询。heroku的日志系统允许你直接从控制终端浏览数据库的慢查询日志,任何大于50毫秒的查询将被dump到日志输出里。

查询实时日志输出,简单运行:heroku logs –tail –ps postgres。如果你只想浏览最近的日志,那么不带–tail参数运行该命令:heroku logs –ps postgres。更多高级数据库诊断技巧请见本博后续关于监控的内容。

此条目发表在Common分类目录,贴了, 标签。将固定链接加入收藏夹。