小编Ser*_*iuk的帖子

选择宝石以使用AWS

假设使用RoR编写的服务开始使用AWS S3来存储一些数据.使用AWS S3的最佳库是什么?目前我的两个主要选择是:

它们的主要优点和缺点是什么?如果以后的服务需要使用其他AWS(如EC2)怎么办?您使用了哪些其他宝石?为什么?

谢谢!

ruby rubygems ruby-on-rails amazon-s3 amazon-web-services

7
推荐指数
1
解决办法
1344
查看次数

可扩展的MySQL数据库,用于类似邮件的消息

假设我们有一个受欢迎的网站.我们需要在用户之间实现类似邮件的消息传递.典型的解决方案是使用2个表:

用户(user_id)

消息(message_id,sender_id(引用user_id),receiver_id(引用user_id),主题,正文).

该方法有2个显着的局限性

  1. 所有用户的所有消息都存储在一个表中,导致其高负载并降低整体数据库性能.
  2. 当有人需要同时向多个用户发送消息时,会复制该消息(recipients_count)次.

另一个解决方案使用3个表:

用户(user_id)

Sent_messages(sent_id,sender_id(引用user_id),主题,正文)

Received_messages(sent_id,receiver_id(引用user_id),主题,正文)

received_messages的主题和正文从sent_messages的相应字段中复制.

这种方法导致

  1. 通过将信息从一个表复制到另一个表来对数据库进行非规范化
  2. 用户实际上可以删除发送/接收的消息,而无需从接收器/发送器中删除它们.
  3. 消息占用的空间大约是2倍
  4. 每张表的装载量减少约2倍.

所以这里提出问题:

  1. 考虑哪种设计更适合高负载和可扩展性?(我认为这是第二个)
  2. 是否有其他数据库设计可以处理高负载?它是什么?有什么限制?

谢谢!

PS我明白,在解决这些可伸缩性问题之前,网站必须非常成功,但我想知道如果需要该怎么做.

UPDATE

目前,对于第一个版本,我将使用Daniel Vassallo提出的设计.但如果将来一切正常,设计将改为第二个.感谢Evert减轻了我的担忧.

mysql sql database database-design scalability

5
推荐指数
1
解决办法
300
查看次数

如何在Rails中创建"双方"多对多关系?

假设我们有一个摄影网站.任何作者都可以订阅以接收来自任何其他作者的更新.显然,如果作者A订阅作者B并不意味着B订阅了A.所以我们建立模型

class Author < ActiveRecord::Base
  has_many :subscriptions
  has_many :subscribed_by_author, :through => :subscriptions, :source => :subscribed_to
end

class Subscription < ActiveRecord::Base
  belongs_to :author
  belongs_to :subscribed_to, :class_name => "Author", :foreign_key => "subscribed_to"
end
Run Code Online (Sandbox Code Playgroud)

这样我们就可以使用了

  1. some_author.subscribed_by_author - some_author订阅的作者列表.
  2. 对于任何订阅,我们都可以知道两端(谁订阅了谁)

但问题是如何获得仅使用rails(不使用普通SQL)订阅某些作者的人员列表,即得到答案:"谁订阅了some_author?"

问题:Rails中是否有任何能力使双方的关系工作,即不仅写作some_author.subscribed_BY_author而且有some_author_subscribed_TO_author?如果有一个,那么它是什么?

PS明显的解决方案是

  1. 更改数据库设计,添加名为"direction"的列
  2. 每次创建订阅时创建2条记录
  3. 添加到作者模型

    has_many:subscribed_BY_author,:through =>:subscriptions,:source =>:subscribed_to,:conditions =>"direction ='by'"

    has_many:subscribed_TO_author,:through =>:subscriptions,:source =>:subscribed_to,:conditions =>"direction ='to""

但我想知道是否有一个解决方案而不改变数据库设计.

database-design ruby-on-rails has-many belongs-to

5
推荐指数
1
解决办法
548
查看次数