我们正在开发处理数百万条记录的系统。
Redis结构
关于Redis结构,我们计划为每个设备,用户等使用Hashes,并且所有可搜索/查询字段将作为集合添加到哈希中,如下所示
下面是node.js代码(其POC代码)
var key ="dvc:"+data.id;
client.hmset(key,data,function(err, item){
client.sadd("tag:"+data.Tag,key,function(err, result1){
})
client.sadd("serialNo:"+data.SerialNo,key,function(err, result1){
})
client.sadd("currentStatus:"+data.Status,key,function(err, result1){
})
client.sadd("createdOn:"+data.CreatedDate,key,function(err, result1){
})
if(data.Boxes && data.Boxes.length > 0) {
for loop to add all boxes
client.sadd("boxes:" + data.Boxes[i].id, key, function (err, result1) {
})
}
完成此操作后,计划是使用set query来获取所有不同的标签,状态,日期和Boxes范围查询。你们推荐这个吗?我们也计划运行负载测试..但是想检查是否有更好的方法
要求2我们还需要快速搜索(自动完成) 为此,我们计划将所有可搜索的文本放入ZSET中并进行评分和使用 下面搜索的zrangebylex是示例代码
client.zadd("zset",1,data.Tag+"|tag",function(err, result1){
console.log("imei "+result1);
})
client.zadd("zset",1,data.SerialNo+"|SerialNo",function(err, result1){
console.log("zset "+result1);
})
获取查询 zrangebylex zset [2073“[2073 \ xff”LIMIT 0 10
一切看起来都不错但有任何建议。
答案 0 :(得分:1)
实际上,您将数据放入哈希值中,然后按照不同的标准将它们组合在一起,无论是未排序的还是有序的集合。
实际上,当您在Redis中存储数据时,您确实喜欢直接构建和使用索引。