我正在构建一个实时应用。在客户端和服务器(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集合中,比方说,每小时都可以在重启时备份数据库中的数据?
您对此案有何看法?有没有更聪明的算法可以想到以这种方式选择范围?