带有Mysql Master / Slave的Datamapper

时间:2011-04-15 23:35:05

标签: mysql ruby ruby-on-rails-3 datamapper

我似乎无法找到有关如何使用datamapper与mysql主/从设置进行通信的任何信息。我正在使用dm-mysql-adapter

运行rails3

4 个答案:

答案 0 :(得分:2)

您可以使用DataMapper的Multiple Data Store功能:

DataMapper.setup(:default, 'mysql://master-host/mydb')
DataMapper.setup(:slave, 'mysql://slave-host/mydb')

现在,无论何时您想从奴隶那里阅读,请使用:

DataMapper.repository(:slave) do
  Person.first
end

不幸的是,它看起来不像你可以做透明的从源级写入到主控:

  

[...]这将使用您与外部数据存储的连接和   它找到的第一个人。后来,当你给那个人打电话.save时,   它将被保存回:外部数据存储;对象知道   它的来源是什么,应该保存回来。

因此,如果您尝试保存从从站检索到的人员,则会在修改后尝试将其存储回从属数据库。

答案 1 :(得分:2)

这可能就是你要找的......

https://github.com/d11wtq/dm-master-slave-adapter

答案 2 :(得分:0)

您不必在您的应用程序中执行此操作,但可能Mysql会自行处理。这样,您就可以通过自动主故障转移实现负载平衡和高可用性的所有好处。我强烈建议在基于应用程序的手动负载平衡上进行此设置,因为您应该将持久层从应用程序提供的业务逻辑中删除。这带来了已经书写的优势,并且由于更好地分离了关注点,使您的应用程序更具可扩展性和可维护性。

查看概率Mysql NDB documentation和Mysql聚类快速入门this tutorial

答案 3 :(得分:-2)

1)您必须安装适配器。

2)添加要求     要求'rubygems'     需要'data_mapper' 3)配置我的sql

DataMapper.setup(:default, 'mysql://localhost/the_database_name')

DataMapper.mysql(:host xxxx, :user xxxx, :password xxxx, :database xxxx)

4)创建模型对象,例如:

class Post
  include DataMapper::Resource

  property :id,         Serial    # An auto-increment integer key
  property :title,      String    # A varchar type string, for short strings
  property :body,       Text      # A text block, for longer string data.
  property :created_at, DateTime  # A DateTime, for any date you might like.
end

如果您有任何疑问,可以查看以下链接:http://datamapper.org/getting-started