具有范围的MongoDB查询行为

时间:2014-11-20 10:05:45

标签: javascript node.js mongodb mongodb-query

我正在构建一个实时应用。在客户端和服务器(NodeJS)之间建立Websocket连接。客户端发送四个数值。 2对低和高 - 使用这些值服务器选择一个数据范围。

没有使用MongoDB。

示例:

用户发送此数据

var myObj =  { userid: 10001234, 
               myData: { first: 400, second: 17 },
               first: { low: 300, high: 500 }, 
               second: { low: 10, high: 24 } };

接收数据的服务器执行此操作:

serverObj.userid = myObj.userid;
serverObj.myData = myObj.myData;

之后,服务器将serverObj推送到某个索引处的集合数组,它通过快速排序算法确定比较myData.first

所以如果我们从运行时间拍摄快照,我们可以在服务器上有一个看起来像这样的集合数组:

var collection =  [{ userid: 10001231, 
                     myData: { first: 400, second: 17 } },
                   { userid: 10001232, 
                     myData: { first: 401, second: 31 } },
                   { userid: 10001233, 
                     myData: { first: 402, second: 52 } },
                   { userid: 10001234, 
                     myData: { first: 403, second: 91 } },
                   { userid: 10001235, 
                     myData: { first: 404, second: 800 } },
                   { userid: 10001236, 
                     myData: { first: 405, second: 11 } },
                   { userid: 10001237, 
                     myData: { first: 406, second: 2 } } ];

现在假装数组包含超过1000个这样的条目。

服务器的下一步是查找用户在myData.first和myData.second中请求的值范围。为了实现这一点,我确定myObj.first.low的索引和myObj.first.high的索引,并从集合数组中提取两个索引之间的范围。 之后,服务器将比较myData.second来提取提取的数据。 然后:确定myObj.second.low的索引和myObj.second.high的索引,并从提取和求助的数组中提取两个索引之间的范围。 最终提取的信息包含客户给出的范围内的所有值 - >然后将其返回给客户端。

哇......好吧,这不容易用语言表达。但我认为它比简单复制更容易粘贴所有代码(这将是我班级的代码音调)。 我正在做的事情非常快,我起初并没有想到因为复杂性。但是有一个主要问题:我不把这个集合保存到我的记忆中。

我现在的实际问题: 我可以在没有速度的情况下将这种情况复制到mongodb,还是可以通过这种方式获得速度?这样即使我的服务器崩溃,数据也会被保存。

请记住:它应该很快。它可能很容易。

我不熟悉mongoDB,但我也可以将集合数组推送到MDG集合中,比方说,每小时都可以在重启时备份数据库中的数据?

您对此案有何看法?有没有更聪明的算法可以想到以这种方式选择范围?

0 个答案:

没有答案