如何快速查询这些文档或对其进行更好的建模,以便在rethinkdb中更快

时间:2016-05-19 19:07:25

标签: javascript rethinkdb reql

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

任何人都可以帮我模拟文档,以便我可以从查询中获得最快的速度吗?

现在我有这样的话:

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个。

0 个答案:

没有答案