1

我需要存储调制解调器和消息并将它们关联起来,以便首先将它们保存为新的,而不与任何调制解调器相关联,当涉及到路由每条消息时,我必须首先查询哪个连接的调制解调器已将最多消息发送到我要路由的消息的编号。我需要订购 desc 以便获得具有更多消息的消息,此时我不在乎消息是否已分配或已发送(状态),因此我只查找每个调制解调器的号码的所有消息已发送消息并将消息发送给具有更高金额的消息。如果我发现他们都没有具有该编号的消息,我需要进行另一个查询,具有最少“分配”消息的调制解调器然后发送到具有最少分配消息的调制解调器。(已编辑)

任何人都可以帮我为文档建模,以便我可以最快地完成查询吗?

现在我有这样的:

modem
    {
    id:rethink internal,
    imei:primary,
    connected:boolean,
    messages:array of messages ids
    .. other less important args..
}

messages:
{
id:rethinkdb internan,
id_sms: I bring it from another system, I use it as primary,
message:the body,
status:new/assigned/sent
}

当我尝试我所拥有的查询时,路由消息最多需要一秒钟,这对于我需要的东西来说太长了。

这些是我正在使用的查询

带上消息数量最多的调制解调器:

r.table('modems').getAll(true,{index:'connected'})
  .map(function(modem) {
    return {imei: modem('imei'), 
            count: r.table('messages')
            .getAll(r.args(modem('messages')))('number').count(msg.sms.number)}})
  .orderBy(r.desc('count'))
  .limit(1)

具有最少“分配”消息的调制解调器

r.table('modems').getAll(true,{index:'connected'})
    .map(function(modem) {
        return {
            imei: modem('imei'), 
            count:  r.table('messages')
                    .getAll(r.args(modem('messages')))('status')
                    .count('asigned')
        }
    })
.orderBy(r.asc('count'))
.limit(1)

一定有更好的方法,我认为rethinkdb即使使用索引也不会那么慢。

我目前有 3 个调制解调器和 19k 条消息。第一个查询大约需要 400 毫秒,第二个查询需要 500 多毫秒。

4

0 回答 0