草庐IT

performance - 用于线程消息的 MongoDB/Mongoose 模式(高效)

coder 2023-05-05 原文

我对 noSQL 数据库有些陌生(不过我对关系数据库相当熟悉),我想知道使用线程消息处理收件箱系统的最有效方法是什么。

每条“消息”都有一个发件人和收件人。用户之间接收/发送消息的数量会有很大差异。这个系统应该可以很好地扩展到超过 1k 的用户。

我已经阅读了有关写/读时扇出的信息,但我不确定这对于线程消息的效果如何。

由于我是 MongoDB/NoSQL 的新手,我不太习惯以这种方式有效地构建数据。

我猜想会有嵌套对象以任何一种有效的方式来处理这个问题……但我无法确定一个对于 2 个用户之间的线程对话既高效又方便的设计。

我想用一个由 2 个用户组成的数组存储数据,并结合一个“消息”对象数组。但接下来是 2 个用户的用户名的顺序问题。 (例如,[UserA, UserB] 和 [UserB, UserA] 都是可能的并且会有问题,所以这似乎是个坏主意)。

我想过在读/写事情上做整个扇形,但这对于线程消息似乎并不有效(因为如果收件人抓取消息很方便,那么发件人抓取消息就不会了,反之亦然)。

我倾向于按收件人抓取邮件(因为收件箱会加载多条邮件,而发送只涉及一个 [尽管查找时间较长])。但我真的很想一次性获取一个线程对话,以及用户与之进行线程对话的用户列表(用于线程列表)。

如果有人能给我一个有效的线程对话模式,我将不胜感激。我一直在研究这个并试图解决几个小时的设计,我已经筋疲力尽了。我一直在我的设计中发现缺陷并废弃它们,我真的很想从对 NoSQL 数据库/MongoDB 更有经验的人那里得到一些输入,这样我就可以避免出现巨大的设计缺陷和/或编写本来可以用更好的数据库设计。

提前感谢所有帮助。

最佳答案

在这个特定的主题上你很幸运,有一篇很棒的帖子在这里讨论了架构的各种方法(这与你所看到的内容略有不同,但没有太大区别):

http://blog.mongodb.org/post/65612078649/schema-design-for-social-inboxes-in-mongodb

然后,Darren Wood 和 Asya Kamsky 在 2014 年 MongoDB World 上分三个部分详细介绍了这个主题:

Part 1 OutlineVideo

Part 2 OutlineVideo

Part 3 OutlineVideo

在 MongoDB World 上,Dropbox 的人也谈到了他们在构建邮箱时学到的经验:

http://www.mongodb.com/presentations/mongodb-mailbox

然后,为了完善它,有一个完整的引用架构,上面提到的 Darren Wood 在 Github 上编写了名为 Socialite 的代码:

https://github.com/10gen-labs/socialite

关于performance - 用于线程消息的 MongoDB/Mongoose 模式(高效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24903597/

有关performance - 用于线程消息的 MongoDB/Mongoose 模式(高效)的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  3. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  4. ruby - 如何在续集中重新加载表模式? - 2

    鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende

  5. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  6. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  7. ruby-on-rails - 如何在 Rails View 上显示错误消息? - 2

    我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c

  8. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  9. ruby - inverse_of 是否适用于 has_many? - 2

    当我使用has_one时,它​​工作得很好,但在has_many上却不行。在这里您可以看到object_id不同,因为它运行了另一个SQL来再次获取它。ruby-1.9.2-p290:001>e=Employee.create(name:'rafael',active:false)ruby-1.9.2-p290:002>b=Badge.create(number:1,employee:e)ruby-1.9.2-p290:003>a=Address.create(street:"123MarketSt",city:"SanDiego",employee:e)ruby-1.9.2-p290

  10. ruby - 使用 Ruby 通过 Outlook 发送消息的最简单方法是什么? - 2

    我的工作要求我为某些测试自动生成电子邮件。我一直在四处寻找,但未能找到可以快速实现的合理解决方案。它需要在outlook而不是其他邮件服务器中,因为我们有一些奇怪的身份验证规则,我们需要保存草稿而不是仅仅发送邮件的选项。显然win32ole可以做到这一点,但我找不到任何相当简单的例子。 最佳答案 假设存储了Outlook凭据并且您设置为自动登录到Outlook,WIN32OLE可以很好地完成此操作:require'win32ole'outlook=WIN32OLE.new('Outlook.Application')message=

随机推荐