Ruby on rails 如何/最有效地向许多用户发送消息?

Ruby on rails 如何/最有效地向许多用户发送消息?,ruby-on-rails,database-design,architecture,many-to-many,Ruby On Rails,Database Design,Architecture,Many To Many,好的,我有一个有用户的网站。 我希望用户能够基于搜索查询向多个用户发送消息 例如。 John搜索“Florida”,该搜索返回100万用户/公司。 让john向搜索结果返回的所有用户/公司发送消息的最佳方式是什么 比如说,苏珊就是其中之一。当她登录到该网站时,她应该会看到John发送的消息(因为Susan在搜索返回的结果中) (注意:这些信息是网站内部的(不是电子邮件)) 我有一个存储主要消息的“消息”表 选项1:要有一个参与者表,其中存储消息\u id和用户\u id。但是,这需要在该表中插入

好的,我有一个有用户的网站。 我希望用户能够基于搜索查询向多个用户发送消息

例如。 John搜索“Florida”,该搜索返回100万用户/公司。 让john向搜索结果返回的所有用户/公司发送消息的最佳方式是什么

比如说,苏珊就是其中之一。当她登录到该网站时,她应该会看到John发送的消息(因为Susan在搜索返回的结果中)

(注意:这些信息是网站内部的(不是电子邮件))

我有一个存储主要消息的“消息”表

选项1:要有一个参与者表,其中存储消息\u id和用户\u id。但是,这需要在该表中插入100万次

选项2:

有什么办法最有效/最好


****编辑:澄清此文件的用法****

这不是垃圾邮件


该网站的工作原理与阿里巴巴网站类似,网站上的用户/公司希望显示内部消息。其思想是,用户搜索某个内容,并基于该查询,他可以向搜索中出现的所有公司/用户发送消息,即购买线索请求。一种解决方案是创建用户组(基于您问题的位置),将消息发送给该组,而不是每个人。要管理是否阅读,您可以简单地使用“过去x天/周内发送给“Florida”组的消息/任何内容”功能,这将很容易实现


这样你就不用再插入一百万条了。不幸的是,我不确定是否有更好的方法来管理收件箱,但我相信比我更了解的人能够添加到我的建议中。

用户消息表非常小-它是消息和用户(即收件人)之间的交叉点。这是两个外键列,可能还有一个状态。因此,尽管它可能有很多记录,但它们不会占用很多空间。这并不是说您必须为每个收件人存储一个消息实例

所以存储绝对不是问题。性能可能是您关心的问题,但现在任何一个像样的数据库引擎都可以在几分之一秒内插入数千条记录。这只是优化集合操作的问题,而不是单个行


“我只是担心桌子 将迅速成长。”

你总是可以选择整理桌子。如果收件人删除“消息”,则删除交叉点记录。可能会添加一个日期列,然后超时在特定时间段内未读取的“消息”。实际上,这听起来像是一个积极的特征:考虑到你的商业模式,发送者可能希望及时回复,而不会对三个月前的提议感兴趣

“我希望会有更多的机会 “高效/优雅”


这完全取决于你对效率的定义。磁盘存储很便宜,但速度也相对较慢。RAM速度快,但相对昂贵(尽管SDD在几年后会变得便宜)。那么你想优化什么呢?约翰寄邮件要多长时间?苏珊花了多长时间读这封信?你要在硬盘上花多少钱?配置中间层需要多少时间?

这是邮件服务器的典型功能。所以

答:另一个解决方案是在后台使用真正的邮件系统/服务器

设置起来有点复杂(要求站点上的每个用户和每个组在本地服务器上都有一个真正的电子邮件地址,该地址只在内部使用),并让邮件服务器处理发送给组的多封邮件,等等

无论如何,考虑一下您可能必须提供的功能,如:消息读取、消息未读、消息标记(如重要等)、消息删除。所以,我相信没有任何方法可以避免每个用户的每条消息都有一条记录。现在,让我们想想数据库上的表中到底有多少条消息。如果一个用户的收件箱中平均有100条消息(顺便说一句,这是巨大的,我们说的是平均值),这意味着(请参阅)一个表有2列(整数),有500万行,根据用户id进行索引。这对于任何严肃的数据库来说都不是问题


B.现在,如果你真的关心性能,你可以使用哈希存储/DB(仅用于消息),如Memcached、Tokio Cabinet、CouchDB、MongoDB等。

我不了解这种功能的应用程序。对我来说,这看起来更像是垃圾邮件,而不是垃圾邮件。这些消息永远不会离开网站。因此,用户必须登录才能看到它们。事实上,这是一个潜在客户开发网站,如阿里巴巴网站,用户可以通过该网站向成吨的供应商/公司发送信息/获得联系。因此,那些将被“垃圾邮件”的公司之所以这样做,是因为他们希望收到潜在的潜在客户。你的数据库已经为你的用户存储了数百万行。我不认为再插入一百万是个问题。@Peter-我可能用了一百万(更像是一万:)太用力了。然而,如果每一条消息,我都要做几千次插入,那么“参与者”表将快速增长。啊,好吧。。。那就更有意义了。正如我所说的,我不确定使用情况。问题是,我希望允许用户发送到他们运行的查询结果列表中显示的用户/公司。所以它不像是一组预定义的组。每个查询可能不同。我将研究集合操作。但是,从我的调查来看,这似乎是唯一的办法。即使是你,它也只是一个包含ID的2列表,考虑到每条消息可能有几千条消息,我只是担心这个表会快速变大。我希望会有一个