C# 优化长集合(以LiteDB为单位)

C# 优化长集合(以LiteDB为单位),c#,nosql,litedb,C#,Nosql,Litedb,我在LiteCollection中存储了一个类: public class Message { public string Id => $"{ChannelId}-{MessageId}"; public long ChannelId { get; set; } public long MessageId { get; set; } public string Text { get; set; } ... } MessageID可以重复,Chann

我在LiteCollection中存储了一个类:

public class Message {
    public string Id => $"{ChannelId}-{MessageId}";
    public long ChannelId { get; set; }
    public long MessageId { get; set; }
    public string Text { get; set; }
    ...
}
MessageID可以重复,ChannelID是唯一的

为了测试,我向集合中添加了700k条随机消息。但我认为在现实中会有更多

现在,按标识符接收特定消息需要70毫秒,从MessageID和ChannelID接收消息总共需要140毫秒

考虑到元素的数量将增加,我如何对此进行优化

它不能将所有内容都放在一个集合中,例如:

为通道创建新集合以创建通道类,并在 是否存储与此频道相关的所有消息?
如果您只需要一个组合字典键,则可以执行以下操作:

var allMessages = new List<Message>()
{
    // channelId, messageId, text
    new Message(1, 1, "Message1"),
    new Message(1, 2, "Message2"),
    new Message(2, 1, "Message3")
};

var lookup = allMessages.ToDictionary(x => x.Id, x => x);

// to find an entry by (channelId, messageId)
var id = $"{1}-{2}"; // keep in sync with your Message.Id()
var myItem = lookup[id];

// make sure to remove / add an entry from the dict before / after you change it

没有简单的解决方案,您必须为要进行的每种类型的查找管理字典。一个dict by identifier一个dict,其键为MessageId+ChannelId。在更改MessageId/ChannelID之前,请确保从查找字典中删除项。@Charles我理解您的消息,但不太理解如何实现此功能。你能设计一个答案并附上代码吗?