`
jlaky
  • 浏览: 42853 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Rails中实现分表(1)垂直分表

阅读更多

我们开发的时候遇到一种情况,业务量小的时候设计了一张表来存帖子:

posts(id, topic_id, content, status, created_at, updated_at)

 

当数据量达到百万的量级后,发现此表查找非常慢,这时候想从数据库的角度来改进。

比较常用的方法是,把posts表中的大块数据的字段拆分出来,作为一个子表:

 

posts(id, topic_id, status, created_at, updated_at)

 

post_contents(post_id, content)

 

为了保证其他层不做修改,我们用代理的办法。

 

class Post < ActiveRcord::Base
  has_one :post_content, :class_name=>'PostContent',:foreign_key=>'post_id'

  def content
      post_content ? post_content.content : nil
  end
  
 def content=(txt)
     if post_content
       post_content.content = txt
     else
        build_post_content(:content=>txt) unless txt.blank?
     end
 end
  
end
 

 

 

 

针对这个应用,我们自己搞了个通用方法加入ActiveRecord::Base

 

  def self.forward_with_create(obj_name,attr_names)
    attr_names.each do |attr_name|
      
      define_method(attr_name) do |*args|
        obj = send(obj_name)
        obj ? obj.send(attr_name) : nil
      end
      
      define_method("#{attr_name}=") do |*args|
        obj = send(obj_name)
        val = args[0]
        if obj
          if obj.send(attr_name) != val
            obj.send("#{attr_name}=",val)
          end
        else
          send("build_#{obj_name}",{attr_name=>val}) if !val.blank?
        end
      end
      
    end
  end

 

这样,我们的Post就变成:

 

class Post < ActiveRcord::Base
  has_one :post_content, :class_name=>'PostContent',:foreign_key=>'post_id'

  forward_with_create(:post_content,[:content])
  
end
 

 

分享到:
评论
1 楼 winteen 2009-08-13  
赞~~~~

相关推荐

    Ruby on Rails中文指南

    10. **会话(Sessions)**和**cookies**:Rails提供了内置的会话管理和cookie支持,用于跟踪用户状态和实现用户认证。 11. **测试(Testing)**:Rails鼓励TDD(Test-Driven Development),提供了丰富的测试工具,...

    RailsGuides中那个blog程序源码

    Rails的 erb(Embedded Ruby)模板引擎允许开发者在HTML中嵌入Ruby代码,实现动态内容生成。 **控制器(Controller)** 是模型和视图之间的桥梁,处理用户的请求,调用模型进行业务处理,并将数据传递给视图进行...

    Ruby-Knock为RailsAPI实现无缝JWT身份验证

    在描述中提到的"Knock"是一个专门为Rails API设计的库,它帮助开发者实现JSON Web Token(JWT)的身份验证,这是一种安全的身份验证机制,适用于无状态API。 JWT是一种轻量级的认证协议,它允许服务器向客户端发送...

    基于Ruby on Rails框架实现的无线点餐系统

    Ruby on Rails框架实现的无线点餐系统项目是一个基于无线网络技术,专为餐饮行业设计的综合性信息化解决方案。此系统利用Ruby on Rails全栈式MVC框架,结合当下先进的移动互联网技术,旨在提升餐厅运营效率、优化...

    基于ruby on rails框架实现的音乐推荐网站项目源码.zip

    基于ruby on rails框架实现的音乐推荐网站项目源码.zip基于ruby on rails框架实现的音乐推荐网站项目源码.zip基于ruby on rails框架实现的音乐推荐网站项目源码.zip基于ruby on rails框架实现的音乐推荐网站项目源码...

    在Rails中使用SSL

    在Rails中使用SSL(安全套接层)是构建Web应用时确保数据传输安全的重要步骤。...通过理解并应用这些知识点,开发者可以在Rails应用中实现安全的SSL连接,提升用户数据的安全性,符合现代Web应用的安全标准。

    在rails中 使用RSpec生产CHM文档

    标题 "在Rails中使用RSpec生产CHM文档" 暗示了这个话题是关于如何在Ruby on Rails(简称Rails)框架中使用RSpec测试工具来创建帮助文档,特别是以CHM(Microsoft Compiled HTML Help)格式。CHM文件是一种常见的...

    Rails 中mongrel的安装

    2. **Ruby编写**: 作为纯Ruby实现的服务器,Mongrel与Rails框架集成紧密,减少了中间层带来的额外复杂性。 3. **轻量级**: Mongrel体积小巧,启动快速,适合开发和测试环境。 ** 安装Mongrel ** 在Rails项目中安装...

    Rails 101 入门电子书

    - 如何在Rails中实现RESTful接口。 - **案例分析**: - 分析一个典型的RESTful应用示例。 #### 九、练习作业2-在Group里面发表文章-双层RESTFul - **目标**: - 在Group中添加Post功能。 - **实现过程**: - 创建...

    rails指南 中文版

    1. **ActiveRecord**:这是Rails框架中的ORM(Object-Relational Mapping)组件,它负责处理数据库操作。通过ActiveRecord,开发者可以使用面向对象的方式来操作数据,而无需编写SQL语句。 2. **ActionController**...

    rails中使用javascript日期控件

    1. **日期格式匹配**:确保WebCalendar.js的日期格式与Rails应用中约定的日期格式一致。Rails默认使用ISO 8601标准(YYYY-MM-DD),而WebCalendar.js可能有不同的默认设置,需要进行相应的配置。 2. **数据验证**:...

    Struts2和Rails的国际化实现

    总结来说,Struts2和Rails的国际化实现都是基于资源文件,并通过特定的API或辅助方法在代码中引用这些资源。它们都考虑了会话和请求的上下文来自动选择合适的语言,并提供了手动切换语言的能力。尽管实现方式有所...

    使用Aptana+Rails开发Rails Web应用(中文)

    安装过程中,遵循提示进行,确保选择自定义安装并勾选Rails相关的插件,以便在Aptana中获得对Rails的全面支持。 安装完成后,打开Aptana Studio,创建一个新的Rails项目。在“File”菜单中选择“New”然后点击...

    关于rails学习中分页的示例

    这篇关于“rails学习中分页的示例”的文章可能涵盖了如何在Rails应用中实现分页的详细步骤。 在Rails中,最常用的分页库是`Kaminari`和`WillPaginate`。这里我们将以`Kaminari`为例进行讲解,因为它是近年来更受...

    中文版rails教程

    Rails的 erb(嵌入式Ruby)模板允许开发者在HTML中插入Ruby代码,实现动态内容的渲染。 3. **控制器(Controller)**:控制器是模型和视图之间的桥梁,处理用户请求,调用模型方法,然后将结果传递给视图进行展示。...

    Rails101_by_rails4.0

    作者特别提到了“CRUD懶人大法Scaffold”,它是一种通过Rails自动生成代码的方式来快速搭建基本的CRUD操作,这大大简化了开发流程,使得开发者可以将更多的精力放在业务逻辑的实现上。 此外,书中还介绍了一些Rails...

    Rails的中文乱码问题

    标题中的“Rails的中文乱码问题”涉及到的是在使用Ruby on Rails框架开发Web应用时,遇到的中文字符编码不正确的问题。Rails是一个基于Ruby语言的开源Web开发框架,它遵循MVC(Model-View-Controller)架构模式。在...

    Ruby On Rails中文教材(PDF)

    4. **ActiveRecord**:这是Rails中的ORM(对象关系映射)库,它允许开发者用Ruby代码操作数据库,无需编写SQL。 5. **Scaffolding**:Rails的快速开发工具,能自动生成CRUD(创建、读取、更新、删除)操作的模型、...

Global site tag (gtag.js) - Google Analytics