使用 ravendb 构建警报系统的最佳实践

本文关键字:最佳 系统 ravendb 构建 使用 | 更新日期: 2023-09-27 18:32:32

我想用ravendb构建一个警报系统。

实际上我存储书籍如下:

public class Book
{
    public string Id { get; set; }
    public string Title { get; set; }
    public string Description {get;set;}
}

用户可以创建一些与书籍标题和描述匹配的警报。

警报的定义如下:

public class Alert
{
    public string UserId{get;set;}
    public string Keywords{get;set;}
}

当一本书被发布,或者一些编辑然后匹配用户警报时,我会通知用户什么(通过电子邮件或类似的东西(。

因此,任何人都有最佳实践来制作高效的警报系统,而无需在每次发布或编辑书籍时循环浏览所有警报并执行搜索查询以获得匹配的书籍?

编辑:我正在使用Rhino.ESB以便在发布或编辑书籍时收到通知,我的问题不是关于如何获得书籍更新的通知。但实际上如何有效地将书籍与这些更新的警报相匹配。

编辑:StackOverFlow似乎在标签上使用订阅机制来向用户发送电子邮件,其中包含与这些标签相关的问题。简要介绍这一机制应该是一个开端。知道吗?

谢谢。

使用 ravendb 构建警报系统的最佳实践

Yoann,

你基本上做一个反向搜索。

public void Handle(BookUpdated msg)
{
    var book = Session.Load<Book>(msg.BookId);
    var alerts = Session.Query<Alerts>()
        .Search(x=>x.Keywords, book.Description)
        .ToList();

    // alert for book

}

请注意,您需要正确分页,并考虑如果您有很多关于一本书的警报会发生什么。