好的,我有一个有用户的网站。 我希望用户能够根据搜索查询向多个用户发送消息。
EG。 约翰搜索代表“佛罗里达”,此搜索返回100万用户/公司。 什么是让约翰向搜索结果返回的所有用户/公司发送消息的最佳方式?
让我们说,苏珊是这些用户中的一个。当她登录网站时,她应该看到John发送的消息(因为Susan在搜索返回的结果中)
(注意:邮件是网站内部的(不是电子邮件))
我有一个“消息”表,用于存储主要消息。
选项1:具有存储message_id和user_id的Participants表。但是,这需要在该表中进行100万次插入。
选项2:????
有什么想法是最有效/最好的方法吗?
****编辑:澄清使用此内容。****
这不是垃圾邮件。
该网站的工作方式类似于阿里巴巴网站,该网站上的用户/公司希望显示内部消息。想法是,用户搜索某些内容,并根据该查询,他可以向搜索中出现的所有公司/用户发送消息,即购买线索请求
答案 0 :(得分:2)
USER_MESSAGES表非常小 - 它是MESSAGES和USERS(即收件人)之间的交集。这是两个外键列,也许是一个状态。因此,虽然它可能有很多记录,但它们不会占用大量空间。这并不是说您必须为每个收件人存储Message的实例。
所以存储肯定不是问题。性能可能与您有关,但是现在任何体面的数据库引擎都可以在几分之一秒内插入数千条记录。这只是优化设置操作而不是单个行的问题。
“我只关心那张桌子 会快速增长。“
您总是可以选择管理桌子。如果收件人删除“消息”,则删除交叉记录。也许添加日期列,然后超时“消息”,这些消息在特定时间范围内未被读取。实际上,这听起来像是一个积极的特征:鉴于您的商业模式,发件人可能希望及时回复,并且不会对三个月前提出的建议感兴趣。
“我希望会有更多 高效/优雅的一个“
这完全取决于您对效率的定义。磁盘存储很便宜但也相对较慢。 RAM速度快但相对昂贵(尽管SDD在几年内会很便宜)。那么你想要优化什么?约翰发送邮件需要多长时间?苏珊阅读邮件需要多长时间?你需要花多少钱在硬盘上?您花在配置中间层上的时间是多少?
答案 1 :(得分:1)
一种解决方案是根据您问题中的位置创建用户组 - 将消息发送给组而不是每个人。为了管理是否读取,您可以简单地在过去的x天/周/“任何”功能中添加“消息来组合'佛罗里达州',这些功能很容易实现。
这样可以省去一百万次插入。不幸的是,我不确定管理收件箱的更好方法,但我确信比我更了解的人能够添加到我建议的内容中。
答案 2 :(得分:0)
这是邮件服务器的典型功能。所以..
一个。另一种解决方案是在后台使用真正的邮件系统/服务器。
设置这有点复杂(它要求您网站上的每个用户和每个组在本地服务器上都有一个真正的电子邮件地址,只能在内部使用)并让邮件服务器处理多条消息发送给团体等等。
无论如何,请考虑一下您必须提供以下功能:消息读取,消息未读,消息标记(重要等),消息删除。所以,我相信你无法逃避每个用户每条消息有一条记录。现在,让我们考虑一下DB上该表中真正有多少消息。如果一个用户平均在他的收件箱中有100条消息(顺便说一句,这是一个巨大的,我们说的是一个平均值),这将意味着(见APC's response)一个有2列(整数)的表,其中有5百万行,在user_id上编入索引。这不是任何严重数据库的问题。
B中。现在,如果您真的非常关注性能,可以使用哈希存储/数据库(仅用于消息),如Memcached,Tokio Cabinet,CouchDB,MongoDB等。