InfoQ

新闻

数据库新闻汇总:ActiveRecord数据分片,更快的Postgres IO

作者 Mirko Stocker译者 郭晓刚 发布于 2008年7月23日 上午1时16分

社区
Ruby
主题
数据访问,
性能和可伸缩性
标签
Ruby 1.9,
并发,
数据库,
ActiveRecord

本次数据库新闻汇总有,FiveRun最近开源的ActiveRecord数据分片插件DataFabric;如何用Postgres异步客户端API和Ruby 1.9的Fibers来加速Postgres数据访问。

ActiveRecord的数据分片

数据分片(Sharding)是一种将数据库打散成小块,然后分布到多台服务器上的技术,可以提高性能和可伸缩性。数据如何分割在很大程度上取决于应用的具体情况,比如eBay可以按照商品类别来划分。

ActiveRecord本身并不支持数据分片,于是才有了FiveRuns的DataFabric。DataFabric是一个ActiveRecord插件,它为数据模型增加了数据分片和复制的能力。

在模型中加入分片相当简单,它在README里给出了这样的例子:

class MyHugeVolumeOfDataModel < ActiveRecord::Base

  data_fabric :replicated => true, :shard_by => :city

end

详细信息请参阅FiveRuns博客或者DataFabric GitHub仓库

更快的Postgres IO 

另一则数据库新闻是Muhammed Ali将Ruby的Postgres访问速度提高了约40%。他用Postgres的异步客户端API和Ruby 1.9 Fibers实现了一个非阻塞的连接池和fiber池。从用户程序的角度看,交互过程是这样的:

[……]当一个fiber调用cpool.exec,查询被送到池中处理,该fiber被挂起,让路给 其他fiber。 其他fiber到达cpool.exec的时候也同样会挂起。稍后你会在事件循环中收到查询结束的通知(但顺序不定),然后与已结束查询相关联的 fiber将恢复执行。 

Muhammed还打算将之与EventMachine做更好的集成,也许能更进一步提升速度。请参阅Muhammad的博客,他将在上面给出代码的介绍和分析详情。

查看英文原文:Databases Roundup: Data Sharding for ActiveRecord and Faster Postgres IO

相关赞助商

InfoQ中文站Ruby社区,面向Web和企业开发的Ruby,主要关注Ruby on Rails,通过新闻、文章、视频访谈和演讲以及迷你书等为中国Ruby社区提供一流资讯。

没有回复

回复

独家内容

书评:敏捷模式──指向成功的路标

Ryan Cooper对Amr Elssamadisy的新书发表了评价,并认为书中提供了一种为实施敏捷量身定做的框架。本书并没有给出一种人人可用的敏捷方法,而是为读者提供一些模式和工具,用以找出哪些敏捷实践可以最有效地达到该组织机构的特定目标。

构建的可伸缩性和达到的性能:一个虚拟座谈会

这个由业界主要专家们参加的座谈会探究了在使应用程序具备尽可能好的伸缩性及性能的过程中所面临的挑战和思考过程。

OpenSocial的分析与实现

本视频主要对OpenSocial进行了分析,并对实现的方式进行了介绍。其中包括:OpenSocial的开发经验、Container Provider的技术准备、平台的构成要素、具体的规范、以及对未来的展望。

缓存系统MemCached的Java客户端优化历程

Memcached在大型网站被应用得越来越广泛,但是Java客户端并不多,本文作者基于现有的开源客户端进行了封装优化,并翔实记录了这一过程。

超越SOA:动态业务应用的新企业应用框架(2)

在他们文章的第二部分,作者探讨了动态业务应用的架构并介绍了资源容器的概念。他们示范了如何在JEE之上构建这个架构,以及它如何影响实现生产力。

使用ClickOnce细分发布版本

ClickOnce让WinForms应用程序的部署轻而易举。David Cooksey演示了如何在ASP.NET中编写一个HttpHandler来实现对ClickOnce部署的版本细分。

敏捷教练,从A到Z

敏捷带来了新的领导者角色,“敏捷教练”。它是不是跟“部门经理”或“技术领导”一样,只是换汤不换药呢?教练Pat Kua在这篇启蒙文章中对敏捷教练一职做了概述。

利用Ruby简化你的Java测试(进阶篇)

本文是Productive Java with Ruby系列文章的第二篇,通过上一篇的介绍,我想大家对如何利用Ruby进行单元测试有了一个基本的了解,从这里开始,我将和大家一起讨论一些利用Ruby进行单元测试时的高级话题。