`
jackdraw
  • 浏览: 55439 次
  • 来自: ...
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

关于has_many中:counter_cache的一些看法

阅读更多

在一对多的关系中,我对一个人,同时增加了三本书

如person.book.create(book1,book2,book3)

时,我发现日志里面

SELECT * FROM person WHERE (person.`id` = 2) 
  UPDATE products SET `book_count` = `book_count` + 1 WHERE (`id` = 2)

这样重复三次, 那如果是同时增加六本的,往上累加的话那不是很开销非常大,

如果我们把他分开来处理的话我们只要只行一次就可以了

我们计算出增加的书数量,在保存完之后再更新一下就可以了,也就是可以省下四条sql的执行

,我在想是不是这种保存方法有问题,还是有什么其他方法可以来代替

分享到:
评论
3 楼 jackdraw 2007-07-11  
如果你开发一个ajax之类的,用户体验性比较注重的话,我想这种批量处理还是比较多的,特别是在电子商务领域,我是这么看对这个问题的
1:这种批量处理的情况,在以后的应用领域来说会越来越多
2:在rails中我想可以在定义在指定关系has_one ,has_many 之关系中还可以做更多的事情,如果从counter_cache本身来说,
我的想法是在开启时通过检测是has_one还是has_many的关系来处理相应的情况会不会更好一些,这样用户就可以更好的来关心其他的一些事情。
3:对于维护成本的话我想都是差不多,主要是看你怎么构建这个东东
2 楼 rainchen 2007-07-10  
个人建议先考虑以下两个问题:
1.这种“批量”处理的机会多不多?
2.导致的性能成本高还是维护自定义代码的成本高?

1 楼 yehs220 2007-07-10  
做法没问题,应该就是这样的。
如果你想只update一次,那就不要用counter_cache,而是自己来维护这个counter。

相关推荐

    ACE_OS::mktime函数源代码

    * we don't know how many days are in months 12, 13, 14, etc. */ if ( (tb->tm_mon ) || (tb->tm_mon > 11) ) { tmptm1 += (tb->tm_mon / 12); if ( (tb->tm_mon %= 12) ) { tb->tm_mon += 12; tmptm1-...

    serialize_has_many:将has_many关系序列化为单个列。 使用ActiveRecord轻松实现NoSQL!

    安装将此行添加到您的应用程序的Gemfile中: gem 'serialize_has_many' 然后执行: $ bundle 或将其自己安装为: $ gem install serialize_has_many用法假设您有一个“父母有很多孩子”的关系。 要使用serialize_has...

    has_cache:Rails 缓存存储的便利包装器

    在您的类中使用has_cache提供了一个cached方法,该方法允许自动缓存通常在类或类的实例上可用的方法的结果。 它通过从调用cached的位置推断密钥,减轻了创建和跟踪密钥的麻烦,就像使用标准缓存存储接口一样。 用法...

    freemarket_sample_51a

    用户数柱子类型选项昵称细绳null:假电子邮件细绳null:假,唯一:true 加密密码细绳null:假协会has_many:评论has_many:post_reviews,外键::reviewer_id,class_name::Review has_many:receive_reviews,...

    freemarket_sample_50b

    ER図 用户数 柱子 类型 选项 ID 昵称 细绳 null:假 电子邮件 ...null:false,uniqure:true ...has_many:评论 has_many:post_reviews,外键::reviewer_id,class_name::Review ... has_many:sold

    many-to-many-through:这是使用has_many的许多示例教程

    这是关于如何使用has_many :throght创建多对多关联的完整示例has_many :throght在此示例中,我使用staff模型和client模型,其中人员有很多客户,而客户有很多员工 操作说明 在下面的终端中输入 $ rails new many - ...

    sharestudy

    テーブル设计使用者柱子类型选项昵称细绳null:假电子邮件细绳null:假加密密码细绳null:假介绍文本图像文件协会has_many:文章has_many:评论has_many:like_articles has_many:like_users has_many:用户标签has...

    sports-junkies

    消息has_many:tags,通过:tag_users has_many:tag_users has_many:职位has_many:评论房间表柱子类型选项姓名细绳null:假协会has_many:room_users has_many:users,通过:room_users has_many:消息当属:...

    音视频之-new.yuv

    "has_b_frames": 2, "sample_aspect_ratio": "81:256", "display_aspect_ratio": "9:16", "pix_fmt": "yuv420p", "level": 31, "chroma_location": "left", "refs": 1, "is_avc": "true", "nal_length_size...

    仇恨

    has_many:like_messages,通过::likes,来源::message 消息テーブル 柱子 类型 选项 标题 文本 null:假 内容 文本 null:假 用户身份 整数 null:false,foreign_key:true 图像 细绳 category_id 整数 ...

    freemarket_sample_45

    数据库设计 用户表 ... column_physical column_logic ...has_many:评估,通过:: user_evaluation has_many:产品,通过::喜欢 has_one:user_profile has_one:user_address has_one:送货地址 h

    共同花园

    has_many:关注者,通过::reverse_of_relationships has_many:评论 has_many:尝试 has_many:答案 归属_活动_哈希:县 内容テーブル 柱 类型 选件 grade_id 整数 null:假 subject_id 整数 null:假 类别 串...

    activemodel-associations, 用于普通 ruby 对象的has_many和belongs_to宏.zip

    activemodel-associations, 用于普通 ruby 对象的has_many和belongs_to宏 ActiveModel::Associations 用于普通 ruby 对象的has_many 和 belongs_to 宏。安装将此行添加到你的应用程序的Gemfile中:gem 'activemodel-

    书和玩笑

    项目计划模型和迁移关联: 用户has_many:结帐,foreign_key::borrower_id has_many:borrowed_books,通过::checkouts,来源::borrowed_book has_many:评论,外键::reviewer_id has_many:reviewed_books...

    我的游戏数据库

    テーブル设计 用户テーブル 柱子 类型 选项 姓名 细绳 null:假 电子邮件 细绳 ...has_many:游戏,通过::列表... has_many:playing_lists,-> {其中play_status:'playing'},class_name:'List',相关::destroy ha

    苯胺

    has_many:职位 has_many:评论 has_many:喜欢 has_many:关系 has_many:sns_credentials 帖子テーブル 柱 类型 选件 标题 串 null:假 说明 文本 category_id 整数 null:假 动物名 串 用户 参考资料 null:...

    group_calendar

    餐桌设计用户表柱子类型选项姓名细绳null:假电子邮件细绳null:假密码细绳null:假身份细绳协会has_many:user_groups has_many:groups,通过::user_groups has_many:日历has_many:聊天组表柱子类型选项姓名...

    freemarket_sample_70b:自由市场克隆网站Ruby on Rails + Haml,SCSS(BEM)+ jQuery + MySQL + AWS(EC2,S3)

    自述文件该自述文件通常会记录启动和运行应用程序所需的所有...one:贷方has_many:信用卡,从属::destroy has_many:项目,从属::destroy has_many:评论,相关::destroy has_many:likes,依赖::destroy ha

    has_token_field:ActiveRecord模型的令牌字段

    安装将此行添加到您的应用程序的Gemfile中: gem 'has_token_field'然后执行: $ bundle或将其自己安装为: $ gem install has_token_field用法将新字段添加到表中: class AddTokenToUsers < ActiveRecord :: ...

    plant-message

    has_many:房间,通过:room_users has_many:消息 テーブル 柱子 类型 选项 名称 细绳 null:假 用户 参考 null:false,foreign_key:true 协会 当属:用户 has_many:房间 房间テーブル 柱子 类型 选项 团队 ...

Global site tag (gtag.js) - Google Analytics